Uživatelské nástroje

Nástroje pro tento web


Postranní lišta

Menu


web GML
intranet GML


© GML 2014
používáme Dokuwiki

informatika:maturita:19a

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ř:

class Zpevak extends Clovek {

zpivej{};

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().

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.txt · Poslední úprava: 25. 02. 2018, 22.53 autor: xjasek