Objektově orientovaný přístup 1
Historie programovacích jazyků 1945: John von Neumann článek o nové metodě pro ukládání programů 1945: Grace Hopper poprvé termín "bug" 1946: Konrad Zuse Plankalkul - první vysokoúrovňový jazyk 1949: Maurice Wilkes EDSAT první systém pro ukládání programů (1k paměti) 1957: FORTRAN (FORmula TRANslating), COBOL, LISP 1960: ALGOL 60 předchůdce jazyka Pascal 2
Historie programovacích jazyků 1962: SIMULA první objektově orientovaný jazyk 1967: Simula II 1970: Kenneth Thompson jazyk B (vytváření aplikací pro UNIX) 1972: Dennis Ritchie jazyk C 1972: Smalltalk (částečně založen na jazyku SIMULA) 1983-5: Bjarne Stroustrup jazyk C++ 1989: ANSI standard C++ 1991: James Gosling, Patrick Naughton, Mike Sheridan jazyk Java (Sun) 1991: Guido van Rossum - Python 2000: Microsoft jazyk C# 3
Věci a abstraktní objekty Věci kolem nás se odborně nazývají objekty (jsou to skutečné objekty, např. konkrétní dům, reálná osoba, ) Abstraktní objekt obecný popis reálného objektu, jeho parametrů, vlastností, chování, U abstraktního objektu se soustředíme na podstatné věci (na to, co je pro daný účel důležité) Práce s objekty usnadňuje a zefektivňuje řešení složitých situací Např.: Dům: Počet podlaží Člověk: Jméno Zastavěná plocha Pohlaví Majitel Věk Cena Spaní Zastarávání Sezení 4
Procedurální a objektově orientované programování Procedurální programování využití procedur a funkcí znovupoužitelný kód aktualizuje se (pokud možno) na jednom místě Objektově orientované programování využívá tříd objektů, definuje jejich atributy a metody ty pak popisují parametry, vlastnosti a chování abstraktních objektů. Pojem "objektová orientace" je vykládán různě autor knihy [3] popisuje situaci, kdy zavřel odborníky na OOP do jedné místnosti a ti se shodli na jediné společné vlastnosti: zapouzdření. 5
Co znamená "objektově orientovaný"? Podle [3]: Zapouzdření Skrývání informací a implementací Zachování stavu Identita objektů Zprávy Třídy Dědičnost Mnohotvárnost Obecnost 6
Zapouzdření (encapsulation) Zapouzdření: seskupení souvisejících idejí (vlastností, chování, ) do jedné jednotky, na kterou se lze následně odkazovat jediným názvem Objektově orientované zapouzdření: zabalení operací (metod) a atributů představující nějaký stav do jednoho objektu, takže daný stav je přístupný či upravitelný pouze prostřednictvím rozhraní poskytovaného zapouzdřením (tedy pomocí operací či metod) Např.: Logo a želva, český Karel 7
Skrývání informací a implementací (information/implementation hiding) Skrývání informací a implementací: využití zapouzdření k omezení externí viditelnosti určitých informací nebo implementačních rozhodnutí, která jsou pro strukturu zapouzdření interní Přínosy: Lokalizace rozhodnutí při návrhu změny v implementaci uvnitř zapouzdření mají malý nebo žádný dopad na zbytek systému Zrušení vazby mezi obsahem informací a formou jejich reprezentace ostatní se např. nemusí zabývat vnitřkem -> méně chyb Např. želva v Logu má určitý směr, ale zvenku není vidět, jak je tento směr v počítači uložen (pomocí symbolu, ve stupních, v radiánech, ) 8
Zachování stavu (state persistence) Zachování stavu: objekt uchovává svůj stav (nějakou množinu hodnot) objekt "neumírá" po provedení nějakého požadavku na něj a může pokračovat ve svém "životě" Např. želva v Logu uchovává informaci o své pozici, směru natočení, barvě pera, 9
Identita objektu (object identity) Identita objektu: vlastnost, podle které je možné každý objekt (bez ohledu na jeho třídu nebo aktuální stav) identifikovat a pracovat s ním jako se samostatnou softwarovou entitou Např. v Logu může existovat několik želv každá má svoje parametry a lze s každou pracovat zvlášť a odkazovat se na ně 10
Zpráva (message) Zpráva: "dopravní prostředek", kterým odesílající objekt obj1 přenáší cílovému objektu obj2 požadavek, aby objekt obj2 použil jednu ze svých metod (objekty obj1 a obj2 mohou být i stejné) Zpráva může mít i argumenty Objekt může být: Odesílatelem Cílem Odkazován nějakou proměnnou v jiném objektu Odkazován nějakým argumentem předaným libovolným směrem ve zprávě Např.: želva(0).jdi(10) 11
Třída (class) Třída: šablona, podle které se vytvářejí objekty (jejich instance); každý objekt má stejnou strukturu a chování jako třída, jejíž je instancí; patří-li objekt obj do třídy T, pak říkáme, že "obj je instancí T" Třída je to, co programujeme, navrhujeme Objekt je to, co vytváříme (ze třídy) při běhu aplikace (tj. instance třídy) 12
Dědičnost (inheritance) Dědičnost (třídy U z třídy T): nástroj, jehož pomocí si třída U implicitně definuje všechny atributy a operace třídy T, jako by byly definovány přímo ve třídě U; T se nazývá nadřízenou třídou (nadřazenou třídou, nadtřídou) U; U se nazývá podřízená třída (podřazená třída, podtřída) T Např.: člověk je nadtřídou zaměstnance, zaměstnanec je nadtřídou učitele, kuchař je podtřídou zaměstnance, kuchař může být podtřídou odboráře, 13
Mnohotvarost (polymorphism) Mnohotvarost: prostředek, jehož pomocí může být jediný název operace nebo atributu definován na základě více než jedné třídy a může nabývat různých implementací v každé z těchto tříd Mnohotvarost: vlastnost, jejímž prostřednictvím může atribut nebo proměnná ukazovat (obsahovat identifikátor) na objekty různých tříd v různých okamžicích Přepisování (overriding): změna definice metody zadané ve třídě T v jedné z podřízených tříd třídy T Přetěžování (overloading) názvu nebo symbolu: daný název nebo symbol má několik operací (či operátorů) definovaných v jedné třídě Např.: "a" * 3, 3 * "a" 14
Obecnost (genericity) Obecnost: taková konstrukce třídy T, která umožňuje dodání jedné nebo více jejich interně používaných tříd až za běhu aplikace (v okamžiku, kdy je vytvořena instance objektu třídy T) Např.: kontejnerové třídy (uchování objektů v nějaké složitější struktuře vyvážený strom, binární strom, ) 15
Literatura 1. Keogh, J., Giannini, M. OOP bez předchozích znalostí: průvodce pro samouky. 1. vyd. Computer Press. Brno: 2006. ISBN 80-251-0973-9. 2. Schmuller, J. Myslíme v jazyku UML. Knihovna programátora. 1. vyd. Praha: Grada, 2001. ISBN 80-247-0029-8. 3. Page-Jones, M. Základy objektově orientovaného návrhu v UML. 1. vyd. Grada Publishing. Praha: 2001. ISBN 80-247-0210-X. 4. Arlow, J., Neustadt, I. UML a unifikovaný proces vývoje aplikací. 1. vyd. Computer Press. Praha: 2002. ISBN 80-7226-947-X. 16