Živě.cz o počítačích a internetu

Umíme to s Delphi: 163. díl – komponentní technologie, úplný úvod

Václav Kadlec 13.9.2005

V dnešním článku otevřeme téma, které je vysoce aktuální a na které mě ve svých emailech často upozorňujete. Otevřeme bránu do světa komponentních technologií. Komponentní technologie nám umožňují výrazným způsobem změnit svůj pohled na vývoj softwaru a přinášejí nám zase nové možnosti. Dnešní článek nabízí úplný úvod do problematiky: čekejte seznámení se světem komponent, popis jejich koncepce a filozofie a také srovnání komponent s tradičními způsoby vývoje aplikací.

Vítejte u dalšího pokračování našeho seriálu o programování v Delphi. Před týdnem jsme vytvořením ukázkové aplikace dokončili rozsáhlé téma – problematiku datových proudů, streamů. Dnes se pustíme do tématu ještě rozsáhlejšího, který si však zaslouží příslušnou pozornost díky své atraktivitě a současnému rozvoji.

Jedná se o tzv. komponentové technologie. Někteří z vás se s tímto pojmem jistě už setkali, pro jiné se jedná o úplnou novinku. V každém případě však jde o oblast, která v poslední době požívá stále větší a větší pozornost. Jde totiž o jeden z možných způsobů, jak se vyrovnat s rostoucí komplexností softwarových aplikací, s rostoucími požadavky zákazníků a také s dynamikou neustále se měnícího okolního světa, který staví softwarové vývojáře před nelehký úkol - udržovat aplikace stejně flexibilní jako vše ostatní, co se nám mění dnes a denně před očima.

Vzhledem k tomu, že existuje několik konkrétních komponentních technologií, které sice souhrnně požívají název komponentní, avšak v detailech a především v konkrétních implementacích se velmi silně liší, je nutné zvolit určité zástupce, kterými se budeme zabývat. Ostatní technologie potom budeme buď ignorovat úplně a nebo jim věnujeme jen krátkou zmínku. Nelze jinak, svět komponent je příliš rozsáhlý a navíc v seriálu věnovanému primárně Delphi nemá příliš smysl rozebírat třeba javovské technologie.

Protože oblast komponentních technologií je opravdu mimořádně rozsáhlá, a nemáme jednoduše šanci prozkoumat ji celou na poměrně přizpůsobivém, přesto však určitým způsobem omezeném rozsahu stránek Živě.cz, pojďme si hned na samotný úvod říci, které aspekty komponent společně objevíme a které naopak ponecháme příslušnějším a informovanějším zdrojům.

Tolik na samotný úvod. Nyní tedy víte, co se seriálem v následující době zamýšlím. Pokud máte k uvedenému schématu jakýkoliv komentář, nebo pokud byste v dílech o komponentách rádi viděli něco, co jsem dosud nezmínil, neváhejte se prosím ozvat do diskuse a nebo mi přímo napiště na tradiční adresu vkadlec@post.cz.

Nyní již však pojďme bez váhání na věc: co jsou to komponentní technologie a proč je kolem nich vytvořen takový rozruch?

Komponentní technologie: co to je?

Začněme moudrými myšlenkami těch, kteří komponentám zasvětili svou profesionální kariéru.

Motto:

Have you ever wanted to change your application or add new features after it has shipped? Would you like to develop your application incrementally instead of completely rewriting it every two years? Would you like to make your application more customizable? More flexible? More dynamic?Would you like to speed the development of your application? Do you need to develop distributed applications? Would you like to write distributed applications the same way you write nondistributed applications?
-- Dale Rogerson: Inside COM, page xvii

Ne že bych si troufal stát se překladatelem, pokud však někteří z vás angličtinou nevládnou, pokusím se o volný překlad: Už jste někdy chtěli změnit vytvořenou aplikaci nebo přidat nové funkce poté, co byla poslána zákazníkům? Chtěli byste vytvářet aplikace inkrementálně namísto kompletního předělávání každé dva roky? Chtěli byste vytvářet přizpůsobitelnější aplikace? Flexibilnější aplikace? Dynamičtější aplikace? Chtěli byste zrychlit vývoj svých aplikací? Potřebujete vyvíjet distribuované aplikace? Chtěli byste psát distribuované aplikace stejným způsobem, jakým vytváříte ty nedistribuované?

