00. Objektově orientované programování a strukturované programování
Přidal/a Jarda dne January 16 2011 10:48:57
Předchozí metodiky se soustředily na vymýšlení postupů jak vyřešit zadanou úlohu. Byla li úloha složitější, rozdělila se na několik úloh jednodušších, které se pak vývojáři snažili řešit pokud možno samostatně. Základním stavebním kamenem těchto programů jsou procedury a funkce, které mívají v průměru několik desítek příkazů. Typickými příklady jsou jazyk Pascal a například ve školském prostředí používané LOGO. Strukturované programování se ujalo rychle, protože jeho zásady byly mnohem jednodušší a pro průměrného programátora pochopitelnější, takže se mezi programátorskou veřejností snáze prosazovaly
Objektové programování se začalo výrazněji prosazovat v osmdesátých letech s příchodem jazyka C++ a zcela ovládlo pole v devadesátých letech, zejména pak po příchodu jazyka Java. Za celou tu dobu jeho pozice stále sílí a v dohledu není zatím ani náznak nějaké ještě lepší alternativy.

Objektově orientovaní programátoři postupují jinak než programátoři využívající strukturované programování. Chápou svůj program jako simulaci reálného či virtuálního světa, a proto se pokouší nejprve tento svět popsat. Zjišťují, jaké se v tomto světě nacházejí objekty, jaké mají tyto objekty vlastnosti a jak spolu komunikují. Veškeré dění pak převádějí na posílání zpráv mezi objekty.
(Usedá li např. nějaká osoba ve hře na židli, pošle židli zprávu o tom, že se ji zatěžuje svoji vahou a židle na tuto zprávu odpoví bud tichým mlčením, nebo hlasitým zhroucením se.)
Vlastní program pak vytvářejí jako popis těchto objektů a zpráv, které si objekty mezi sebou navzájem posílají.

Na zprávy, které danému objektu posílají jiné objekty, reaguje objekt zavoláním příslušných metod, což jsou části kódu definující reakci objektu na zaslání dané zprávy. Metody jsou ekvivalenty klasických procedur a funkcí. Na rozdíl od nich však bývají výrazně jednodušší - mívají většinou od jednoho do deseti příkazů. Metody, které by měly více než 20 příkazů, jsou v dobrých programech spíše výjimečné.

Délka metod je ale pouze vedlejší důsledek jiné filosofie přístupu k řešení problému - jiného paradigmatu. Hlavní výhody objektového přístupu jsou:

Zmenšení sémantické mezery
Jedním z důležitých přínosů OOP je zmenšení sémantické mezery mezi "lidským" a "programátorským" popisem problému a jeho řešení. Popis funkce objektového programu je daleko bližší popisu, jakým si daný problém a jeho řešení popíšou mezi sebou lidé. Tvůrci program pak daleko lépe chápou vztah programu k simulované skutečnosti a mohou funkci programu snáze vysvětlit i jeho zadavateli. Dochází proto k mnohem méně nedorozuměním mezi zadavatelem programu a jeho řešiteli.

Zapouzdření implementace
To, že program by měl co nejméně prozrazovat o tom, jak to dělá, že umí to, co umí, hlásaly knihy, zabývající se správnou metodikou programování, již od šedesátých let minulého století. Autoři předobjektových metodik a programovacích jazyků však důležitost dodržování této zásady dostatečně nedocenili, takže jejich metodiky a jazyky pro dosažení tohoto cíle příliš prostředků nenabízely. Naproti tomu OOP staví zapouzdření implementace ve stupnici hodnot na jednu z nejvyšších příček a nabízí proto i řadu prostředků, jak je zabezpečit.

Modifikovatelnost kódu
V dobách, kdy se prosazovaly jednotlivé předobjektové metodiky, si tvůrci programů neuvědomovali nutnost tvorby modifikovatelného kódu. Teprve v průběhu posledních 20 let se ukazovalo stále jasněji, že jedinými programy, které nebudou nikdy modifikovány, jsou programy, které jsou tak špatné, že si zákazníci raději koupí nový, dražší program, než aby žádali autory stávajícího programu o jakékoliv vylepšení. Prakticky každý program, který je jen trochu dobrý, dozná v průběhu svého života řadu změn a vylepšení. Objektově orientované jazyky proto, na rozdíl od svých předchůdců, nabízejí řadu prostředků, které umožňují vytvořit program tak, aby jeho pozdější úpravy vyžadovaly jen minimální úpravy jeho zdrojového kódu.
Nutnost modifikovatelnosti kódu stoupla zejména tehdy, když programátorům začalo docházet, že nezávisle na tom, jak pečlivě a dokonale bude provedena počáteční analýza, stejně se bude kód měnit. Nezáleží na tom, jestli byla v analýze chyba nebo jestli zákazník přišel s novou specifikací toho, co se má vlastně naprogramovat. Důležité je, že původní řešení je třeba upravit a že tato oprava musí vyjít co nejlevněji.

Znovupoužitelnost hotových částí
Ti starší z nás ještě zažili doby, kdy svět nebyl ještě zaplaven nejrůznějšími programy řešícími ten či onen problém. Značná část řešených problémů byla řešena poprvé a tvůrci programů nemívali příliš často příležitost zjednodušit si práci tím, že použijí jiný program, který řeší podobnou problematiku nebo alespoň její část. Postupem času sice vznikly nejrůznější knihovny, ale při jejich používání se museli programátoři omezit na řešení nabídnutých autory daných knihoven a většinou neměli žádnou možnost je upravovat, vylepšovat a přizpůsobovat jejich vlastnosti svým požadavkům.
OOP se řídí heslem: "Kolo není třeba pokaždé znovu vynalézt, ale stačí je jen znovu použít!" Přineslo několik konstrukcí, které na jedno stranu výrazně usnadňují nerůznější modifikace chování kódu převzatého z jiných zdrojů a na druhou stran také konstrukce umožňující definovat kód tak, aby byl co nejlépe znovu použitelný a usnadňoval případné modifikace.

Návrhové vzory
Starší programovací jazyky neumožňovaly nijakou výraznou typizaci používaných postupů. Veškerá typizace se omezovala na algoritmy řešící tu či onu třídu úloh nebo na obecné metodologie. Oblast definice architektury celého systému a jeho jednotlivých částí zůstávala odkázána zcela na zkušenosti a intuici architekta. Nové prostředky a možnosti, které přineslo OOP, umožnily definici tzv. návrhových vzorů, které bychom mohli přirovnat k programátorské verzi matematických a fyzikálních vzorečků: kdo je zná, nemusí je odvozovat a je proto s řešením mnohem dříve hotov a navíc dělá méně chyb.

Shrnutí
Každá z výše uvedených přednosti vede k efektivnějšímu vývoji a spolehlivějšímu, robustnějšímu a snáze spravovatelnému kódu. Produktivita vývoje a kvalita výsledného kódu byly hlavními důvody, proč všechny významné programátorské firmy v průběhu osmdesátých let minulého století přešly na OOP a proč si v současné době téměř nikdo netroufne vyvíjet opravdu veliký projekt jinak než objektově.