Objektové programování
Pokud chcete programovat pro Windows a zvláště pokud chcete programovat ve Visual C++, neobejdete se bez znalosti objektového programování. Toto má být jen stručný výcuc toho podstatného. Pro podrobnější informace se obraťte na odbornou literaturu.
Co je objektové programování?
Jelikož nechci
opisovat definice z knížek nebude to možná úplně přesné,
ale v podstatě jde o tohle: Objektové programování je
založeno na používání objektů - tříd. Třída je vlastně
datový typ podobně jako int nebo double. Každá třída má
svá data a umí s těmito daty pracovat. Vytvoříte-li vlastní
třídu např. pro textový řetězec, můžete ji pak používat
ve svých dalších programech kdykoliv aniž byste museli stále
znova oprašovat své znalosti funkcí C pro práci s řetězci.
Vlastně můžete používat třídu z nějaké knihovny (např.
MFC dodávané s Visual C++) aniž byste měli ponětí jak to
uvnitř pracuje. Pro vás to může být černá
skříňka-záhadný objekt-do kterého nasypete údaje a
dostanete zase jiné. Asi se tak program přibližuje
reálnému životu -řekněme, že potřebujete opravit televizi,
co uděláte?
1.) Zavoláte opraváře TV = vytvoříte objekt třídy
opravář TV.
Všimněte si: Třída- Opravář TV -je datový typ, něco
obecného, vy pracujete vždy s konkrétním objektem (panem
Novákem z naší ulice, který je náhodou
televizním opravářem). Jinou třídou mohou být třeba
opraváři mixerů a jinou třídou zase učitelé atp. Ale vždy
pokud chcete opravit mixer, "použijete" nějaký
konkrétní objekt třídy Opravář Mixerů, objekt jménem
třeba Josef Holohlavý.
2.) Ukážete opraváři svoji televizi-nebo mu ji zanesete- řeknete mu co jí schází a aby ji opravil. = Uložíte do objektu svoje data a zavoláte členskou funkci OpravTV.
3.) Užíváte si výsledků opravářovy práce = Použijete hodnotu vrácenou funkcí OpravTV.
Jaké to má výhody oproti klasickému
programování?
Z předchozího příkladu je zřejmé, že -- Pokud potřebujete
opravit TV nemusíte se nutně napřed vyučit opravářem,
stačí, když se naučíte používat objekty třídy Opravář
TV. Tj. v programování - nemusíte programovat všechno sami z
elementárních funkcí jaké poskytuje váš programovací
jazyk, stačí použít co už někdo naprogramoval. Řeknete
možná "to můžu i normálně, prostě zkopíruju
potřebné funkce…". Dobře, představte si, že chcete
udělat program pro práci s maticemi. Pokud použijete
klasicky napsaný program budete muset zkopírovat funkce na
výpočet determinantu, násobení, sčítání matic atd. ,
zajistit aby dostávali data v potřebném formátu a zpracovat
jejich výsledky.
Pokud použijete něčí objektově napsaný program, budete mít k dispozici
třídu jménem např. Matice, se kterou pak můžete v programu
pracovat prakticky stejně jako třeba s číslem typu int. V
jazyce C++ je pro třídu možno definovat vlastní operátory
(tj. +,*, apod.) a pak je použít ve výrazech. Tedy
chcete-li přičíst k matici G matici H, můžete klidně napsat
G = G +H. V "klasickém" programu byste asi volali
nějaké funkci - Secti(G,H);
Ale i když musíte pro svůj program napsat všechno sami, je lepší řešit to objektově. Zůstaňme u matice-napsat funkce pro operace jako je výpočet determinantu není zrovna jednoduché. Když se vám tedy podaří ve šťastném dni (spíše počítejte s týdnem) koncentrovat veškeré programátorské a matematické znalosti a stvoříte dané funkce, současně se přesvědčíte že opravdu správně pracují a během několika dní zapomenete jak fungovali. Za rok pak potřebujete v programu spočítat determinant - stačí vyhrabat soubor s definicí a deklarací třídy Matice, kterou jste ve světlé chvilce napsali a je to. Na to, že když potřebujete spočítat determinant musíte zavolat členskou funkci třídy Matice jménem Determinant() si snad vzpomenete. Ale běda pokud se musíte brodit několika soubory po 2000 řádcích s vaším starým maticovým programem napsaném starou dobrou metodou a hledat každou funkci zvlášť…
Co ještě mi objekty
nabízejí?
A) Dědičnost - máte-li třídu, která dokáže třeba
vykreslit okno s nějakým textem a pak si vzpomenete, že by se
vám hodilo ještě okno, které dokáže také přijmout text od
uživatele, nemusíte ji začít tvořit od začátku. Stačí
když novou třídu odvodíte od té staré a ona tak automaticky
zdědí vlastnosti své rodičovské třídy, takže vy jen
přidáte novou vlastnost.
B) Přetížení operátorů - Můžete definovat vlastní chování pro operátory jako je +,*, ale i new a delete, pokud jsou použity s danou třídou. To znamená, že pokud např. definujete třídu Retezec a přetížíte pro ni operátor +, můžete pak "sčítat" textové řetězce - Místo strcat(text,"ahoj"); bude stačit text + "ahoj";
C) Další vlastnosti jako Virtuální funkce o kterých se teď nemá cenu šířit.
D) Snadné použití cizího kódu - Je mnohem snazší naučit se používat třeba třídu Matice, kterou naprogramoval někdo jiný, než se naučit počítat s maticemi a pak tvořit vlastní funkce. Totéž sice platí i pro neobjektový přístup, ale stejně je snadnější naučit se používát třídu než kopírovat přímo do nitra svého kódu cizí funkce. A většina dostupných knihoven je stejně objektová.
A kromě toho všichni už používají objektové programování a pokud nechcete zůstat pozadu, měli byste začít taky...
[Obsah]