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 [25. 04. 2015, 16.27] xzemla1informatika:maturita:19a [25. 02. 2018, 22.53] (aktuální) – [Dědičnost] xjasek
Řá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: autor: xzemla1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki