10. cvičení

  • Hodnoty a objekty
  • Třídy
  • Dědičnost

Python: Hodnoty a objekty

V Pythonu je každá hodnota (tj. něco, co můžeme uložit do proměnné, vrátit z funkce nebo třeba seznamu) objekt. Dále jsou programovací jazyky (třeba Java, Javascript nebo C++), které mají i jiné hodnoty než objekty. Také jsou programovací jazyky (např. v C), kde objekty vůbec nejsou. V Pythonu mezi hodnotou a objektem není rozdíl. My to ovšem nepotřebujeme vědět do detailů. To co je nutné vědět je, že základní vlastnost objektů je to, že obsahují jak data (informace), tak chování - instrukce nebo metody, které s těmito daty pracují. Například řetězce v Pythonu obsahují jak informace (nějakou posloupnost znaků), tak užitečné metody jako count nebo upper. Objekty spojují data a funkčnost dohromady. Python není "stoprocentně" objektový jazyk.

Třída (angl. class)

Třídu použijeme, když chceme mít ve svém programu více objektů s podobným chováním. Například laboratorní učebna by mohla mít třídu Ucebna, webová aplikace třídu User, tabulkový procesor třídu Bunka.

Vlastní třída:


Dědičnost

Můžeme si vytvořit třídu společnou pro všechna za a do ní napsat všechno, co je společné. Ve třídách pro jednotlivé druhy zařízení pak zbude jen to, co se liší.


Polymorfismus

Dědičnost budeme používat, abychom nepsali stejný kód dvakrát. Nadtřídy mají ještě jednu důležitou vlastnost: když víme, že každá Tiskarna nebo Plotter nebo jakákoli jiná podtřída je Zarizeni, můžeme si udělat seznam zarizeni s tím, že nám pak bude jedno, jaká přesně zarizeni to jsou:

Důležitá vlastnost podtříd: když máš nějakou Tiskárnu, můžeš ji použít kdekoliv kde program očekává Zařízení, protože každá Tiskárna je Zařízení.

Generalizace

U třídy Zarizeni je nutné vhodně pojmenovat metody, aby se daly použít pro všechna zařízení. Definice nadtříd, ze kterých se dobře dědí, není jednoduché. Zvlášť to platí, kdyby se z nich mělo dědit v dalších programech, než kde je nadtřída. I z toho důvodu je dobré dědičnost používat hlavně v rámci svého kódu. Není dobré dědit od tříd, které napsali jiní programátoři, pokud vlastník nadtřídy nezmíní jak se z ní má dědit.

Samostatná úloha 

Zadání samostatné úlohy 09

Studijní materiály

Heineman G., Pollice G., Selkow S., Algorithms in a Nutshell , O'Reilly, USA 2008

Lutz, Mark, Learning Python , Sebastopol : O'Reilly 2009

Pilgrim, Mark, Ponořme se do Python(u) 3 , Edice CZ.NIC 2010

Beazley, David M.; Jones, Brian K., Python cookbook , Sebastopol : O'Reilly 2013

Summerfield, Mark, Python 3 : výukový kurz , Brno : Computer Press 2010

Pokud se zajímáte o Python více napište mi na email níže :)

Něco málo o mě

Jsem správcem neuroinformatické laboratoře na Západočeské univerzitě na Katedře informatiky a inženýrství. V rámci ZČU jsem pracoval na několika projektech (sémantický web v EEG / ERP portálu, OEN ontologie, vývojová koordinační porucha u dětí, kontrola pozornosti řidiče, analýza EEG u myší, asistenční systém řízený mozkovými vlnami pro osoby se sníženou pohyblivostí, BodyInNumbers).

Kontakt

Ing. Petr Brůha
Technická 8,
Plzeň, 30100, Česká republika
E: pbruha@kiv.zcu.cz
P: +420 377 63 2412
M: UN 324

Konzultační hodiny

Budova FAV, sekce NTIS, kancelář UN324

St: 13:00-13:55

Pá: 10:00-11:00