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 [25. 04. 2015, 16.27]
xzemla1
informatika:maturita:19a [25. 02. 2018, 22.53] (aktuální)
xjasek [Dědičnost]
Řádek 1: Řádek 1:
-<WRAP center round alert 60%> +====== Principy objektově orientovaného programování ======
-Ještě není dokončeno +
-</​WRAP>​+
  
 +===== Vztah k ostatním paradigmatům =====
  
-====== Principy ​objektově orientovaného programování ​======+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ů.
  
-===== základní koncepce OOP: =====+Nevýhodou objektově orientovaného programování je jeho větší náročnost na paměť a výpočetní rychlost, proto 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í.
  
-==== Třída ====+===== Zapouzdření =====
  
-vzor definován uživatelem,​ který ​může ​obsahovat metody i proměnné (např. třída clovek, obsahující proměnnénapř+Zapouzdření ​může ​být chápáno jako zabalení dat a metod do jednoho objektuTento proces váže data s metodami, které s mito daty pracujíčímž umožňuje základní funkce OOP. Další funkcí zapouzdření je znepřístupnění dat metod na základě jejich viditelnosti.
-<WRAP center round box 60%> +
-class Clovek{ +
-string jmeno; +
-int vek; +
-</​WRAP>​ +
-  +
-metody, např:  +
-<WRAP center round box 60%> +
-dychej(){...};​ +
-rekni(string co){...}; +
-+
-</​WRAP>​+
  
-==== Objekt ​====+===== Dědičnost =====
  
-instance ​třídy, vzájemně se liší svými vlastnostmi(atributymají stejné ​metody ​jako ída+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 ​íd. Odvozené třídy si mohou tyto data různě upravovat nebo přidávat další. ​
  
-např .+např:
 <WRAP center round box 60%> <WRAP center round box 60%>
-clovek kaja{ +class Zpevak extends Clovek ​{
-jmeno = "Karel Novak";​ +
-vek = 55; +
-+
-</​WRAP>​+
  
-a můžeme použít metodu +zpivej{};
-<WRAP center round box 60%> +
-kaja.rekni("​Mam hlad"​);​ +
-kaja.dychej();+
  
-</​WRAP>​ +tancuj{};
- +
-můžeme si vytvořit více instancí:  +
-<WRAP center round box 60%> +
-clovek honza{ +
-jmeno = "Jan Cerny";​ +
-vek = 10;+
 } }
 </​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()//​.
  
-a opět můžeme ​použít stejné metody...+==== 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).
  
-===== Základní pilíře OOP ===== 
-OOP stojí na třech základních pilířích:​ 
  
-==== Zapouzdření ​====+===== Polymorfismus =====
  
-umožňuje ​nám skrýt ty metody a atributy, ke kterým nechceme, aby bylo možné přistupovat z vnějšku. Např. u třídy clovek můžeme proměnnou datumNarozeni nechat na skrytou (private) a 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říňkymůž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.  +Umožňuje ​použít jednotné rozhraní pro práci s různými typy objektů 
-==== Dědičnost ====+např:
  
-Usnadňuje vytváření podobných ​í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 protecteda může si navíc přidat svoje.+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//​
  
-např: +To znamená, že i když každý objekt tuto metodu vykonává jinak, z vnějšího hlediska se tváří stejně a my nemusíme tedy přemýšlet,​ jak přesně toho u různých objektů docílit.
-<WRAP center round box 60%> +
-class Zpevak extends Clovek {(říkáme, že třída pro zpěváky je potomkem člověka) +
-zpivej{}; +
-tancuj{}; +
-+
-</​WRAP>​+
  
 +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 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í.
  
-==== Polymorfismus ====+V některých programovacích jazycích umožňuje polymorfismus metodám také různé zpracování parametrů různého typu.
  
-Umožňuje použít jednotné rozhraní pro práci s různými typy objektů +===== Viditelnost atributů a metod ===== 
-např: +Nastavením viditelnosti dat můžeme určitkteré části programu budou mít k těmto datům přístup. Nastavit můžeme třzákladní možnosti. 
-instance třídy mladyClovek bude metodu presunSe(); vykonávat za pomocí metody chůzeale instance ​ídy staryClovek bude tu samou metodu presunSe(); vykonávat za pomocí chůze o holi +  * private - data jsou viditelná pouze pro konkrétní ​objekt 
- +  * public - data jsou viditelná komukoli 
-To znamená, ​ž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.+  * protected - data jsou viditelná pouze pro konkrétní třídu 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 leckdo, proto nemá smysl tvořit třídu na způsob ČlovekPracujícíSPočítačem a 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ém. V 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.1429972046.txt.gz · Poslední úprava: 25. 04. 2015, 16.27 autor: xzemla1