Abstraktni popis věci. Obsahuje její vlastnosti, a funkce (metody) které věc umí. V podstatě datový typ objektu.
Například třída Pes
bude mít vlastnosti jako rasa
a srst
a metody sedni()
a štěkej()
.
Intance třídy. S ním můžeme pak pracovat.
Například objekt Lassie
.
Objekt vytvořený z třídy.
Schopnost objektu. Prostě je to funkce, v OOP se tomu říká metoda.
Hrdý název pro volání metod objektů.
Příklad: Lassie.sedni()
Podtřídy jsou specializovanější verzemi tříd. Důležité je, že podtřídy dědí vlastnosti a metody třídy ze které pochází, ale mohou je měnit a rozšiřovat.
Mějme například třídy Kólie
, Čivava
a Ovčák
. Všechny jsou potomky třídy Pes
, a tak po něm dědí jeho vlastnosti a metody. Pokud v tomto stavu budeme chtít vytvořit objekt Lassie, nebudeme ho vytvářet jako potomka třídy Pes
, ale použijeme rovnou třídu Kólie
, protože již bude mít přednastaveny vlastnosti rasa=kolie
a srst=hnedobila
. U třídy Čivava
zase můžeme metody štěkej()
odtranit, protože nedává smysl . U třídy Ovčák
pak přidáme metodu hlídejStado()
.
Tvorba tříd a objektů tak, aby co nejlépe odpovídaly realitě.
Skrytí toho, co není potřeba.
Například metoda štěkej()
bude nejspíš implementována metodami nádech()
a výdech()
. Běžného člověka ale nezajímá, jak přesně pes štěká, a tak mu programátor tyto metody skryje. K tomu slouží „typy“ metod public
, protected
a private
a / nebo rozhraní (interfacy, podobné jak .h
soubory v C).
Schopnost různých objektů, které mají společné rozhraní, reagovat na volání metod tohoto rohraní ruzně.
Například mějme třídu Zvíře
která má metodu mluv()
. Třídy Pes
a Kočka
jsou podtřídou třídy Zvíře
. Samozřejmě zdědí i metodu mluv()
. Zavolení metody mluv()
nad objektem ze třídy Pes
pak vyustí v provedení metody štěkej()
, zatímco u objektu třídy Kočka
se o obsluhu této metody postará metoda mňoukej()
. V Javě se k tomuto používají rozhraní (interfaces).
U třídně orientovaných jazyků nejdříve nadefinujeme třídy a z nich pak tvoříme objekty. Takto funguje většina dnešních objektových jazyků.
Naproti tomu u prototypově orientovaných jazyků rovnou vytváříme objekty které něco dělají. Objekty je pak samozřejmě možné klonovat a rozšiřovat. Dědičnost se tu řeší delegováním – každý objekt může mít množinu jiných objektů na které deleguje zprávy (metody) kterým sám nerozumí. Jedinými široce používanými prototypově orientovanými jazyky jsou ty odvozené od ECMA scriptu: JavaScript, ActionScript.
Při návrhu software se hodně využívá nástrojů UML, které jsou k tomu vpodstatě stvořené.
Design pattern (computer science)
Každý objektově orientovaný jazyk poskytuje trochu jiné možnosti, ale v zásadě existuje poměrně rozsáhlá kolekce tzv. návrhových vzorů, které jsou modelovými konstrukcemi v OOP. Tyto je dobré znát, protože při tvorbě aplikací se na problémy, které řeší, často naráží a je zbytečné znovu vynalézat kolo.
„Jedináček“ se používá, když je potřeba mít v aplikaci pouze jednu instanci dané třídy. Obvykle jde například o nějaký řídící objekt, nebo se tímto nahrazují globální proměnné. V praxi se řeší tak, že existuje statická třída, která má privátní instanci sebe samy. Tato proměnná se jednou inicalizuje a pak je přístupná přes statickou metodu této třídy (getinstance).
V abstraktní Factory třídě deklarujeme factory method, která má vracet určitý typ objektu (např. Button). Pokud vytvoříme podtřídu Factory, můžeme se libovolně rozhodnout, jestli budeme vracet Button, nebo nějakou rozšiřující třídu (BigButton, InvisibleButton). Tento vzor se používá, pokud potřebujeme někde získat Button a je nám jedno, jaký konkrétní Button to bude.
Iterator je vzor, který umožňuje procházet nějaký seznam aniž bychom věděli, jak je uvnitř implementovaný. Obvykle to bývá řešené tak, že požádáme seznam o Iterator, který pak poskytuje metody „has next?“ a „next“. První metodou zjišťujeme, jestli existuje v seznamu další prvek, druhou ho získáváme a posouváme Iterator dále.
Dekorátor je třída, která umožňuje přidat ke třídě další vlastnosti dynamicky. To zařídíme tak, že si dekorující třída uloží do privátní proměnné dekorovanou instanci. Metody, které zůstanou původní, „deleguje“ – volá metody této instance. Metody, které se změní, nebo které jsou přidané, dekorující třída rovnou implementuje.