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čnostiVý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.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()
- metoda Release()
- metoda QueryInterface()
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í.


2012 ©