Objektově orientované programování. Objektově orientovaný přístup k programování je zcela jiný způsob přemýšlení. Jedná se o moderní styl programování,

Slides:



Advertisements
Podobné prezentace
Tabulkový procesor Práce se souborem – otevření, tvorba a použití šablony, tisk, propojení tabulky Excel s Wordem, nastavení Excelu, uložení Autorem materiálu.
Advertisements

Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
Inf Používání a tvorba databází. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
N á zev S Š : SOU Uherský Brod Autor: Mgr. Věra Dudová N á zev prezentace (DUMu): Právní řád ČR a právní ochrana občanů N á zev sady: Výuka občanské nauky.
Název školy ZÁKLADNÍ ŠKOLA, JIČÍN, HUSOVA 170 Číslo projektu CZ.1.07/1.4.00/ Číslo a název klíčové aktivity 3.2 Inovace a zkvalitnění výuky prostřednictvím.
Využití informačních technologií při řízení obchodního řetězce Interspar © Ing. Jan Weiser.
VZNIK PRACOVNÍHO POM Ě RU Název školy: Základní škola Karla Klíče Hostinné Autor: Mgr. Helena Baculáková Název: VY_32_INOVACE_01_B_08_VZNIK PRACOVNÍHO.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Programování v jazyce C++ Dědičnost a polymorfismus.
ZAL – 5. cvičení Martin Tomášek Pole - opakování Základní datový typ. V poli držíme více elementů (jednoho typu) S elementy v poli můžeme manipulovat.
Autor:Ing. Pavel Brož Předmět/vzdělávací oblast:Informační a komunikační technologie Tematická oblast:Práce se standardním aplikačním programovým vybavením.
Anotace: Materiál je určen pro 1. ročník učebního oboru zedník – vyučovací předmět “technologie“. Je použitelný i pro výuku dané problematiky u jiných.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Software Licence a distribuce Karel Nymsa Dotkněte se inovací CZ.1.07/1.3.00/
Funkce Lineární funkce a její vlastnosti 2. Funkce − definice Funkce je předpis, který každému číslu z definičního oboru, který je podmnožinou množiny.
Název školy: Základní škola a Mateřská škola, Hradec Králové, Úprkova 1 Autor: Aleš Hladík Název: VY_32_INOVACE_6A_3_Vlastní a obecná jména Téma: 6A_ČJ7.roč.
Projekt: Škola pro život Registrační číslo: CZ.1.07/1.4.00/ Číslo DUM: VY_32_INOVACE_02-informatika 8. třída_021 Základní škola: Základní škola.
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 10: Tvorba vlastních funkcí Bc. Radek Libovický.
Financováno z ESF a státního rozpočtu ČR.
Software =je v informatice sada všech počítačových programů používaných v počítači, které provádějí nějakou činnost. - Software je protiklad k hardwaru,
Název školy: Základní škola Pomezí, okres Svitavy
Definice tématu II Robert Zbíral
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Základy automatického řízení 1
HTML a CSS Rostislav Miarka.
NÁZEV ŠKOLY: Masarykova základní škola a mateřská škola Melč, okres Opava, příspěvková organizace ČÍSLO PROJEKTU: CZ.1.07/1.4.00/ AUTOR: Mgr. Vladimír.
SLABIKÁŘ DĚTSKÝCH PRÁV VY_32_INOVACE_01_10
Základní škola Ústí nad Labem, Anežky České 702/17, příspěvková organizace   Číslo projektu: CZ.1.07/1.4.00/ Název projektu: „Učíme lépe a moderněji“
STATISTIKA Starší bratr snědl svůj oběd i oběd mladšího bratra. Oba snědli v průměru jeden oběd.
Výukový materiál zpracován v rámci projektu
Inf Počítač a lidé s handicapem
Matematika 3 – Statistika Kapitola 4: Diskrétní náhodná veličina
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Lineární funkce - příklady
ORGANIZACE DAT V POČÍTAČI
AUTOR: Kateřina Křížová NÁZEV: VY_32_INOVACE_05_09 sociální role
Filmová animace Rostliny Mgr. Jiří Mlnařík VY_32_INOVACE_Mul4a0210.
P2 MARKETINGOVÉ PROSTŘEDÍ
Programování v jazyce C++
MEZILIDSKÁ KOMUNIKACE II.
Vedoucí odboru strategického rozvoje města Vsetín
Dostupné z Metodického portálu ; ISSN
SOFTWARE OSOBNÍHO POČÍTAČE
Inf Tabulkový procesor - formátování
Databáze MS ACCESS 2010.
Číslo projektu Číslo materiálu název školy Autor Tématický celek
Poměr v základním tvaru.
Cvičení 4 Dědičnost objektů.
Obchodní akademie, Střední odborná škola a Jazyková škola s právem státní jazykové zkoušky, Hradec Králové Autor: Mgr. Martina Slánská Kalhousová Název.
NÁZEV ŠKOLY: Základní škola a praktická škola Arkadie o. p. s.
Autor: Ing. Ksandrová Lenka
Popis výukového materiálu Název: PowerPoint
Název školy: Základní škola J. E. Purkyně a Základní umělecká škola
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Materiál byl vytvořen v rámci projektu
Digitální gramotnost Informatické myšlení
Název školy: Autor: Název: Číslo projektu: Název projektu:
Text zápatí (edituje se v menu Vložení / Záhlaví a zápatí)
DIGITÁLNÍ UČEBNÍ MATERIÁL
Zoner Callisto 4 Callisto 2 – barvy, stín, šipky, vrstvy.
Poměr v základním tvaru.
Analýza informačního systému
Informatika – Průměr a min-max
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
Grafy kvadratických funkcí
Teorie chyb a vyrovnávací počet 2
Hromadné dokumenty opakující se pro kolekci osob
Class Diagrams.
Kód materiálu: VY_32_INOVACE_09_DEN_ZEME Název materiálu: Den Země
Transkript prezentace:

Objektově orientované programování

Objektově orientovaný přístup k programování je zcela jiný způsob přemýšlení. Jedná se o moderní styl programování, kterého se chytil softwarový průmysl. V poslední době bývá velmi často využíván při tvorbě většiny nového, komerčního i volně šiřitelného softwaru. Základní kamenem tohoto přístupu je objekt. Objektové programování je bráno jako složitější než to obyčejné (procedurální), o kterém jsme se doposud bavili. U větších projektů se tento přístup jeví jako nutnost. Kód bývá často delší, ale daleko přirozenější, přehlednější a jednodušeji se spravuje.

Objektově orientované programování funguje tím způsobem, že se snažíme nasimulovat realitu tak, jak ji jsme zvyklí vnímat. Můžeme tedy říci, že se odpoutáváme od toho, jak program vidí počítač (stroj) a píšeme program spíše z pohledu programátora (člověka). Jde tedy o určitou úroveň abstrakce nad programem. Základní jednotkou je objekt, který má své atributy a metody.

Atributy objektu jsou vlastnosti neboli data, která uchovává. Jedná se o prosté proměnné. Někdy o nich hovoříme jako o vnitřním stavu objektu. Metody jsou schopnosti, které umí objekt vykonávat. Mohou mít parametry nebo smějí vracet nějakou hodnotu. Každý objekt má nějaký typ, přičemž typy rozdělujeme na vestavěné (list, tuple, int,...) a třídy (definované pomocí klíčového slova class).

Typ určuje, jaké metody objekt nabízí, představuje jakousi šablonu (obecné vlastnosti), od které se pak individuální objekt liší vnitřním stavem (konkrétními vlastnostmi). Říkáme, že objekt je instancí daného typu. Pro zjištění typu objektu slouží vestavěná funkce type. Příklad: print(type("Python")) print isinstance(list(), list) # Funkce "isinstance" kontroluje typ objektu (včetně dědičnosti) True

Konstruktor je metoda, která inicializuje objekt - zavolá se na prázdném objektu ve chvíli, kdy vytvoříme novou instanci. Můžeme jej definovat, ale nemusíme - v takovém případě se použije výchozí konstruktor, který jednoduše nedělá nic (zvláštního). Konstruktor se v Pythonu vždy jmenuje __init__ (dvě podtržítka před i po slově).

Příklad: >>> class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart >>> x = Complex(3.0, -4.5) >>> x.r, x.i (3.0, -4.5) Poznámka - slovíčko self je v podstatě povinný přídavek. Je to jedna z vlastností, jak se odlišuje metoda od funkce.

V Pythonu obecně jsou podtržítkové konvence velice silně zakořeněné. Na objektech to je vidět snad nejvíce. Atributy se dvěma podtžítky na začátku i na konci mají speciální význam. Už jsme viděli __init__ a podíváme se na několik dalších. __repr__ a __str__ - převádějí objekt na řetězec __getattr__ a __setattr__ - slouží pro čtení a ukládání nenalezených atributů __call__ - se zavolá pokud použijeme objekt jako funkci __doc__ - obsahuje dokumentaci (docstring)

