© UNICORN COLLEGE 2010 Objektově orientovaný přístup Tomáš Holas
© UNICORN COLLEGE 2010
Objektově orientovaný přístup
Tomáš Holas
© UNICORN COLLEGE 2010
Úvod do OOP
Tomáš Holas
© UNICORN COLLEGE 2010
Agenda
Co to je objektově orientovaný přístup
Problémy při vývoji software
Znovupoužitelnost
Evoluce programátorských metodik
Základní kocepty OOP
© UNICORN COLLEGE 2010
Co znamená OOP?
Program se skládá z entit zvaných objekty, které odpovídají konceptům, se kterými bude program manipulovat
Aplikace pro řízení firmy by mohla mít např. objekty Zaměstnanec, Pobočka, Produkt …
Pro specifikaci vlastností a struktury objektů slouží třída
Třída Zaměstnanec je vzor, který se použije k vytvoření mnoha různých objektů typu Zaměstnanec.
Objekty komunikují tak, že si navzájem posílají zprávy
Objektu Zaměstnanec pošleme zprávu "Jak se jmenuješ?"
© UNICORN COLLEGE 2010
Co může být objektově orientované
Programovací styl
Koncepty z problémové domény se mapují přímo na objekty ve zdrojovém kódu
Filozofie
Způsob designu, implementace a přemýšlení o zdrojovém kódu
Technologie
Objektově orientované metodiky, programovací jazyky, databáze
© UNICORN COLLEGE 2010
Softwarová krize
Společnost je stále více závislá na softwaru
Problémy softwaru:
Velké množství chyb
Složitý na pochopení
Špatně se udržuje
Špatně se rozšiřuje
Stále znovu "vynalézáme kolo"
vysoké náklady na vývoj
vždy nové zavlečené chyby
© UNICORN COLLEGE 2010
Řešení: Znovupoužitelnost!
Programy se píší ručně, od základů..
… jako výroba vlastních šroubků při stavbě domu
Průmyslová revoluce: montážní linka, náhradní díly
Cíl: Vyvinout znovupoužitelné softwarové komponety
Jednoduše ovladatelné
Snadné na pochopení
Vhodné k použití v různých programech
Nový kód využívá komponent a řeší už specifické problémy
Znovupoužitelnost není cut & paste
Pokud máte nutkání zkopírovat kód, měli byste vytvořit komponentu
© UNICORN COLLEGE 2010
Výhody znovupoužitelnosti
Méně kódu – nižší cena vývoje
Mnohokrát použitý kód = spolehlivě otestovaný kód
Chybu stačí opravit na jednom místě
Vyšší specializace programátorů
Můj kód používají ostatní – motivace k tomu psát ho dobře
© UNICORN COLLEGE 2010
Evoluce metodik
© UNICORN COLLEGE 2010
Modulární programování
Rozdělit velké problémy na menší, snadněji uchopitelné
Rozdělením velkých programů na menší části
Každou část kódovat a testovat samostatně
Jádrem modularizace je subrutina (1950)
Nevyřešené problémy:
Které části programu převést na subrutiny
Jaké budou argumenty, návratové hodnoty a vedlejší efekty
© UNICORN COLLEGE 2010
Strukturované programování
Systematický způsob modularizace (1960)
Funkcionální dekompozice
Přístup shoda-dolu
Rozdělování funkcionality od nejvyšší úrovně, na menší a menší komponenty, dokud nedostaneme konkrétní subrutiny
© UNICORN COLLEGE 2010
Limity funkcionální dekompozice
Funkce vyvíjejících se systému nelze vždy předvídat
Úspěšný systém se bude rozšiřovat
Nutnost implementovat více úkolů, než bylo původně v plánu
Systém se upraví aby zahrnoval počáteční změny
Z úprav se stanou "hacky"
Požadovaná funkcionalita se vzdaluje od původní dekompozice
Komplexita a nestabilita systému narůstá
Modifikace vyžadují odvážnější hacky, nebo kompletní přepsání
Proces se zastavuje, když náklady přerostou užitek z nové funkcionality
© UNICORN COLLEGE 2010
Problém globálních dat
Zvýšení flexibility - globální data
Sdílená mezi subrutinami
Každá subrutina pracující s globálními daty může nepředvídatelným způsobem ovlivňovat ostatní subrutiny
© UNICORN COLLEGE 2010
Problematické přizpůsobení kódu
Pro implementaci podobné (ne identické) operace na existujících datech musíme duplikovat kód
Kolekce dat s různými typy vyžadují náročné rozhodování
© UNICORN COLLEGE 2010
Jak to řeší OOP?
Předávání zpráv
Jasná a konzistentní syntaxe pro manipulaci s objekty
Zapouzdření
Způsob jak ochránit data a vnitřní funkce před nežádoucími zásahy z venku
Dědičnost
Umožňuje definovat nové datové struktury na základě těch starých (otestovaných), za použití existujícího kódu
Polymorfismus
Datové struktury si samy udržují informace o svých typech
Všechny objekty obsahují kompletní sadu funkcí pro práci se svými daty
© UNICORN COLLEGE 2010
Stavební prvky OOP
© UNICORN COLLEGE 2010
Objekt
Objekt je souhrn informací, který modeluje některé vysokoúrovňové koncepty z problémové domény
Existuje 1:1 vazba mezi "realnými věcmi" z problémové domény a objekty v OO programu
Práce s OO programy je intuitivní, jedná se o určitý typ "virtuální reality"
Struktura a chování objektu je popsána v definici třídy objektu
Definováním objektů vytváříme další datové typy
Celé číslo
Řetězec
Automobil
© UNICORN COLLEGE 2010
Objekt
© UNICORN COLLEGE 2010
Třída a instance
Třída je vzor pro vytváření mnoha podobných objektů
Vytvořený objekt je instance dané třídy
Objekty ze stejné třídy budou mít stejnou základní strukturu a funkcionalitu
Z jedné třídy je možné vytvořit mnoho instancí
© UNICORN COLLEGE 2010
Třída a instance
© UNICORN COLLEGE 2010
Instanční proměnné
Instanční proměnná (nebo atribut) objektu je určitá informace náležející jednotlivé instanci (objektu)
Jméno objektu typu Člověk, model nebo rok objektu Automobil
Instanční proměnné jsou definovány v třídě objektu
Každý objekt má vlastní privátní místo, kam si ukládá svoje data
© UNICORN COLLEGE 2010
Instanční metody
Instanční metody jsou akce, které je objekt schopen provádět
Objekt třídy Člověk by měl umět sdělit své jméno, příjmení..
Objekt třídy Auto by měl umět nastartovat, zařadit rychlost..
Instanční metoda se implementuje se pomocí speciální subrutiny, která je připojená k třídě objektu, a má přístup ke všem instančním proměnným objektu
© UNICORN COLLEGE 2010
Metody a zprávy
Zpráva je požadavek, který pošleme objektu, když chceme, aby provedl nějakou akci případně nastavil nebo vrátil hodnotu atributu
Metoda je část kódu, která je zavolána, aby obsloužila akci požadovanou danou zprávou
© UNICORN COLLEGE 2010
Jak vypadá zpráva
Zpráva se skládá ze 3 částí
Příjemce: objekt přijímající zprávu
Jméno metody: jakou akci chceme na objektu vyvolat
Parametry: argumenty které zpráva vyžaduje
© UNICORN COLLEGE 2010
Mapování problémové domény
© UNICORN COLLEGE 2010
Ukázková třída
© UNICORN COLLEGE 2010
Použití třídy
© UNICORN COLLEGE 2010