Uživatelské nástroje

Nástroje pro tento web


informatika:maturita:19a

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
informatika:maturita:19a [19. 02. 2026, 17.20] – [Zapouzdření] xwolf4informatika:maturita:19a [22. 02. 2026, 14.12] (aktuální) xwolf4
Řádek 1: Řádek 1:
 +<WRAP center round tip 60%>
 +Patří sem rozhraní???
 +</WRAP>
 ====== Principy objektově orientovaného programování ====== ====== Principy objektově orientovaného programování ======
  
Řádek 17: Řádek 20:
 ===== Dědičnost ===== ===== Dědičnost =====
  
-Dědičnost umožňuje tvorbu nových tříd podle již vytvořených tříd. Tyto odvozené třídy pak obsahují všechny atributy a metody rodičovských tříd. Odvozené třídy si mohou tyto data různě upravovat nebo přidávat další. +Dědičnost umožňuje tvorbu nových tříd podle již vytvořených tříd. Tyto odvozené třídy sdědí všechny public a protected atributy a metody rodičovských tříd. Odvozené třídy si mohou tato data různě upravovat nebo přidávat další. 
  
 např: např:
Řádek 23: Řádek 26:
 class Zpevak extends Clovek { class Zpevak extends Clovek {
  
-zpivej{};+zpivej(){};
  
-tancuj{};+tancuj(){};
 } }
 </WRAP> </WRAP>
 V tomto příkladu jsme vytvořili novou třídu //Zpevak//, která je odvozena od třídy //Clovek//. Objekt třídy //Zpevak// tedy může využívat všechny atributy a metody třídy //Clovek// (např. metoda //vstan()// a atribut //barvaOci//) a zároveň nově vytvořené metody //zpivej()// a //tancuj()//. V tomto příkladu jsme vytvořili novou třídu //Zpevak//, která je odvozena od třídy //Clovek//. Objekt třídy //Zpevak// tedy může využívat všechny atributy a metody třídy //Clovek// (např. metoda //vstan()// a atribut //barvaOci//) a zároveň nově vytvořené metody //zpivej()// a //tancuj()//.
 +
 +Podle kritiků by se dědičnost měla používat velmi vzácně, protože vytváří problém přílišné abstrakce a hluboké hiearchie dědičnosti, ve které člověk nepozná, kde je logika skutečně implementována. Z těchto důvodů existuje nepsané pravidlo, že dědičnost by měla být hluboká pouze 1 vrstvu. (dceřiná třída nesmí být rodičovskou třídou pro jiné třídy)
 +
 +Na druhou stranu existují případy, kde je vícevrstvá dědičnost velmi výhodná - například při implementaci datových struktur ve standardní knihovně jazyku Java nebo ve vývoji her (hierarchie typu Entity -> Character -> Player).
  
 ==== Vícenásobná dědičnost ==== ==== Vícenásobná dědičnost ====
Řádek 35: Řádek 42:
  
 ===== Polymorfismus ===== ===== Polymorfismus =====
 +Umožňuje použít jednotné rozhraní pro práci s různými typy objektů.
 +==== Compile-time polymorfismus ====
 +Přetěžování metod - metoda může fungovat více různými způsoby, které se rozliší podle druhu a počtu parametrů. (funguje pouze v jazycích s )
  
-Umožňuje použít jednotné rozhraní pro práci s různými typy objektů +Programovací jazyk se statickými typy ví, jaké datové typy používá, a proto umí vybrat správnou metodu při kompilaci.
-např:+
  
-instance ídy //mladyClovek// bude metodu //presunSe();// vykonávat za pomocí metody //chod//, ale instance třídy //staryClovek// bude tu samou metodu //presunSe();// vykonávat za pomocí //chodOHoli//+Příkladem je ída PrintStream v jazyce Java (implementuje System.out.println())
 +{{:informatika:maturita:java_printstream.png?800|}}
  
-To znamená, že když každý objekt tuto metodu vykonává jinak, z vnějšího hlediska se tváří stejně my nemusíme tedy přemýšlet, jak přesně toho u různých objektů docílit.+==== Runtime polymorfismus ==== 
 +běhu programu se musí zjistit, který datový typ používá tím pádem kterou metodu volat.
  
