Objekty

Probrali jsme tři klíčové vlastnosti objektů. Jsou jimi:

  1. Dědičnost
  2. Zapouzdření
  3. Polymorfismus
    1. Jako ilustrativní příklad jsme použili program, ve kterém jsme nakládali zvířátka na noemovu archu. Zároveň jsme si při tom zopakovali práci s programovými moduly. Modul implementující zásobník archy je zde.

Shrnutí

Terminologie může být poněkud matoucí. V následujícím textu používám pojem třída pro označení věcí deklarovaných v programu tímto způsobem: type TVec = object .... Rozdíl mezi klíčovými slovy object a class je popsán například zde (kapitola 5 Objects a 6 Classes).

Následující odstavce se odkazují na výše zmíněný ilustrativní příklad.

Dědičnost

  1. - umožňuje znovuvyužití existující třídy. Pokud máme např. třídu TZvire, můžeme pomocí: TPes = object (TZvire) deklarovat novou třídu, která dědí všechny metody a atributy dostupné ve třídě TZvire.
  2. - novou třídu můžeme specializovat tím, že do ní přidáme něco navíc (nové atributy, nebo metody)
  3. - v nové třídě můžeme také reimplementovat existující metody původní třídy (viz. Polymorfismus).
  4. - do ukazatele na původní typ TZvire můžeme vždy uložit ukazatel na typ, který od něj dědí (TPes). Obráceně to nejde - díky tomu, že typ ukazatele je TPes, má program právo očekávat na dané adrese speciální metody třídy TPes, které nemusí v původní třídě TZvire existovat.

Zapouzdření

  1. - třída obsahuje atributy a metody, které spolu logicky souvisí
  2. - existují klíčová slova, která specifikují, odkud je možné přístupovat (přes operátor "." ) k metodám a atributům dané třídy (např. TZvire):
    1. public - odkudkoliv
    2. protected - pouze z potomků třídy TZvire
    3. private - pouze z metod třídy TZvire
  3. - se zbytkem programu třídu spojuje takzvané rozhraní. Jde zpravidla o několik metod, pomocí kterých je možné měnit stav třídy (např. metody push a pop ve třídě, která implementuje zásobník). Metody, které patří do rozhraní jsou vždy deklarovány v sekci public.

Polymorfismus

  1. - je vlastnost objektů, která umožǔje v potomcích nějaké základní třídy změnit implementaci nějaké metody. Příklad:
    Základní třída TZvire má metodu ozviSe. Každá třída, která je potomkem této třídy implementuje ozviSe jinak (TPes štěká, TKocka mňouká, atd.)
  2. - každá metoda, kterou chceme tímto způsobem používat, musí být označena klíčovým slovem virtual
  3. - pokud chceme zavolat původní metodu základní třídy, používáme k tomu klíčové slovo inherited

Noemova archa

Kdo to dočetl až sem, zaslouží si odměnu v podobě loutkového videoklipu.