komponentní technologie, rozhraní IUNKNOWN

Napsal Mgr.Radovan Kaluža (») 19. 4. 2006 v kategorii IT, internet, přečteno: 829×
Komponenta je binární objekt a je obecně definována jako opakovatelně použitelný stavební blok programu. Jedná se o předem vytvořený a zapouzdřený kus aplikačního programového kódu, který lze kombinovat s jinými komponentami a s ručně psaným programem s cílem rychlého vývoje uživatelské aplikace.

Příklady komponent

Typické ukázky vizuálních komponent (přímo viditelných uživatelem aplikace) najdeme třeba v grafickém uživatelském rozhraní. Například ovládací tlačítko může být reprezentováno komponentou, která zapouzdřuje metody pro zobrazování tlačítka a reakci na různé události (jako např. kliknutí myší nebo stisknutí vhodné klávesy). Příkladem nevizuální komponenty je konektor zpřístupňující databázi, časovač nebo FTP server. Mohou to být ale i kompletní aplikace jako třeba textový editor, tabulkový procesor nebo internetový prohlížeč.
Konkrétní komponentní architektura definuje způsob vytváření programových komponent a postup, jakým je možné tyto komponenty kombinovat.

Struktura komponenty

Komponenty jsou charakterizovány rozhraním, které zahrnuje následující prvky:
  • vlastnosti
  • události
  • operace

Rozhraní je způsob zapojení objektu do systému a také je pro okolí, kam je zapojen, ztělesněním způsobu chování a vlastností objektu. Vlastnosti představují z vnějšího pohledu mechanismus pro ukládání a získávání hodnot. Z pohledu implementace komponenty se pak může jednat o hodnoty uložené v proměnných, souborech, databázích nebo o hodnoty vypočtené nebo získané nějakým způsobem z jiných objektů.

Integrace komponent do aplikací

Chceme-li vložit nějakou komponentu do aplikace, potřebujeme mít k dispozici její dokumentaci. Tato dokumentace musí být platformově nezávislá a strojově čitelná, takže ji může načíst například vývojové prostředí, ve kterém pracujeme.
Jednou z možností, jak tuto situaci řešit, je definovat nějaký strukturovaný textový formát, v němž bude uložen deskriptor komponenty. Tato metoda se využívá například v technologii COM nebo CORBA, kde je deskriptor komponenty popsán speciálním jazykem IDL (Interface Definition Language) pro definici rozhraní.
Další variantou je získání dokumentace analýzou vlastností, událostí a metod komponenty - tuto metodu využívá například technologie JavaBeans. Aby byla tato analýza možná, musí být pro pojmenování a strukturu jednotlivých prvků rozhraní komponenty dodrženy určité konvence. Takovou konvencí je např. to, že pro vlastnost x musí být komponentou definovány veřejné metody getX a setX.
Dalším vylepšením předchozí metody je zařazení základních prvků komponent přímo do programovacího jazyka, jako to činí např. C#. Překladač tohoto jazyka pak může poskytnout potřebné metainformace o rozhraní komponenty bez nutnosti dodržovat nějaké konvence pro pojmenování. Navíc je schopen zajistit provedení kontrol, které by se jinak mohly provádět až v okamžiku použití komponenty.

Přizpůsobení komponent

Při vytváření aplikace z jednotlivých komponent často potřebujeme předem definovat některé jejich vlastnosti. Například můžeme chtít nastavit barvu pozadí nebo typ písma tlačítka, dobu čekání časovače nebo číslo portu pro FTP server.
Vývojová prostředí podporující práci s komponentami obvykle nabízejí možnost nastavení hodnot vlastností pomocí formulářů (property sheets). Tyto formuláře obsahují pro každou nastavitelnou vlastnost buď textové pole, do kterého je možné vepsat hodnotu vlastnosti, případně umožňují spuštění speciálního editoru vlastnosti podle jejího typu, například dialogu pro nastavení barvy nebo typu písma.

Perzistence komponent

Správné konfigurace komponent lze dosáhnout dvěma metodami. Můžeme pro každou komponentu v programu vygenerovat úsek kódu, v němž provedeme nastavení potřebných vlastností. Nebo můžeme obsah celé komponenty s již nastavenými hodnotami vlastností peristentně uložit, například do souboru.

