Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— | pitel:isz:oop [30. 12. 2022, 13.43:01] (aktuální) – vytvořeno - upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== Objektová orientace ====== | ||
+ | [[wp> | ||
+ | ===== Základní koncepty ===== | ||
+ | ==== Třída ==== | ||
+ | Abstraktni popis věci. Obsahuje její **vlastnosti**, | ||
+ | Například třída '' | ||
+ | |||
+ | ==== Objekt ==== | ||
+ | Intance třídy. S ním můžeme pak pracovat. | ||
+ | |||
+ | Například objekt '' | ||
+ | |||
+ | ==== Instance ==== | ||
+ | Objekt vytvořený z třídy. | ||
+ | |||
+ | ==== Metoda ==== | ||
+ | Schopnost objektu. Prostě je to funkce, v OOP se tomu říká metoda. | ||
+ | |||
+ | ==== Předávání zpráv ==== | ||
+ | Hrdý název pro volání metod objektů. | ||
+ | |||
+ | Příklad: '' | ||
+ | |||
+ | ==== Dědičnost ==== | ||
+ | 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 '' | ||
+ | |||
+ | ==== Abstrakce ==== | ||
+ | Tvorba tříd a objektů tak, aby co nejlépe odpovídaly realitě. | ||
+ | |||
+ | ==== Zapouzdření ==== | ||
+ | Skrytí toho, co není potřeba. | ||
+ | |||
+ | Například metoda '' | ||
+ | |||
+ | ==== Polymorfizmus ==== | ||
+ | Schopnost různých objektů, které mají společné rozhraní, reagovat na volání metod tohoto rohraní ruzně. | ||
+ | |||
+ | Například mějme třídu '' | ||
+ | |||
+ | ===== Třídně a prototypově orientované jazyky ===== | ||
+ | U [[wp> | ||
+ | |||
+ | Naproti tomu u [[wp> | ||
+ | |||
+ | ===== OO přístup k tvorbě SW ===== | ||
+ | Při návrhu software se hodně využívá nástrojů UML, které jsou k tomu vpodstatě stvořené. | ||
+ | ==== Návrhové vzory ==== | ||
+ | [[wp> | ||
+ | |||
+ | 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. | ||
+ | |||
+ | === Singleton === | ||
+ | [[wp> | ||
+ | |||
+ | " | ||
+ | |||
+ | === Abstract Factory === | ||
+ | [[wp> | ||
+ | |||
+ | 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 === | ||
+ | [[wp> | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | === Decorator === | ||
+ | [[wp> | ||
+ | |||
+ | 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í, " | ||
+ | |||
+ | ===== Shrnutí ===== | ||
+ | * OOP: abstrakce, zapouzdření, | ||
+ | * třídní vs prototypové | ||
+ | * třída vs objekt | ||
+ | * předávání zpráv | ||
+ | * UML | ||
+ | * návrhové vzory |