Technika objektově orientovaného programování

 

Definice

Objektově orientované programování (zkráceně objektové programování) je technika, při které se složité programové systémy strukturují jako množiny vzájemně komunikujících objektů. Každý objekt definuje svou vlastní datovou strukturu a algoritmy. Touto technikou lze dosáhnout vysoké úrovně modularity a datových abstrakcí. Speciální jazykové rysy nejsou pro objektově orientované programování nezbytné. Speciální jazykové rysy mají SIMULA-67, SMALLTALK-80, C++, PASCAL 5.5.

 

Princip

Při tvorbě rozsáhlých programů, s předpokládanou dlouhou životností, zvláště jde-li o problematiku z oblasti ASVŘS (automatizovaných systémů velení, řízení a spojení), nutno předpokládat výskyt požadavků na změny a úpravy programů. Tyto požadavky nutno předpokládat i v průběhu projektování a programování. Požadavky na úpravy programů nemusí mít pouze uživatelský původ. Mohou být důsledkem nedokonalé koordinace práce řešitelů nebo řešitelských pracovišť, nedokonalé analýze problému nebo návrhu řešení. Praxe ukazuje, že době provozování úspěšných programů vznikají dodatečné požadavky na rozšíření funkcí programu.

Další zkušenost z praxe potvrzuje názor, že funkční dekompozice se hodí pouze pro výuku základům algoritmizace a pro malé programy, s krátkou životností. I touto technologii lze rychle vyvinout některé velké programy. Ale provádění změn těchto programů bude obtížné tudíž nákladné. Znovupoužitelnost modulů vzniklých funkční dekompozicí bude vzhledem k jejich specializaci problematická.

Při funkčně orientované architektuře programu jsou datové struktury podružné. Proto je i kompatibilita programů, které závisí především na datových strukturách, podružná. Když je však program postaven na základě dat, pak jeho přednosti jsou v protikladu s funkční technologii. Datově orientované technologie zajišťují požadavky kompatibility, znovupoužitelnosti, spojitosti a modifikovatelnosti programu. Rozsah programů je menší, srozumitelnost větší. (Například druhá verze FoxPro, u které bylo použito této technologie je menší než první verze a při je tom funkčně dokonalejší.)

Takovéto technologii se říká, že je objektově orientovaná. Je odlišná od technologie, kterou pracuje většina výkonných programátorů. Vychází z názoru, že výpočetní systém provádí určité akce nad určitými objekty. Je lepší když jeho struktura bude založena na objektech než na na akcích. Tato technologie má své kořeny v technikách, které efektivně vytvářely znovupoužitelné, modifikovatelné, spolehlivé a robustní programy.

 

Objekty

Obecně a zjednodušeně lze za objekt prohlásit cokoliv, co lze popsat jeho vlastnostmi. Může to být položka k zaúčtování, osoba, zobrazený text, rámeček kolem okna, konkrétní místo v okně, okno apod. Vnější podoba objektu má strukturu podobnou jako záznam databázového souboru nebo řádek tabulky (pole) ve FoxPro. Položky (stejného počtu) záznamu mohou obsahovat nejen údaje různých typů, ale i odkazy na procedury a funkce (jména procedur, jména funkcí), které s těmito daty pracují.

Typem objektu (obyčejně jedna z prvních položek) jsou definovány základní procedury a funkce (obecně "metody") daného objektu.

Libovolný typ objektu může dědit všechny vlastnosti jiného typu objektu. Dědí se jak položky tak metody. V dědických vztazích rozeznáváme následníka a předchůdce. Třída objektů není synonymem typu objektů. Je to vzor, který podle kterého lze vytvářet nové třídy. Všechny objekty jsou dynamické. Vznikají i zanikají provedením příkazů při běhu programu a identifikují se pomocí ukazovatele.

 

Objektově orientovaný návrh programu

Objektově orientovaný návrh vede k architektuře programového celku, založené na objektech. Návrh a tvorba programu má charakter analýzy vztahů, která vede ke klasifikaci objektů a jejich tříd. Návrh programu spočívá v postupném zlepšování a zpřesňování, založeném na neustále se zlepšujícím porozumění objektových tříd. Směřuje ke specifikaci nejvyšší, konečné a nejabstraktnější funkce, kterou má program plnit je nutné odložit na co nejpozdější etapu vývoje programu. (Tradiční postup upíná pozornost na konečnou funkci od samotného počátku vývoje.) Upření pozornosti na data, která se budou vyskytovat v systému a ne na bezprostřední funkci je klíčem k znovupoužití a modifikovatelnosti programu. Při objektově orientovaném návrhu se řeší problém:

a) nalezení objektu,

b) popisu objektu,

c) popisu vzájemných vztahů a společných vlastností objektu,

d) strukturalizace programu pomocí objektů.

 

Nalezení objektů

Při objektově orientovaném návrhu se nutno oprostit od představy tvorby programu a nahradit ji představou vytváření modelu řešeného problému. Obrazy dílčích složek problému jsou komponenty modelu - objekty.

Nejtěžší při tomto postupu je správně určit: jaké objekty jsou pro modelování problému potřebné a jaké atributy jsou nutné pro jejich popis. Zda zaznamenané atributy nepříslušejí jinému objektu nebo nepopisují jiný objekt, který je zatím skrytý.

Například při řešení materiálových toků výrobního procesu si postupně definujeme (jako objekty) sklady (atributy: umístění, kapacita,...), stroje (atributy: umístění, doba přípravy, doba opracování podle výrobku,...), přepravníky (obložnost, nosnost, doba nakládky, rychlost přesunu...) apod. (V podstatě se objektově orientovaný návrh neliší od návrhu databázového systému nebo od přístupu ke tvorbě simulačních modelů.)