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

Následující verze
Předchozí verze
informatika:maturita:19a [24. 03. 2015, 14.08]
rydloadm vytvořeno
informatika:maturita:19a [25. 02. 2018, 22.53] (aktuální)
xjasek [Dědičnost]
Řádek 1: Řádek 1:
-emla+====== Principy objektově orientovaného programování ====== 
 + 
 +===== Vztah k ostatním paradigmatům ===== 
 + 
 +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ů. 
 + 
 +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í. 
 + 
 +===== Zapouzdření ===== 
 + 
 +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. 
 + 
 +===== 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ší.  
 + 
 +např: 
 +<WRAP center round box 60%> 
 +class Zpevak extends Clovek { 
 + 
 +zpivej{}; 
 + 
 +tancuj{}; 
 +
 +</​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 ===== 
 + 
 +Umožňuje použít jednotné rozhraní pro práci s různými typy objektů 
 +např: 
 + 
 +instance tří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//​ 
 + 
 +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. 
 + 
 +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í. 
 + 
 +V některých programovacích jazycích umožňuje polymorfismus metodám také různé zpracování parametrů různého typu. 
 + 
 +===== 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. 
 +  * 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 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.1427202508.txt.gz · Poslední úprava: 24. 03. 2015, 14.08 autor: rydloadm