Základy objektově orientovaného programování

Přehled informací

Charakteristické rysy objektově orientovaného programování

Charakteristickými rysy objektově orientovaného programování (OOP) jsou použití tříd, zapouzdření a polymorfismus. OOP slouží k urychlení tvorby výsledné aplikace. Splnění požadavku urychlení tvorby aplikace pomáhají:

V prostředí OOP je možné se setkat s následujícími pojmy:

Abstrakce

Označuje skutečnost, že třídu je možné chápat jako černou skříňku. Nezajímá nás co je uvnitř pouze jak se to ovládá zvenčí.

Členské funkce

Označení funkcí patřící jedné metodě. Členské funkce implementují chování objektů třídy.

Dědičnost

Jazyk C++ umožňuje tvorbu datové struktury, která dědí vlastnosti od jiné datové struktury a poté doplnit do vytvářené struktury jedinečné vlastnosti. Struktury, které dědí data a funkce od jiných struktur jsou uspořádány v hierarchii dědičnosti. Takto napsaný kód není pouze sám opětovně použitelný, ale opětovně použitelné jsou i datové struktury (třídy) obsahující proměnné a funkce.

Odvozené třídy (potomci) mohou převzít vlastnosti (datové složky i metody) rodičovské třídy. Odvozená třída blíže specifikuje rodičovskou třídu. Například rodičovskou třídou může být třída ovoce a odvozenou třídou potom pomeranč.

Jedním ze základních principů OOP je, že potomek (instance odvozené třídy) může vždy zastoupit předka (instanci rodičovské třídy). Pro náš příklad to znamená, že pomeranč je ovoce. (Pozor obrácený vztah neplatí, objekt rodičovské třídy nemůže zastoupit objekt odvozené třídy. Neplatí, že každé ovoce je pomeranč.)

Instance

Jiné označení pro objekt, jedná se o proměnnou nebo konstantu typu třída.

Objekt

Objektem se označují objekty reálného světa, které slouží jako vzor třídám, stejně i jako instance tříd (objektových typů) nebo oblast paměti, s kterou lze manipulovat (konstanty, proměnné, funkce...).

Polymorfismus

Při práci s různými objekty provádíme podobné operace (např. kreslíme objekt). Často se ale stane, že postup vykreslování objektů je zcela odlišný (nejenom počtem a typem parametrů - jako je tomu u přetěžování). Při psaní takového programu se stane, že v době deklarace funkce neznáme typ instance, s kterou bude pracovat (viz dědičnost). C++ tuto deklaraci umožňuje pomocí použití polymorfismu. Funkci deklarujeme v nadřazené třídě objektů jako virtuální a až teprve v jednotlivých objektech (potomcích) ji implemntujeme. Při vykreslování objektu program zajistí, že je vyvolána správná funkce.

Poznámka - někdy bývá označováno i přetěžování funkcí za druh polymorfismu.

Předefinování

Pojem předefinování úzce souvisí s polymorfismem. Předefinování funkce znamená, že je funkce znovu definovaná v odvozené třídě (aby správně reagovala na své volání). Předefinovaná funkce musí být v rodičovské třídě deklarována jako virtuální.

Přetěžování (overloading) funkcí

Přetěžování = definice více funkcí se stejným identifikátorem (jménem). Funkce se od sebe rozlišují pomocí počtu a typu parametrů.

Přetěžování (overloading) operátorů

Obdoba přetěžování funkcí. Přetížení operátorů znamená rozšíření operátoru na uživatelem definované typy (výčtové a objektové). Rozlišení operace, kterou má překladač uskutečnit je opět pomocí počtu a typu parametrů. Typickým příkladem přetíženého operátoru je operátor +. Jsou li použity jako operandy čísla, jedná se o matematickou operaci sčítání. Jsou-li ale použity jako operandy řetězce, jedná se o operaci složení.

Rozhraní (interface)

Prostředek pro výměnu informací mezi třídami, funkcemi, moduly ... .

Zapouzdřenost

Reálné objekty jsou v programu složeny ze svých vlastností (data) a chování (metody). Vlastnosti a metody zastřešuje (zabaluje) třída, která je reprezentuje konkrétními hodnotami.

Pomocí výše popsaného principu mohou objekty v C++ skrýt svá data jiným částem programu. Nehrozí tedy například, jako v jazyce C, možnost modifikace globální proměnné nějakou funkcí.