Kompozice komponent

Kompozice objektů vs. kompozice tříd, jak se vyhnout dědičnosti

Vývoj aplikací založených na komponentách

Vytváříme-li aplikaci z jednotlivých komponent, máme následující možnosti:
  • vytvořit své vlastní komponenty;
  • využít standardních komponent nabízených používaným vývojovým prostředím a operačním systémem;
  • získat komponenty od jiných dodavatelů.

V praxi se obvykle využívá kombinace všech tří možností. Při kombinování komponent jsme však vždy omezeni používanou komponentní technologií, a to zejména při zapojování komponent jiných dodavatelů. V některých případech lze ovšem použít různá řešení zajišťující přemostění odlišných komponentních modelů, např. pro přístup k COM komponentám z prostředí jazyka Java.

COM – co to je

Technologie COM, je založena na principu klient-server. COM poskytuje podporu spojení klienta s daným objektem. Další komunikace mezi klientem a objektem již pak probíhá přímo, bez zásahu COM.

/obrazky/radovan.bloger.cz/com.gif

COM klientem muže být další komponenta nebo libovolná aplikace, která se připojuje ke COM serveru. COM server pak poskytuje služby klientské aplikaci

druhy COM serverů


In-process servery
jsou servery, které běží ve stejném procesu jako klientská aplikace, jsou označovány jako DLL knihovny
Out-of-process servery
jsou servery, které se pouštějí uvnitř klientské aplikace, jsou označovány jakou spustitelné soubory (např. EXE)

IUnknown

Každé implementované rozhraní vzniká v C++ ze třídy IUnknown, což je základní třída pro definici rozhraní. Každá COM třída musí rozhraní IUnknown implementovat.
Každé rozhraní musí implementovat minimálně tři metody:
  • metoda AddRef()
slouží k počítání referencí na komponentu. V těle AddRef() musíme zvýšit čítač odkazů na komponentu. Vytvoří tedy ukazatel na komponentu.
  • metoda Release()
slouží k počítání referencí na komponentu. V těle Release() musíme snížit čítač odkazů na komponentu. Zruší tedy ukazatel na komponentu.
  • metoda QueryInterface()
Metoda QueryInterface slouží k získání ukazatele na rozhraní, jehož identifikace je dána parametrem iid. Tato identifikace je reprezentována 128 bitovou jednoznačně přidělenou číselnou hodnotou, zapisovanou obvykle šestnáctkově jako např. {cb9497b0-20b8-11d2-a4dc-00c04f991c78}. Přidělování těchto identifikátorů (obecně nazývaných GUID - Globally Unique Identifier, případně UUID - Universally Unique Identifier) se provádí algoritmem, jenž zaručuje, že nikde na světě nemohou vzniknout dva stejné identifikátory. Při výpočtu se berou do úvahy údaje jako je číslo síťové karty, aktuální datum a čas, aby byla jednoznačnost dostatečně spolehlivě zaručena.
Pokud komponenta nepodporuje rozhraní, na které se dotazujeme, vrátí metoda QueryInterface návratovou hodnotu E_NOINTERFACE. Je-li však toto rozhraní podporováno, vrací hodnotu S_OK a do parametru ppv uloží ukazatel na požadované rozhraní. Tento ukazatel je pak možné použít pro volání metod nalezeného rozhraní.
Facebook Twitter Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
www.iphonetapety.info iphone wallpapers www.iphone z IP 193.179.30.*** | 9.2.2009 16:49
www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
[*1*] [*2*] [*3*] [*4*] [*5*] [*6*] [*7*] [*8*] [*9*] [*10*] [*11*] [*12*] [*13*] [*14*] [*15*] [*16*] [*17*] [*18*] [*19*] [*20*] [*21*] [*22*] [*23*] [*24*] [*25*] [*26*] [*27*] [*28*] [*29*] [*30*] [*31*] [*32*] [*33*] [*34*] [*35*] [*36*] [*37*] [*38*] [*39*] [*40*] [*41*] [*42*] [*43*] [*44*] [*45*] [*46*] [*47*] [*48*] [*49*] [*50*]   [b] [obr]
Odpovězte prosím číslicemi: Součet čísel jedna a jedna