Je zřejmé, že snad úplně každý odpoví kladně přinejmenším na jednu z výše uvedených otázek. A právě jedna jediná kladná odpověď je podle autora citátu Dala Rogersona, mimochodem autora několika významných publikací ze světa komponent, předpokladem pro to, abyste se komponentami začali zabývat i vy.

Pojďme se podívat na několik definicí, které jsou uvedeny v literatuře zabývající se komponentami.

Softwarová komponenta je definována jako softwarový element, který odpovídá komponentovému modelu, může být nezávisle šířen a může se skládat s ostatními komponentami podle definovaného kompozičního standardu bez jakýchkoliv změn. (B. Council, T. Heineman – Component Based Software Engineering, Addison – Wesley, 2001)

Komponentový model definuje specifické interakce mezi komponentami a kompoziční standardy. Implementace komponentového modelu je specializovaná množina spustitelných softwarových elementů vyžadovaná k podpoře spouštění komponent odpovídajících tomuto modelu. (B. Council, T. Heineman – Component Based Software Engineering, Addison – Wesley, 2001)

Zdá se vám to srozumitelné? Pravděpodobně ne. Tak ale hovoří definice. Pojďme si je raději vysvětlit. Podívejme se přitom třeba o světa průmyslové výroby. Drtivá většina průmyslových odvětví je připravena využívat mechanismus „montování výrobků z předem připravených, hotových součástek“. Tento přístup má celou řadu výhod a asi nemá smysl je příliš podrobně rozebírat: používání předem připravených dílů šetří čas, náklady, usnadňuje montáž a podporuje standardizaci a vzájemnou kompatibilitu. Efektivita, variabilita, nahraditelnost a opravitelnost – to jsou nejdůležitější výhody montování výrobků z předpřipravených součástek. Nikoho by asi nenapadlo kupovat novou kuchyňskou linku kvůli utrženému madlu u dveří jedné skříňky.

Položme si tedy jednoduchou otázku: proč bychom tuto koncepci nepřenesli do světa vývoje softwaru? Proč bychom kromě aut, kol, praček, televizí a nábytku neskládali z předem připravených součástek také softwarové aplikace? Můžeme tak využít všech výhod, na které přišli „nepočítačoví“ inženýři již před hezkou řádkou let.

Potíž ale je, že skládání softwaru z předpřipravených částí (nazvěme je třeba softwarové komponenty) není tak jednoduché, jak bys se mohlo na první pohled zdát. Softwarové komponenty spolu potřebují aktivně a velmi intenzivně komunikovat. Tato komunikace musí být navíc založena na jednoznačných, striktních a široce uznávaných standardech, protože v opačném případě se hned na začátku zřekneme většiny výhod, kterých jsme právě chtěli dosáhnout.

Objevují se proto technologie, které tyto standardy definují. Souhrnně jim říkáme komponentní technologie

Pohled do historie

Abychom dostali určitý náhled na to, z čeho a proč vlastně komponentní technologie vznikly, podívejme se na stručný výlet do historie. Jak se vyvíjely přístupy k vývoji aplikací?

Hned v tomto okamžiku je však nutné jedním dechem dodat, že popsané ideály jsou často pouze v rovině teorií: realita není tak růžová a praxe nefunguje tak snadno. Komponenty jsou sice nezávislé, ale najít takovou, která dělá to, co chceme, vyhovuje rozhraním, které požadujeme, disponuje podporou, kterou potřebujeme a jejíž výrobce je navíc ochoten a schopen realizovat modifikace, po kterých toužíme, je více než složité. To však na obecné koncepci komponentních technologií nic nemění.

Závěrem

Dnes jsme otevřeli svět komponent, komponentních technologií a sestavování softwaru z předem připravených součástek. Tento svět je krásný, ale velmi rozsáhlý, proto nám ještě nějakou dobu potrvá, než jím dokážeme alespoň trochu rozumně projít, nevynechat nic důležitého a přitom přinést jen stravitelné množství informací. Za týden budeme v této procházce pokračovat.