A funkció elkerülhetetlen, a neve nem ismert

A funkció elkerülhetetlen, a neve nem ismert

Tehát, ez a döntés nem elég a szerver objektum hozzá tudott rendesen kezelni az ügyfél - található. Voltak részei a tervezési megoldások pontos software design. Egy korábbi cikkben azt találtuk, hogy szükségünk van mutatókat typecasting gép gép interfészek és hivatkozás száma a tárgyat egy beépített „self-gyilkos”. Ők csak akkor lehet hozzáférni a kliens objektum módszereket, ami az ügyfél és ezek ugyanazokat a módszereket kell vagy lehet egy része az egyes interfész által végrehajtott alá, vagy - egy speciális funkció külön felületet. És minden egyes tárgy, nem számít, milyen a család és a törzs is lehet - köteles megvalósítani ezt a funkciót.

Mivel a kiállítás ezeket a funkciókat csak akkor lehet, mint egy interfész, és a vita tárgya: mi a jobb - kiadni őket formájában egyetlen felületen, a feladata, hogy tegye, hogy imputálására semmilyen tárgyat (beleértve az összes többi objektum interfészek), vagy - ezt a funkciót, hogy minden felület, kiállított tárgy ?

Mi határozza meg, amit mondunk. Az első módszer kerül meghívásra QueryInterface - meg kell tennie a másik IID felület látható adatokat az objektum, és visszatér a mutatót, hogy a felület. ő nincsenek paraméterei, és mindegyik hozza a kihívás, hogy a haladás az számlálóját a tárgy előre egy - a második AddRef eljárás kerül meghívásra. A harmadik módszer - Release. Feladata - a fordított AddRef. és amikor a referencia számláló nullát Release a ravaszt, és törölni a.

Miért, ahelyett, hogy egy irányító eljárás hivatkozási száma, jöttünk össze kettő? Nem utolsósorban azért, mert ez a módszer hívás kód paraméterek nélkül - rövidebb. Hagyja néhány bájt, de ezek néhány bájt a kliens találkozik bárhol is szaporították index. És a teljes mellett a kód nagy lehet.

Tehát a három módszer:

tudjuk rendezni egyetlen felületen. Vagy - tudjuk felírni része minden más felület. Melyik a jobb? És miért?

Mondjuk, ez a funkció származik az egy teljesen külön felületet X. és minden egyéb interfészek ugyanazon objektum nem rendelkezik. Mi történik? És ez az, ami történik, - ha az objektum jön létre, azt fogja kérni, hogy a szerver visszaadja nekünk egy mutatót a felület X. majd birtokában az index, akkor könnyen kap mutatókat és az összes többi tárgy felületek - a QueryInterface is része a felület X. De ha van a kiszolgáló kérte, hogy visszatérjen bármely más felület ugyanazon objektum, tehát ezzel a felület és az is marad - ez a felület nem QueryInterface. Ez arra kényszeríti minden alkalommal kérni fogja a kívánt felületet, nevezetesen, X., majd onnan a jogot, hogy nekünk egy mutatót. Van egy dupla munka a kliens oldalon - a készítmény a felületet mutató.

Ha ezt a funkciót helyezték minden felületen, hogy kiteszi egy tárgy, minden felületen fog részt további három cellában Vtbl. de nem kell semmilyen dupla munka a kliens oldalon, mind a menedzsment a létesítmény végezhetjük annak bármely felületen. És úgy tűnik, hogy a második módszer sokkal kényelmesebb. a kliens oldalon, természetesen -, hogy újra használni a névszerver.

De mivel tudjuk építeni egy ilyen létesítmény, ahol nem lesz „hasznos” felület? Lehetséges. De ez a típus alkalmassága minden esetben legyen. És akkor szorozzuk meg a mutatót, majd -, hogy elpusztítsa az objektumot. És minden, ami felül - meghatározása kizárólag kiküszöbölése egy szoftver probléma.

A leírt funkció, olyan alapvető, hogy e nélkül a „semmi nem működik” - mi, és elgondolkodni rajta, mert a mi végrehajtásában komponens kölcsönhatása hiányzott igen jelentős töredékek. Lehetséges, hogy végre ez egyébként? Részletezve - igen, valóban - nem. Végtére is, az ok, amiért ezt a funkciót részeként a tárgy - filozofikus. Ha tudnánk, hogy pontosan fordító statikus téma típusának és írja ez volt az egyik a kliens és a szerver természetesen a fordító tudta megvalósítani, és javítsa ki a hívást az új és jobb hívás törlése *. és a fordítóprogram átalakítani mutatókat kell gépelni. De valójában azt jelenti, hogy mind a kliens és a szerver kell elhelyezni keretében ugyanazon projekt - és már csak az ellenkezőjét „kezdeti feltételek”. Mi és a kliens és a szerver kell elhelyezni a különböző projektek különböző kontextusokban. Már - programozás bináris komponenseket.

Ez ennek fényében, először vett részt asztalok fordításidejű ágyazott maga az objektum, úgy, hogy azok fenntartását és futásidejű (vtbl) (lásd. Cikk Bevezetés összeállításához elmélet. És eltávolítja azt.), De most meg kell tölteni a tárgy és funkciók, mint időgazdálkodás és az élet hozza. És nem tudjuk elkerülni, hogy - vagy mi magunk, vagy fordító.

Vicces, hogy nem érti a kritikát az ismert típusú „A Windows - mastday és COM - suks”, amikor arra a tényre utal, hogy de „COM - extra kódot”, amely a „normális megfelelő projektet” nem. Igen, van egy ilyen kódot a projektben, de itt mi is ez kifejezetten a „kezüket”, és akkor nem a fordító, amely nem feltétlenül át a tartalmát a táblák időben kódfuttatást - egy része egy ilyen kódot egyszerűen be „egy olyan helyen hívás „és teljesen átlátszó, hogy a programozó. COM nem tartalmazza a sok extra kódot, de akkor a problémák megoldódnak COM nem lehet megoldani bármely fordító.

Meg kell jegyezni, hogy különösen -, hogy bár tanul COM. amely már megfogalmazott filozófiai jellegű. És akkor az egyik vagy másik formájában megtalálható a végrehajtása CORBA, és általában minden bináris komponens technológia. „Wrapper”, amely eltérő lehet, de a lényeg - ugyanaz.

A COM, ez nagyon alapvető lényege az úgynevezett „IUnknown interface”, amely lazán lefordítva úgy hangzik, mint „ismeretlen interface”, és legalább valamennyire zavartan -, ami ismeretlen felület, ha garantálva a jelenléte semmilyen tárgyat? Azonban, ha ez fordítva „felület nem tudom, ki” - minden a helyére kerül. Sőt, a bináris komponens objektum egy COM objektum akkor és csak akkor, ha végrehajtja legalább a IUnknown felület. Ha egy ilyen felület nem - ez nem egy tárgy COM. Bár, mint láttuk a példában №1 objektum lehet egy „bináris-komponens” és használata nélkül COM.

Ezzel a felületet, azt akarva-akaratlanul meg kell felelnie nagyon közel - ő az „alfa és omega” az összes interfész definiálja különleges viselkedését az objektumot. És most, miközben azt látjuk, hogy - bármilyen COM interfész kell örökölt IUnknown felületen. Meg kell érteni, hogy miért - ez egy része minden IUnknown interfész vezérlő objektum élettartama és a mutató típusú öntött. És nem kell semmilyen extra költségeket az ügyfélnek.