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ák
em 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]