Objektově orientované programování
Z MiS
Obsah |
Co je to OOP?
- Objektově orientované programování (z anglického Object-Oriented Programming)
- je to metodika vývoje softwaru.
- Zároveň se jedná o paradigma: popisuje způsob vývoje a zápisu programu a způsob uvažování o problému.
Základní paradigma OOP
- Při řešení úlohy vytváříme model popisované reality
- popisujeme entity
- a interakci mezi entitami
- Abstrahujeme od nepodstatných detailů
- při popisu/modelování entity vynecháváme nepodstatné vlastnosti entit
- Pro srovnání: strukturované programování
- Řešení úlohy jako posloupnost příkazů, řídících struktur a volání metod.
Cíle
- Je vedeno snahou o znovupoužitelnost komponent.
- Rozložení úlohy na dílčí součásti.
- Přiblížení struktury řešení reálnému světu.
Model systému pohledem OOP (konstrukty OOP)
- Objekt
- Základní pojem.
- Model světa pohledem OOP je množina objektů (entit), které si posílají zprávy.
- Zprávy, rozhraní
- pokud chce objekt komunikovat s jiným objektem, použije zprávu
- rozhraní objektu
- Množina zpráv, na kterou umí daný objekt reagovat.
- třída a instance
- Třída je seskupení objektů stejného typu.
- podchycuje na obecné úrovni podstatu všech objektů podobného typu
- Třída je „šablona“ pro vytváření objektů.
- Objekt je tedy instancí třídy.
- Atributy
- Každá entita modelovaného světa má vlastnosti.
- Ty vlastnosti, které jsou pro náš model podstatné, zachycujeme pomocí atributů.
- Stav objektu
- aktuální hodnoty jeho atributů.
Rysy OOP
- Abstrakce (abstraction)
- objekt pracuje jako „černá skříňka“
- objekt můžeme používat aniž bychom znali detaily jeho fungování
- implementaci objektu lze změnit, pokud nezměníme rozhraní, zbytek kódu nemusíme měnit
- Zapouzdření (encapsulation)
- objekt může přistupovat k vlastnostem jiných objektů pouze pomocí zasílání zpráv!
- „data a funkce dohromady“
- Polymorfismus (polymorphism)
- různé objekty mohou reagovat na stejnou zprávu různě
- „když dva dělají totéž, není to totéž“
- Skládání (agregation)
- objekt může jako své součásti obsahovat jiné objekty
- Delegování (delegation)
- pro provedení operace objekt část akce řeší voláním dalších objektů
- Dědičnost (inheritance)
- pokud objekt sdílí a rozšiřuje rozhraní jiného objektu, popisujeme to dědičností
- dědičnost používáme pouze tehdy, kdy objekt přebírá CELÉ rozhraní jiného objektu
- jinak používáme skládání + delegování
Realizace konstruktů OOP v Javě
- Každý objekt je instancí některé třídy.
- Univerzální předek je třída Object, ostatní třídy jsou jejími potomky.
- Metody
- popisují, jak objekt reaguje na zprávu
- parametry
- návratový typ (příkaz
return
) - přetěžování (overloading) metod
- × overlaying (překrývání)
- metody se mohou lišit počtem parametrů a jejich typem (nebo obojím)
- atomizace metod
- metoda by měla řešit jednu konkrétní věc
- pro dílčí podúkoly by měla delegovat volání na další metody či jiné objekty
- délka metody bez deklarace proměnných cca 5 řádků
- Instanční a třídní proměnné
- Vytváření objektů
- konstruktor
- implicitní
- operátor new
- konstruktor
- Dědičnost × rozhraní
- Rozhraní
- nemá implementaci metod
- Abstraktní třída
- některé metody jsou abstraktní
- překrývání metod
- přístupnost metod a atributů
- modifikátory
- Rozhraní
- Operátory
-
this
... odkaz na objekt, jehož metodu právě provádíme. -
super
... odkaz na rodičovskou třídu (používáme typicky v konstruktoru nebo k volání překrytých metod).
Příklady použití rysů OOP v knihovnách Javy
- Polymorfismus
- Component.paint()
- v C++ by musela být virtual
- Skládání
- Čítač příchodů
- Kalkulačka jako součást