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í revize Předchozí verze
Následující verze
Předchozí verze
informatika:maturita:19a [26. 04. 2015, 02.26]
xzemla1 [Zapouzdření]
informatika:maturita:19a [25. 02. 2018, 22.53] (aktuální)
xjasek [Dědičnost]
Řádek 1: Řádek 1:
-<WRAP center round alert 60%> 
-Ještě není dokončeno 
-</​WRAP>​ 
- 
- 
 ====== Principy objektově orientovaného programování ====== ====== Principy objektově orientovaného programování ======
  
-===== základní jednotky OOP: =====+===== Vztah k ostatním paradigmatům ​=====
  
-==== Třída ====+Na rozdíl od imperativního a strukturovaného programování je výkonný kód objektově orientovaného programování obsažen v rámci objektů. To znamená, že konkrétní hodnoty jsou uloženy jako atributy těchto objektů. Zpracování atributů spolu s celkovou komunikací s objekty probíhá pomocí kódu, který je obsažený v metodách objektů. Navenek pak program působí jako několik navzájem spolupracujících objektů, což umožňuje snadnější přenos kódu mezi různými projekty a jednodušší úpravu již existujícího kódu pomocí dědičnosti. Další výhodou je také větší zabezpečení dat díky viditelnosti atributů.
  
-vzor definován uživatelem,​ který může obsahovat metody i proměnné (např. ​třída clovekobsahující proměnnénapř+Nevýhodou objektově orientovaného programování je jeho větší náročnost na paměť a výpočetní rychlostproto se používá hlavně u moderních počítačůkde jsou tyto nevýhody téměř neznatelné. U mikropočítačů a jednoduchých jednoúčelových strojů je však výhodnější použití strukturovaného programování.
-<WRAP center round box 60%> +
-class Clovek{+
  
-string jmeno;+===== Zapouzdření =====
  
-int vek;}+Zapouzdření může být chápáno jako zabalení dat a metod do jednoho objektu. Tento proces váže data s metodami, které s těmito daty pracují, čímž umožňuje základní funkce OOP. Další funkcí zapouzdření je znepřístupnění dat a metod na základě jejich viditelnosti.
  
-</​WRAP>​ +===== Dědičnost =====
-  +
-a metody, např:  +
-<WRAP center round box 60%> +
-dychej(){...};​+
  
-rekni(string co){...}; +Dědičnost umožňuje tvorbu nových ​íd podle již vytvořených ​ídTyto odvozené ​třídy ​pak obsahují všechny atributy ​metody rodičovských ​tříd. ​Odvozené ​třídy si mohou tyto data různě upravovat ​nebo přidávat další
- +
-+
-</​WRAP>​ +
- +
-==== Objekt ==== +
- +
-instance třídy, vzájemně se liší svými vlastnostmi(atributy) a mají stejné metody jako ída +
- +
-např . +
-<WRAP center round box 60%> +
-clovek kaja{ +
- +
-jmeno = "Karel Novak";​ +
- +
-vek = 55; +
-+
-</​WRAP>​ +
- +
-a můžeme použít metodu +
-<WRAP center round box 60%> +
-kaja.rekni("​Mam hlad"​);​ +
- +
-kaja.dychej();​ +
- +
-</​WRAP>​ +
- +
-můžeme si vytvořit více instancí:  +
-<WRAP center round box 60%> +
-clovek honza{ +
- +
-jmeno = "Jan Cerny";​ +
- +
-vek = 10;} +
-</​WRAP>​ +
- +
-a opěmůžeme použít stejné metody... +
- +
-===== Základní pilíře OOP ===== +
-OOP stojí na třech základních pilířích:​ +
- +
-==== Zapouzdření ==== +
- +
-umožňuje nám skrýt ty metody a atributy, ke kterým nechceme, aby bylo možné přistupovat z vnějškuNapř. u třídy ​clovek můžeme proměnnou datumNarozeni nechat na skrytou (private) ​tím zabráníme,​ aby mohla být změněna z vnějšku. Tuto vlastnost definujeme pomocí viditelnosti,​ která může nabývat hodnot public, protected, private. Díky tomu můžou objekty fungovat jako tzv. černé skříňky: můžeme jim dát vstup, přičemž dostaneme nějaký výstup, ale nemusíme se vůbec zajímat o to, jak to vevnitř funguje.  +
-Na tomto principu funguje rozhraní(interface),​ jehož vlastnosti poté implementujeme do různých ​tříd. +
-==== Dědičnost ==== +
- +
-Usnadňuje vytváření podobných tříd. Z rodičovské ​třídy si vezme podtřída všechny metody a proměnné(resp. ty, které mají nastavenou viditelnost na public ​nebo protected) a může si navíc ​idat svoje.+
  
 např: např:
 <WRAP center round box 60%> <WRAP center round box 60%>
-class Zpevak extends Clovek {(říkáme, že třída pro zpěváky je potomkem člověka)+class Zpevak extends Clovek {
  
 zpivej{}; zpivej{};
Řádek 82: Řádek 24:
 } }
 </​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ícenásobná dědičnost ====
 +Počet rodičovských tříd je určen použitým programovacím jazykem (např. Java umožňuje pouze jednu rodičovskou třídu, C++ umožňuje více).
  
-==== Polymorfismus ====+ 
 +===== Polymorfismus ​=====
  
 Umožňuje použít jednotné rozhraní pro práci s různými typy objektů Umožňuje použít jednotné rozhraní pro práci s různými typy objektů
Řádek 94: Řádek 40:
  
 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ů. ​ 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ů. ​
-Např metoda //​rekni(string vyrok);// umožní objektu clovek říct nějaký výrok jen tak do vzduchu, 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í.+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í.
  
 +V některých programovacích jazycích umožňuje polymorfismus metodám také různé zpracování parametrů různého typu.
  
-==== Vícenásobná dědičnost ​==== +===== Viditelnost atributů a metod ===== 
-Možnost potomka dědit z více íd zároveňJejí použití se příliš neosvědčilokvůli riziku konfliktu jmenkonstruktorůdalším problémům. Lze ji využít ​např. v C+++Nastavením viditelnosti dat můžeme určit, které části programu budou mít k těmto datům přístupNastavit můžeme tři základní možnosti. 
 +  * private - data jsou viditelná pouze pro konkrétní objekt 
 +  * public - data jsou viditelná komukoli 
 +  * protected - data jsou viditelná pouze pro konkrétní třídu a odvozené třídy 
 + 
 +===== Rozhraní ===== 
 +Zjistíme, že programátor umí psát na počítači a účetní také. Intuitivně cítímeže nebudou mít mnoho dalších společných schopností a navíc tuto dovednost může mít napříč povoláními leckdoproto nemá smysl tvořit třídu na způsob ČlovekPracujícíSPočítačem ​od ní dědit Programátora a Účetní, ale je výhodnější například vytvořit rozhraní SchopenPsátNaPočítači s požadavkem na metodu napišNaPočítači() a upravit třídy Programátor a Účetní tak, aby toto rozhraní implementovaly,​ tedy předepsanou metodu, a to každý po svémV definici rozhraní nemůže být obsažen kód (implementace) dané metody, ale všechny třídy, které toto rozhraní implementují,​ musí být schopny se s příkazem napišNaPočítači() nějak vypořádat.
  
 +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.
informatika/maturita/19a.1430008002.txt.gz · Poslední úprava: 26. 04. 2015, 02.26 autor: xzemla1