Objektově orientované programování

Z MiS
Přejít na: navigace, hledání


Obsah

Co je to OOP?

Základní paradigma OOP

Cíle

Představte si, že někdo vytvořil knihovnu, která řeší obecnou úlohu (třeba ArrayList v Javě, fungující jako úložiště objektů).

Když tuto knihovnu chcete použít, potřebujete vědět:

  • hodnotu kterých proměnných můžete měnit,
  • které metody/funkce/procedury smíte volat.

To samozřejmě lze napsat do dokumentace. OOP je však vedeno snahou, aby zodpovězení těchto otázek bylo přirozenou součástí kódu.

Model systému pohledem OOP (konstrukty OOP)

Objekt
Zpráva
Rozhraní objektu/třídy
Třída
Instance
Atributy
Stav objektu

Rysy OOP

Abstrakce (abstraction)
Zapouzdření (encapsulation)
Polymorfismus (polymorphism)
Skládání (agregation)
Delegování (delegation)
Dědičnost (inheritance)

Použití konstruktů OOP v programovacích jazycích

Syntaxe Javy viz Java: Zápis tříd.

Objekty, třídy

Vytváření objektů (instancí třídy)
Konstruktor

Zprávy → metody

Metoda má
Přetěžování metod (overloading)
Překrývání metod (overlaying)
Atomizace metod

Atributy → proměnné

Instanční proměnné
Například třída UcebniSkupina může mít atribut počet žáků (kteří do dané skupiny chodí). Odpovídající proměnná musí být instanční, protože každá učební skupina může mít jiný počet žáků. (Je to vlastnost konkrétní skupiny.)
Třídní proměnné
Například je-li maximální počet žáků v učební skupině dán zákonem (pro všechny učební skupiny stejný), pak tento atribut budeme realizovat třídní proměnnou třídy UcebniSkupina.

Více o vztahu mezi instančními a třídními proměnnými viz: Platnost proměnných.

Přístupnost metod a proměnných

Dědičnost

Zastupitelnost tříd

Abstraktní třída

Rozhraní (interface)

Nepleťte s pojmem „rozhraní třídy“ ve smyslu souhrnu všech metod!
Pokud implementujeme interface, pak „slibujeme“, že součástí rozhraní třídy jsou minimálně metody, zahrnuté v interface.

Dědičnost × Skládání — Čítač příchodů
  • Představme si, že máme již vytvořenou třídu Kalkulacka s metodou pricti(cislo).
  • Máme vytvořit třídu CitacPrichodu, která při každém průchodu dveřmi přičte do pomocné proměnné jedničku.
  • Napadne nás, že bychom mohli použít už fungující kód třídy Kalkulacka
  • Použijeme tedy instanci třídy Kalkulacka jako atribut třídy CitacPrichodu.
  • Metoda priselZakaznik() bude delegovat volání na kalkulacka.pricti(1).
  • Dědičnost by zde nebyla vhodná, ostatní metody třídy Kalkulacka nemají být součástí rozhraní třídy CitacPrichodu.

Operátory this a super


Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje