Základní pojmy OOP
Základní pojmy OOP:
– objekt – představuje atomickou jednotku modelu reálného světa a umožňuje počítačovou implementaci, zabírá místo v paměti a je známa jeho adresa, skládá se z množiny hodnot – atributů a z množiny ukazatelů na funkce, které definují operace s objektem
– třída – charakterizuje množinu objektů se stejnými atributy, chováním a vztahem k jiným objektům; jde vlastně o uživatelsky definovaný typ; předepisuje pro své objekty (instance této třídy) proměnné a funkce; kromě toho může obsahovat i svoje proměnné a funkce
– dědění – mechanizmus sdílení atributů, relací a funkcí mezi třídami
– polymorfizmus
– dynamické vázání
Dědění
Příklad: jsou třídy X a Y spojené relací „X dědí od Y“. Třída X je podtřídou třídy Y. Třída X se potom skládá ze dvou částí: zděděné a inkrementu, což je nový kód, specifický pro třídu X. Podtřída X může ve svém inkrementu překrýt zděděnou proměnnou či funkci z nadtřídy Y.
Funkce se překrývají z důvodů:
– rozšíření – funkce z podtřídy rozšiřuje funkci z nadtřídy (zavolá funkci nadtřídy a vykoná něco navíc)
– ohraničení – funkce z podtřídy ohraničuje chování funkce z nadtřídy (např. omezí parametr jen na určitý typ, apod.)
– optimalizace – funkce z podtřídy optimalizuje chování funkce z nadtřídy (např. funkce hledání nadtřídy seznam bude vypadat jinak než funkce hledání podtřídy setříděný seznam)
Dědění může být jak jednoduché, tak násobné, kdy jedna podtřída má více než jednu nadtřídu, využívá se ovšem zřídka. Dědění nemusí být jen obyčejné sloučení, některé proměnné či funkce mohou být děděny beze změny, něco může být transformováno během dědění, něco zase může být zakázané dědit. Málo OO jazyků však takové možnosti nabízí.
Rozdělujeme dědění na statické a dynamické. Dynamické dědění je dědění v době běhu programu, kdy ukazatele na zděděné funkce nejsou přímo zahrnuty do objektu, ale jsou v době volání nalezeny v hierarchii tříd. Při statickém dědění je rozhodnutí, která funkce se bude volat, provedené už v době překladu.
Dědění se používá v podstatě ze dvou důvodů:
1. hierarchizace typů
2. sdílení implementace – sdílení kódu