Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
informatika:maturita:18a [21. 04. 2015, 15.12] xmrnustik |
informatika:maturita:18a [12. 02. 2018, 15.38] (aktuální) xsilling [Objektově orientované programování (OOP)] |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
====== Objektově orientované programování (OOP) ====== | ====== Objektově orientované programování (OOP) ====== | ||
- | Je programovací přístup založený na tom, že vše se dá popsat pomocí objektů. | ||
- | |||
- | |||
+ | Je programovací přístup založený na principu, že se naprosto vše dá popsat pomocí jednotlivých objektů. | ||
+ | Viz [[informatika:pojmy:jazyky|]]. | ||
===== Základní pojmy ===== | ===== Základní pojmy ===== | ||
==== Objekt ==== | ==== Objekt ==== | ||
- | Je základní jednotkou používánou v rámci OOP. Každý problém je pro OOP rozložitelný do objektů. Objekt v sobě, jak data (v podobě atributů), tak má i funkční části popisující jeho chování (v podobě metod). | + | |
+ | Je základní jednotkou používanou v rámci OOP. Každý problém je pro OOP rozložitelný do objektů. Objekt v sobě uchovává vlastní data (atributy) a má i funkční části popisující jeho chování (metody). | ||
==== Třída ==== | ==== Třída ==== | ||
- | Třída je taková "šablona objekt". Popisuje, jaké bude mít objekt vlastnosti (atributy) a co bude umět dělat (metody). | + | |
+ | Třída je prakticky "šablona objektu". Popisuje, jaké bude mít objekt vlastnosti (atributy) a co dokáže dělat (metody). | ||
==== Instance ==== | ==== Instance ==== | ||
- | Instance objektu je už běžící objekt (vytvořený ze třídy) s naplněnými atributy a s možností na něm volat metody. | + | Instance objektu je už běžící objekt (vytvořený podle vzoru třídy) s naplněnými atributy a s možností na něm volat implementované metody. |
==== Atribut ==== | ==== Atribut ==== | ||
- | Jak už zde bylo několikrát zmíněno atribut je vlastností objektu. | + | |
- | Vlastnosti může mít dva druhy: | + | Atributy určují jednotlivé vlastnosti objektu. |
- | * Hodnotová vlastnost (spíše hodnotová proměnná) - vlastnost vyjadřitelná jako číslo, znak nebo pravdivostní hodnota | + | |
- | * "Objektová vlastnost" - další objekt, který původní objekt používá (například Člověk má jako vlastnost objekty Srdce, Vlasy, Charakter,...) | + | Mohou mít dva základní druhy: |
+ | * **Hodnotová vlastnost (spíše hodnotová proměnná)** – vlastnost vyjádřitelná jako číslo, znak nebo pravdivostní hodnota. | ||
+ | * **Objektová vlastnost** – další objekt, který původní objekt používá (například Člověk má jako vlastnost další objekty jako Srdce, Vlasy, Charakter...). | ||
==== Metoda ==== | ==== Metoda ==== | ||
- | Schopnost objektu provádět činnost. Může po svém provedení vracet nějakou hodnout (Srdce má metodu ZískatTlak(), která vrací současný krevní tlak), ale nutně nemusí (Srdce má metodu Bij(), která nic nevrací). | ||
- | Metoda může také přijímat arguemnty (Objekt Malíř má metodu VymalujPokoj(Barva)). | + | Schopnost objektu provádět určitou činnost. Metody po svém provedení vracejí určenou hodnotu (například metoda Srdce //ziskejTlak()// by vracela současný krevní tlak) – může však vracet i hodnotu **void**, tedy nic (metoda //bij()// by například pouze provedla akci bití Srdce, nebylo by tedy třeba nic vracet). |
+ | |||
+ | Metoda může také přijímat potřebné argumenty (metoda Srdce //zmenRychlost(rychlost)// by nastavila novou rychlost bití Srdce podle zadané hodnoty argumentu rychlost). | ||
=== Konstruktor === | === Konstruktor === | ||
- | Speciální metoda konstruktoru, která je volána vždy při vytváření instance dané třídy. Může zde docházet k inicializaci potřebných vlastností. | ||
- | Pozn. V některých objektových programovacích jazycích existuje i speciální metoda zvaná destruktor, která se používá, když už objekt není potřeba a má být zničen. | + | Speciální metoda konstruktoru, která je volána vždy při vytváření nové instance třídy (nevrací proto vůbec nic). Může zde docházet k inicializaci potřebných vlastností. Třída může mít i více konstruktorů podle počtu argumentů. |
+ | V některých objektových programovacích jazycích (C++) existuje i speciální metoda zvaná **destruktor**, která se používá, když už objekt není potřeba a má být zničen. | ||
===== Vztahy mezi objekty ===== | ===== Vztahy mezi objekty ===== | ||
Řádek 38: | Řádek 42: | ||
==== Závislost ==== | ==== Závislost ==== | ||
+ | Objekt, z kterého míří šipka, využívá ve svém kódu objekt do kterého šipka míří (například v argumentu metody nebo jako lokální proměnnou). | ||
- | + | Př.: Object Zvíře obsahuje metodu nakrmit, která v rámci svého argumentu přijímá objekt typu Jídlo. | |
- | Objekt, z kterého míří šipka, využívá ve svém kódu objekt do kterého míří šipka (například v argumentu metody nebo jako lokální proměnnou). | + | |
- | + | ||
- | + | ||
- | Př. Objekt Zvíře obsahuje metodu nakrmit, která v rámci svého argumentu přijímá objekt typu Jídlo. | + | |
{{ :informatika:maturita:18_umlzavislost.png |UML diagram závislosti}} | {{ :informatika:maturita:18_umlzavislost.png |UML diagram závislosti}} | ||
Řádek 51: | Řádek 52: | ||
Objekty jsou v užším vztahu přímo v kódu. Jeden obsahuje referenci na druhý (například jako datový typ atributu). | Objekty jsou v užším vztahu přímo v kódu. Jeden obsahuje referenci na druhý (například jako datový typ atributu). | ||
- | Př. Objekt Auto obsahuje referenci na objekt Barva. | + | Př.: Objekt Auto obsahuje referenci na objekt Barva. |
{{ :informatika:maturita:18_umlasociace.png |UML diagram asociace}} | {{ :informatika:maturita:18_umlasociace.png |UML diagram asociace}} | ||
Řádek 59: | Řádek 60: | ||
Silnější vztah než asociace. Objekt na straně kosočtverce vlastní instance objektu na druhé straně. Při zániku prvního, ale nedochází k zániku druhých. | Silnější vztah než asociace. Objekt na straně kosočtverce vlastní instance objektu na druhé straně. Při zániku prvního, ale nedochází k zániku druhých. | ||
- | Př. Objekt EvropskáUnie obsahuje referenci na objekty typu Stát, které jsou v rámci EU. Zanikne-li však EU, státy sice mohou válčit, ale pořád existují. | + | Př.: Objekt EU obsahuje referenci na objekty typu Stát, které jsou v rámci EU. Zanikne-li však EU, státy sice mohou válčit, ale pořád budou existují. |
{{ :informatika:maturita:18_umlagregace.png |UML diagram agregace}} | {{ :informatika:maturita:18_umlagregace.png |UML diagram agregace}} | ||
Řádek 67: | Řádek 68: | ||
Silnější vztah než asociace. Objekt na straně kosočtverce vlastní instance objektu na druhé straně. Při zániku prvního zanikají i instance druhého. | Silnější vztah než asociace. Objekt na straně kosočtverce vlastní instance objektu na druhé straně. Při zániku prvního zanikají i instance druhého. | ||
- | Př. Objekt Škola obsahuje objekty typu Třída, které daná škola má. Ve chvíli, kdy škola zaniká nemůžou dále existovat objekty typu Třída samostatně. | + | Př.: Objekt Škola obsahuje objekty typu Třída, které daná škola má. Ve chvíli, kdy Škola zaniká nemůžou dále existovat objekty typu Třída samostatně – zaniknou tedy společně se Školou. |
{{ :informatika:maturita:18_umlkompozice.png |UML diagram kompozice}} | {{ :informatika:maturita:18_umlkompozice.png |UML diagram kompozice}} | ||
- | ==== Dědičnost (nebo také specializace nebo generalizace) ==== | + | ==== Dědičnost (neboli specializace či generalizace) ==== |
Objekt, ze kterého míří šípka, je speciálním případem objektu druhého. | Objekt, ze kterého míří šípka, je speciálním případem objektu druhého. | ||
- | Př. Objekt Jablko je speciálním případem objektu Plod. | + | Př.: Objekt Jablko je speciálním případem objektu Plod. |
{{ :informatika:maturita:18_umldedicnost.png |UML diagram dědičnosti}} | {{ :informatika:maturita:18_umldedicnost.png |UML diagram dědičnosti}} | ||
Řádek 81: | Řádek 82: | ||
==== Implementace ==== | ==== Implementace ==== | ||
- | Speciální vztah mezi rozhráním a objektem, který ho implementuje. Význam je podobný jako u dědičnosti. | + | Speciální vztah mezi rozhraním a objektem, který ho implementuje. Význam je podobný jako u dědičnosti. |
- | Př. Objekt Auto implementuje metody rozhrání Pohybovatelný. | + | Př.: Objekt Auto implementuje (pohybové) metody rozhraní Pohybovatelný. |
{{ :informatika:maturita:18_umlimplementace.png |UML diagram implementace}} | {{ :informatika:maturita:18_umlimplementace.png |UML diagram implementace}} | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- |