1.1 ┌vod Vß₧enφ
p°ßtelΘ, dostßvß se vßm do rukou kniha, kterß by m∞la usnadnit vaÜφ orientaci na
poli nov²ch technologiφ, je₧ se p°φmo draΦφ silou valφ na nßs - programßtory.
Dßvno pryΦ jsou Φasy, kdy ka₧dß aplikace byla urΦena prßv∞ pro jednu v∞c a
prakticky nevyu₧φvala mo₧nostφ jin²ch aplikacφ, nemohla, v₧dy¥ p°ece jinß
aplikace ani zßrove≥ "b∞₧et" nemohla. V dneÜnφ dob∞, kdy operaΦnφ
systΘm Windows dosahuje takov²ch kvalit, ₧e spl≥uje p°edstavy i nejnßroΦn∞jÜφch
u₧ivatel∙ a je zßrove≥ nerozÜφ°en∞jÜφm operaΦnφm systΘmem, ji₧ takovΘ
aplikace nemajφ mφsto ani uplatn∞nφ. Kdo chce jφt s dobou, musφ se uΦit.
NaÜt∞stφ nov²ch technologiφ je dostatek. Nejnov∞jÜφ zp∙sob vytvß°enφ
aplikacφ, kter² je dnes zßrove≥ standardem, je zalo₧en² na komponentßch.
1.2 Historie
Ti starÜφ a zkuÜen∞jÜφ z nßs si
jist∞ vzpomenou na starΘ dobrΘ Φasy, kdy ka₧d² programßtor vytvß°el program
prakticky od nuly a za pomoci znalostφ o strukturovanΘm programovßnφ p°idßval jednu
proceduru za druhou. V lepÜφm p°φpad∞ pou₧il n∞jakou knihovnu funkcφ, kterou vytvo°il kolega "z vedlejÜφ kancelß°e".
Jist∞, existovaly firmy, kterΘ dodßvaly ji₧ hotovΘ knihovny funkcφ. Pokud byly jen
trochu pou₧itelnΘ, urΦit∞ tu mravenΦφ prßci trochu zjednoduÜily.
Zvrat v programovßnφ urΦit∞ p°inesla
objektov∞ orientovanß technologie. Programßtor ji₧ nevytvß°φ program, kter² se
vykonßvß "od zaΦßtku a₧ do konce", ale prost°edφ, do kterΘho umis¥uje
jednotlivΘ objekty, kterΘ spolu komunikujφ pomocφ zprßv. Takov² objektov∞
orientovan² systΘm pak reaguje na podn∞ty zvenΦφ, od u₧ivatele a vykonßvß tak zcela automaticky po₧adovanΘ p°φkazy. S
trochou nadsßzky lze °φci, ₧e takov² systΘm "₧ije" a napodobuje tak
reßlnΘ prost°edφ. Objektov∞ orientovanΘ technologie se s r∙zn²mi odchylkami
pou₧φvajφ a₧ do dnes. Ka₧d² jen trochu zkuÜen∞jÜφ analytik vφ, ₧e zkrßtka bez objekt∙ u₧ to dnes nejde. Co tedy
lze jeÜt∞ chtφt ?
Od zaΦßtku vzniku objekt∙ ji₧ uplynulo
mnoho Φasu a vzniklo mnoho OO jazyk∙. Ne ka₧d² se vÜak hodφ na dan² problΘm.
Sehnat t²m programßtor∙, kte°φ bravurn∞ ovlßdajφ jeden jazyk je n∞kdy nad rßmec
mo₧nostφ. Co₧ takhle sestavit v²sledn² produkt z jednotliv²ch Φßstφ, jako hrad z
kostek a jeÜt∞ ke vÜemu naprogramovat ka₧dou kostku pomocφ jinΘho jazyka? ╪eÜenφ
je snadnΘ, vytvo°me obecnou kostku a popiÜme jejφ zp∙sob komunikace s ostatnφmi
kostkami. Tak vznikly komponenty a jejich rozhranφ.
1.3 Komponenty
Programovßnφ pomocφ komponent je
vskutku dobr² nßpad. Ka₧dß aplikace se sklßdß z mnoha komponent, kterΘ mohou b²t
naprogramovßny v r∙zn²ch programovacφch jazycφch a tyto komponenty pak spolu
komunikujφ pomocφ spoleΦnΘho protokolu. Takovß aplikace lze jednoduch²m zp∙sobem
rozÜi°ovat tφm, ₧e p°idßvßme novΘ komponenty. Ani ·dr₧ba nenφ tak slo₧itß,
staΦφ vym∞nit starou komponentu za novou (bez nutnosti kompilace ostatnφch).
Aplikace ji₧ nenφ jedin² nerozd∞liteln² balφk, ale je slo₧ena z komponent, se
kter²mi m∙₧eme libovoln∞ manipulovat.
1.4. Knihovny komponent
PozornΘho Φtenß°e jist∞ napadlo, ₧e
z hotov²ch komponent lze sestavovat celΘ knihovny, kterΘ pak pou₧φvßme pro tvorbu
aplikacφ. Komponenty v takovΘ knihovn∞ mohou b²t neustßle aktualizovßny a m∞n∞ny v
zßvislosti na nov²ch po₧adavcφch, Φφm₧ zßrove≥ aktualizujeme aplikace, kterΘ
jsou z t∞chto komponent vytvo°eny. V²voj jednotliv²ch aplikacφ pak spoΦφvß v
jednoduchΘm sestavovßnφ z p°ipraven²ch komponent,
Φφm₧ se prßce mnohonßsobn∞ urychluje.
Umφst∞nφ komponent je nezßvislΘ
vzhledem k b∞hu programu. To znamenß, ₧e s komponentou, kterß se nachßzφ v jinΘm
procesu se manipuluje stejn∞, jako kdyby byla vytvo°ena ve stejnΘm procesu jako klient.
Lze dokonce vytvß°et takovΘ komponenty, kterΘ jsou v dob∞ b∞hu programu umφst∞ny
na jinΘm poΦφtaΦi.
1.6. Zapouzd°enφ komponent
Komponenty jsou z hlediska u₧ivatel∙
zcela zapouzd°eny a komunikace s nimi probφhß skrze jejφ rozhranφ. Je velice d∙le₧itΘ, aby toto rozhranφ bylo nem∞nnΘ, tzn.
ka₧dß novß verze komponenty musφ obsahovat stejnΘ rozhranφ. Tato podmφnka
zaruΦuje, ₧e novΘ komponenty zapadnou bez problΘm∙ do stßvajφcφho systΘmu.
Zßrove≥ je zachovßna kompatibilita mezi star²mi a nov²mi komponentami.
DalÜφ d∙le₧itou vlastnostφ komponent
je jejich jednotnost. Na komponent∞ nikdy nenφ poznat v jakΘm, programovacφm jazyce
byla vytvo°ena, prßv∞ tato vlastnost p°inßÜφ nezßvislost na programovacφm jazyce.
Jestli₧e chceme vytvß°et takovΘ
komponenty, kterΘ spolu um∞jφ komunikovat, musφme pou₧φvat jednotnou technologii,
tato technologie se jmenuje COM - Component Object Model.
1.6. COM
Component Object Model je popis,
kter² °φkß jak majφ komponenty vypadat a jak²m zp∙sobem spolu majφ komunikovat.
Tento popis zve°ejnila firma Microsoft zhruba p°ed Φty°mi roky a vytvo°ila z n∞j
standard. Dφky tomu je pou₧φvßnφ komponent nezßvislΘ na jazyce, proto₧e komponenta
je distribuovßna v₧dy p°elo₧enß v binßrnφm tvaru, kter² odpovφdß tomuto
standardu. COM tΘ₧ definuje jak mß vypadat
rozhranφ komponenty a jak se mß pou₧φvat.
Pozor, COM nenφ poΦφtaΦov² jazyk, je to pouze nßvod jak
vytvß°et tyto objekty tak, aby spl≥ovaly podmφnky standardu. Tato kniha bude popisovat
vytvß°enφ COM-∙ pomocφ jazyka C++ a prost°edφ Visual C++.
OperaΦnφ systΘm Windows poskytuje
programßtor∙m, kte°φ vyvφjejφ COM objekty, celou °adu API funkcφ, kterΘ tuto
prßci zjednoduÜujφ. Jak se dozvφme pozd∞ji tyto funkce jsou velice jednoduchΘ a
jejich implementaci m∙₧e ka₧d² provΘst sßm. Tato knihovna obsahuje k≤d, kter²
zajiÜ¥uje sprßvnΘ vytvß°enφ COM-∙ a komunikaci mezi nimi. V knihovn∞ je dßl
implementovßna komunikace mezi distribuovan²mi COM-y (DCOM), co₧ jsou objekty, kterΘ
spolu komunikujφ pomocφ poΦφtaΦovΘ sφt∞. |