-Pod pojmem polymorfismus můžeme také rozumět **Přetěžování metod** - to znamená že metoda může fungovat více různými způsoby, které se rozliší podle druhu a počtu parametrů.  +způsoby implementace: 
-Např metoda //rekni(string vyrok);// umožní objektu clovek říct nějaký výrok jen tak do prázdna, zatímco metoda //rekni(string vyrok; clovek prijemce; zpusobHlasitosti hlasitost)// umožní tomu samému objektu říct výrok konkrétnímu příjemci a zvolenou hlasitostí.+  * alespoň 2 třídy mají stejnou rodičovskou třídu 
 +  * alespoň 2 třídy implementují stejné rozhraní
  
-V některých programovacích jazycích umožňuje polymorfismus metodám také různé zpracování parametrů různého typu.+<code> 
 +public class OsobaGML { 
 +    public abstract void prezujSe(); 
 +}
  
 +public class StudentGML extends OsobaGML {
 +    @Override
 +    public void prezujSe() {
 +        System.out.println("Jdu ke skříňkám, otevřu svou skříňku, přezuji se.")
 +    }
 +}
 +
 +public class KantorGML extends OsobaGML {
 +    @Override
 +    public void prezujSe() {
 +        System.out.println("Jdu do svého kabinetu, přezuji se.")
 +    }
 +}
 +
 +public static void main(String[] args){
 +    OsobaGML[] osoby = new {new KantorGML(), new StudentGML()};
 +    // Mám pole všech osob a chci, aby se všichni přezuli.
 +    for(osoba : osoby){
 +        osoba.prezujSe(); // Zde musí program rozlišit, jestli je konkrétní osoba kantorem nebo studentem.
 +    }
 +}
 +</code>
 ===== Viditelnost atributů a metod ===== ===== Viditelnost atributů a metod =====
 Nastavením viditelnosti dat můžeme určit, které části programu budou mít k těmto datům přístup. Nastavit můžeme tři základní možnosti. Nastavením viditelnosti dat můžeme určit, které části programu budou mít k těmto datům přístup. Nastavit můžeme tři základní možnosti.
Řádek 58: Řádek 95:
  
 Obdobně může abstraktní třída předepisovat doimplementování metod, pro které ona sama nemá vlastní kód, ale jen předpis abstraktní metody. Obdobně může abstraktní třída předepisovat doimplementování metod, pro které ona sama nemá vlastní kód, ale jen předpis abstraktní metody.
 +
 +===== Design patterns (návrhové vzory) =====
 +Navrhují konkrétní způsoby řešení častých problémů v OOP. Tyto způsoby byly poprvé popsány v knize [[https://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_type|Design Patterns]] v roce 1994.
 +
 +Výhody:
 +  * rychlost implementace (Nemusím vymyslet způsob řešení problému.)
 +  * komunikace v týmu (Kolega rychle pochopí, protože taky dobře zná tyto návrhové vzory-)
 +  * údržba kódu (Tyto vzory vytváří tzv. "loose coupling". To znamená, že můžu nahradit jednu část systému, aniž bych rozbil všechno ostatní.)
 +Nevýhody:
 +  * Často vedou ke příliš komplikovanému kódu, protože byly použity, aniž by byly potřeba.
 +
 +Tady je seznam nejdůležitějších z každé kategorie:
 +==== Creational ====
 +Nabízí alternativní způsoby vytvoření objektů.
 +  * [[https://en.wikipedia.org/wiki/Builder_pattern|Builder]]
 +  * [[https://en.wikipedia.org/wiki/Singleton_pattern|Singleton]]
 +==== Structural ====
 +Vysvětlují, jak uspořádat objekty do větších struktur.
 +  * [[https://en.wikipedia.org/wiki/Adapter_pattern|Adapter]]
 +  * [[https://en.wikipedia.org/wiki/Decorator_pattern|Decorator]]
 +==== Behavioral ====
 +Vysvětlují komunikaci mezi objekty.
 +  * [[https://en.wikipedia.org/wiki/Iterator|Iterator]]
 +  * [[https://en.wikipedia.org/wiki/Observer_pattern|Observer]]
 +
informatika/maturita/19a.1771518043.txt.gz · Poslední úprava: autor: xwolf4

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki