Objektově orientované programování

Objektové paradigma na programovaný systém nahlíží jako na soubor nezávislých objektů. Objekty navzájem komunikují zasíláním zpráv (voláním metod). Základní jednotkou je tedy namísto proměnné objekt, objekt v sobě organizuje data a funkce. Snahou při řešení úloh je modelovat principy reálného světa v počítači. Programátorovi umožňuje o programu přemýšlet prostřednictvým abstraktních modelů, která více odráží abstraktní povahu realitu světa a umožňuje oprostit se od technických detailů počítače. Při analýze potřeb uživatelů mluvíme jazykem blízkým uživatelům.

Většina dnešních vysokoúrovnových programovacích jazyků podporuje objektového paradigma (C++, Javu, C#, Ruby, Python, PHP).

Objekt (instance třídy)

Prvek modelované reality (proměnná, konstanta nebo parametr).

  • Stav objektu je tvořen hodnotami atributů objektu.
  • Operace nad objekty se nazývají metody (členské funkce).

Třída (objektový typ)

Datový typ reprezentují určitý typ objektů reálného světa. V kódu jde o strukturu, která obsahuje proměnné (atributy) a funkce, nazývané metody. Existuje i OOP systém bez tříd. Třídy jsou jen meta-informace, příklade je třeba Javascript s jeho prototypy.

Abstraktní třída

Třída obsahující alespoň jednu abstraktní metodu. Taková třída nemůže mít žádné instance. Instance mohou existovat jen pro objekty podtříd, kde jsou abstraktní metody nadtřídy definovány.


OOP systém využívá 4 vlastnosti.

Abstrakce

Polymorfismus

Dědičnost

Problém oop je nadúžívání dědičnosti. Dědičnost je podtyp (podtřída) a vyjadřuje vztah mezi třídamy.

Zapouzdření (Encaptulation)

Rozhraní třídy je souhrn informací (metody, proměnné třídy), které o sobě třída zveřejní. Implementace je souhrn informací, které se správná třída snaží maximálně utajit. Nepříjemnou vlastností rozhraní je, že jakmile se jednou zveřejní, je nedotknutelné.

Zapouzdření je metoda ukrytí implementačních detailů rozhraní třídy, kontrolovat je můžeme pomocí klíčových slov:

  • public = komukoli
  • protected = v tříd same a v jejich podtřídách
  • private = jen v třídě samé.

Publikované rozhraní (termín zavedl Martin Fowler), kdy máme namysli stav kdy je kód zveřejněn dalším programátorům, kteří jej používají a autorovi rozhraní je nedostupný.

Interní rozhraní, myslíme stav, kdy rozhraní zatím používám pouze v rámci svých aplikací, takže autor může provést případnou opravu a kontrolu všech tříd, které na něm závisí.

Příkladem špatně definovaného rozhraní jsou metody suspend(), resume(), stop() a destroy() ve třídě Thread. Vzápětí po uvedení Javy se vědělo, že jsou koncepčně pomýlené a neprogramovatelné a byly označeny z deprecated. Nicméně rozhraní, jež je obsahovalo, bylo již publikováno, takže jsou jeho součástí dodnes.

I’m sorry that I long ago coined the term *objects* for this topic because it gets many people to focus on the lesser idea. The big idea is *messaging

A. Kay, 1998

Související