09.09.2014 Views

Objektově orientované programování v jazyce Python - eAMOS

Objektově orientované programování v jazyce Python - eAMOS

Objektově orientované programování v jazyce Python - eAMOS

SHOW MORE
SHOW LESS

Transform your PDFs into Flipbooks and boost your revenue!

Leverage SEO-optimized Flipbooks, powerful backlinks, and multimedia content to professionally showcase your products and significantly increase your reach.

<strong>Objektově</strong> <strong>orientované</strong> <strong>programování</strong> v <strong>jazyce</strong> <strong>Python</strong><br />

Základní pojmy objektově <strong>orientované</strong>ho <strong>programování</strong><br />

Objekt – vychází z reálného světa. Má dva charakteristické rysy.<br />

<br />

Všechny objekty mají stav<br />

<br />

Všechny objekty mají chování<br />

Objekt má své vlastnosti a může vykonávat určité činnosti. Každý objekt je instancí třídy<br />

objektů. Třída objektu definuje množinu činností, které mají všechny objekty této třídy<br />

společné. Jednotlivé objekty stejné třídy se od sebe tedy liší pouze hodnotami vlastností.<br />

Třída - Třída je základní konstrukční prvek objektově <strong>orientované</strong>ho <strong>programování</strong>. Třída<br />

slouží k vytváření objektů. Pomocí třídy definujeme vlastnosti a metody objektu.<br />

Atribut – určuje vlastnost objektu.<br />

Metoda – je funkce přidružená k určité třídě.<br />

<strong>Python</strong> je objektově orientovaný jazyk. V této kapitole se budeme zabývat:<br />

a) Dědičností<br />

b) Vícenásobnou dědičností<br />

c) Polymorfismem<br />

d) Zapouzdřením<br />

Objekty nejsou jenom instance třídy, ale i samotná třída je objekt v <strong>Python</strong>u. Mezi objekty<br />

v <strong>Python</strong>u patří moduly, uživatelské funkce.<br />

Definování třídy<br />

Třída se v <strong>Python</strong>u definuje pomocí konstrukce class. Popis této konstrukce si lépe<br />

představíme na následujícím příkladu.<br />

- 1 -


class auto:<br />

def __init__(self, z = ’Fiat’):<br />

self.znacka = z<br />

def ukazZnacku(self):<br />

print ’Toto je auto:’, self<br />

print ’Znacka:’, self.barva<br />

Po klíčovém slovu class následuje libovolný název třídy. Stejně v jako jiných konstrukcích tak i tady<br />

následuje odsazení. Poté co odsadíme, můžeme definovat funkci.<br />

Dědičnost<br />

Dědičnost je velice využívaná, kvůli zjednodušení a lepší orientaci v kódu a ušetření práce<br />

programátorům. Vysvětlil bych to opět na příkladu, kde využijeme předcházející ukázku.<br />

class SUV (auto):<br />

def __init__(self, z = 4x4):<br />

auto.__init__(self, znacka = ’Fiat’)<br />

self.zaber = z<br />

def ukaz(self):<br />

auto.ukazZnacku(self)<br />

print ’Typ auta:’, self.zaber<br />

autoDoTerenu = SUV()<br />

- 2 -


autoDoTerenu.ukaz()<br />

Zavolání a výpis bude vypadat takto:<br />

Toto je auto: <br />

znacka: fiat<br />

zaber: 4x4<br />

Pokud bychom chtěli použít vícenásobnou dědičnost, pak bychom byli nuceni dopsat do<br />

závorek k příkazu class SUV (auto): , jednotlivé rodičovské třídy oddělené čárkami.<br />

Postup <strong>Python</strong>u, při hledání atributu<br />

<strong>Python</strong> nejdříve projde třídu objektu. Následně pokračuje prohledáváním první rodičovské<br />

třídy stejné třídy. Stejný princip se aplikuje i na předky této třídy. Pokud je však atribut<br />

nenalezen, přesune se na další rodičovské třídy. Pokud nastane varianta, že interpret nenajde<br />

žádný hledaný atribut, vyvolá se výjimka.<br />

Nastane- li situace a bude chtít volat metodu z některých rodičovských tříd, použijeme zápis.<br />

Chceme-li volat metodu některé z rodičovských tříd, použijeme zápis podobný tomu, jako je<br />

těmto: auto.ukazZnacku(self) .<br />

Zde voláme funkci ukazZnacku, která se nachází ve třídě auto a je součástí objektu self.<br />

- 3 -


Třídní a statické metody<br />

Novinkou, co se týče <strong>Python</strong>u, jsou třídní a statické metody.<br />

Třídní metoda je metoda, která dostane místo instance,<br />

třídu samotnou. Dostane ovšem první argument. U třídní metody není důležité, jestli je volána<br />

jako metoda instance nebo funkce, která je definována ve funkci. Pokud vytvoříme metodu,<br />

která bude třídní, vytvoříme vlastně klasickou funkci. Tato funkce bude obsahovat jako první<br />

argument, odkaz na třídu a poté se s funkcí classmethod() zkonvertuje.<br />

Statické metody jsou takové metody, které nepříbírají žádný argument, v němž je instance<br />

nebo třída. Mohli by jsme si to představit jako funkce, které jsou definované ve třídě. Jejich<br />

sestrojení je obdobné jako u předchozího typu metod. Místo funkce classmethod() použijeme<br />

funkci staticmethod().<br />

Bibliografie<br />

ŠVEC, Jan. Učebnice jazyka <strong>Python</strong> (aneb Létající cirkus) [online]. 16.prosince.2002 [cit.<br />

2009-12-01]. Dostupný z WWW:<br />

.<br />

ŠVEC, Jan. Létající cirkus,<strong>Python</strong> tutoriál [online]. 13.února.2003 [cit. 2009-12-15]. Dostupný z<br />

WWW:<br />

< http://i.iinfo.cz/r/old/data/letajici_cirkus.pdf>.<br />

- 4 -


Ověření znalostí z kapitoly 4 - <strong>Objektově</strong> <strong>orientované</strong> <strong>programování</strong><br />

v <strong>jazyce</strong> <strong>Python</strong><br />

1. Patří mezi objekt v <strong>Python</strong>u modul<br />

a) Ano<br />

b) Ne<br />

c) Nevím<br />

2. Jak může přistupovat k atributům<br />

a) public<br />

b) private<br />

c) public i private<br />

3. Je součástí objektově <strong>orientované</strong>ho <strong>programování</strong> v <strong>Python</strong>u dědičnost<br />

a) Ano<br />

b) Ne<br />

c) Ano, ale ne v <strong>Python</strong>u<br />

- 5 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!