Python příliš nerozlišuje mezi metodami a daty (tak jako obecně u proměnných - vše je objekt). Pro něj je vše atribut daného objektu. Nastavení hodnoty se provádí podobně jako ukládání do proměnné, ale musíme přidat objekt a tečku. Atribut daného jména nemusí přitom vůbec existovat, nemusí se nijak deklarovat. Vlastnosti jsou "chytřejší" data. Umožnují vstoupit do procesu čtení nebo nastavování atributu. Hodí se to například tehdy, pokud objekt má několik navzájem závislých parametrů a my je nechceme ukládat nezávisle; pokud chceme kontrolovat, jaká hodnota se ukládá; či pokud chceme s ukládanou nebo čtenou hodnotou ještě něco zajímavého provést.

Objektově orientované programování stojí na třech pilířích, jimiž jsou zapouzdření, dědičnost a polymorfismus. Zapouzdření umožňuje skrýt některé metody a atributy tak, aby zůstaly použitelné jen pro třídu zevnitř. Objekt si můžeme představit jako černou skřínku, která má určité rozhraní (interface), přes které jí předáváme instrukce/data a ona je zpracovává. Nevíme, jak to uvnitř funguje, ale víme, jak se navenek chová a používá. Nemůžeme tedy způsobit nějakou chybu, protože využíváme a vidíme jen to, co tvůrce třídy zpřístupnil.

Příklad zapouzdření: >>> class Auta: def brzda (self): print ("zpomaluje") def plyn (self): print ("zrychluje") Využitím klíčového slova class byl vytvořen název třídy (Auta). Poté se definovaly názvy metod (brzda, plyn) a kód metody (zpomaluje, zrychluje).

V návaznosti na předcházející kód, lze pak snadno (pomocí závorek) vytvořit instanci třídy. >>> auto1 = Auta() # auto1 je instancí třídy Auta >>> auto2 = Auta() # auto2 je instancí třídy Auta >>> auto1.brzda() zpomaluje >>> auto2.plyn() zrychluje Takto vzniklé objekty, v našem případě auto1 a auto2, pak mohou využívat metody třídy a atributy, takže nemusíme definovat funkci brzda a plyn pro každé auto samostatně.

Dědičnost je jedna ze základních vlastností objektově orientovaného programování a slouží k tvoření nových datových struktur na základě starých. Výhody dědění jsou jasné, nemusíme opisovat oběma třídám ty samé atributy, ale stačí dopsat jen to, v čem se liší. Zbytek se podědí. Můžeme tedy rozšiřovat existující komponenty o nové metody a tím je znovu využívat. Nemusíme psát spousty redundantního (duplikovaného) kódu. A hlavně pokud změníme jediný atribut v mateřské třídě, automaticky se tato změna projeví na ostatních. Nedochází tedy k pracnému ručnímu měnění a možnosti vzniku chyby.

Příklad dědičnosti (návaznost na předchozí příklad): >>> class Moderní_Auta (Auta): def klakson (self): print ("troubí") >>> auto3 = Moderní_Auta() >>> auto3.brzda() zpomaluje >>> auto3.plyn() zrychluje >>> auto3.klakson() troubí

O mateřské třídě se někdy hovoří jako o předkovi a o třídě, která z ní dědí, jako o potomkovi. Potomek může přidávat nové metody nebo si uzpůsobovat metody z mateřské třídy. Je možno se setkat také s pojmy nadtřída a podtřída. V objektovém modelování se dědičnost znázorňuje graficky jako prázdná šipka směřující k předkovi.

Třetím pilířem objektově orientovaného programování se budeme zabývat jen okrajově. Jedná se o polymorfismus, který umožňuje používat jednotné rozhraní pro práci s různými typy objektů. Jednoduše řečeno, dovoluje nám přepsat si metodu u každé podtřídy tak, aby konala, co se požaduje. Rozhraní tedy zůstane zachováno a nemusí se uvažovat, jak se to u onoho objektu volá. Podstatou polymorfismu je metoda nebo metody, které mají všichni potomci definované se stejnou hlavičkou, ale jiným tělem.

Příklad polymorfismu (návaznost na předchozí příklad): >>> class Veteráni (Moderní_Auta): def klakson (self): print ("upadl") >>> auto4 = Veteráni() >>> auto4.klakson() upadl >>> auto3.klakson() troubí

Děkuji za Vaši pozornost