SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
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
© UNICORN COLLEGE 2010

Weitere ähnliche Inhalte

Ähnlich wie Úvod do OOP

Dependency Injection Frameworky
Dependency Injection FrameworkyDependency Injection Frameworky
Dependency Injection FrameworkyRoman Pichlík
 
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnyMarketingArrowECS_CZ
 
Vizualizace chemickych struktur na www
Vizualizace chemickych struktur na wwwVizualizace chemickych struktur na www
Vizualizace chemickych struktur na wwwMartin Slavík
 
2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-fullProfinit
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionJiří Matula
 
Semináře M-Files: Konec hledání řešení pro správu firemních dat
Semináře M-Files: Konec hledání řešení pro správu firemních datSemináře M-Files: Konec hledání řešení pro správu firemních dat
Semináře M-Files: Konec hledání řešení pro správu firemních datJaroslav Prodelal
 
ReliSA KIV hlavni oblasti vyzkumu (2014-01)
ReliSA KIV hlavni oblasti vyzkumu (2014-01)ReliSA KIV hlavni oblasti vyzkumu (2014-01)
ReliSA KIV hlavni oblasti vyzkumu (2014-01)Premek Brada
 
Entity Framework: Optimalizace a záludnosti
Entity Framework: Optimalizace a záludnostiEntity Framework: Optimalizace a záludnosti
Entity Framework: Optimalizace a záludnostiProfinit
 
Moodle ve vyuce @TUL.cz
Moodle ve vyuce @TUL.czMoodle ve vyuce @TUL.cz
Moodle ve vyuce @TUL.czMartin Slavík
 
Par IT Postrehu FIT CVUT 27.1.2010
Par  IT Postrehu  FIT CVUT 27.1.2010Par  IT Postrehu  FIT CVUT 27.1.2010
Par IT Postrehu FIT CVUT 27.1.2010milansames
 
Vývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročiléVývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročiléRené Stein
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduMarketingArrowECS_CZ
 
Pořídit hotové řešení nebo si nechat vyrobit vlastní?
Pořídit hotové řešení nebo si nechat vyrobit vlastní? Pořídit hotové řešení nebo si nechat vyrobit vlastní?
Pořídit hotové řešení nebo si nechat vyrobit vlastní? Ondrej Kucera
 

Ähnlich wie Úvod do OOP (20)

TNPW2-2012-02
TNPW2-2012-02TNPW2-2012-02
TNPW2-2012-02
 
Dependency Injection Frameworky
Dependency Injection FrameworkyDependency Injection Frameworky
Dependency Injection Frameworky
 
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změnySpusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
Spusťte si existující VMware infrastrukturu v Cloudu bez jakékoliv změny
 
Vizualizace chemickych struktur na www
Vizualizace chemickych struktur na wwwVizualizace chemickych struktur na www
Vizualizace chemickych struktur na www
 
2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full2019 03-20 snidane-serie-kuchyne-full
2019 03-20 snidane-serie-kuchyne-full
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Semináře M-Files: Konec hledání řešení pro správu firemních dat
Semináře M-Files: Konec hledání řešení pro správu firemních datSemináře M-Files: Konec hledání řešení pro správu firemních dat
Semináře M-Files: Konec hledání řešení pro správu firemních dat
 
Smact a průmysl 4.0
Smact a průmysl 4.0Smact a průmysl 4.0
Smact a průmysl 4.0
 
TNPW2-2011-04
TNPW2-2011-04TNPW2-2011-04
TNPW2-2011-04
 
ReliSA KIV hlavni oblasti vyzkumu (2014-01)
ReliSA KIV hlavni oblasti vyzkumu (2014-01)ReliSA KIV hlavni oblasti vyzkumu (2014-01)
ReliSA KIV hlavni oblasti vyzkumu (2014-01)
 
Entity Framework: Optimalizace a záludnosti
Entity Framework: Optimalizace a záludnostiEntity Framework: Optimalizace a záludnosti
Entity Framework: Optimalizace a záludnosti
 
Moodle ve vyuce @TUL.cz
Moodle ve vyuce @TUL.czMoodle ve vyuce @TUL.cz
Moodle ve vyuce @TUL.cz
 
Libri os - prezentace providerů (Jindřich Vobora a Petr Kazár)
Libri os - prezentace providerů (Jindřich Vobora a Petr Kazár)Libri os - prezentace providerů (Jindřich Vobora a Petr Kazár)
Libri os - prezentace providerů (Jindřich Vobora a Petr Kazár)
 
Par IT Postrehu FIT CVUT 27.1.2010
Par  IT Postrehu  FIT CVUT 27.1.2010Par  IT Postrehu  FIT CVUT 27.1.2010
Par IT Postrehu FIT CVUT 27.1.2010
 
Ipady ve výuce
Ipady ve výuceIpady ve výuce
Ipady ve výuce
 
Sexy infrastruktura
Sexy infrastrukturaSexy infrastruktura
Sexy infrastruktura
 
Úvod do rails
Úvod do railsÚvod do rails
Úvod do rails
 
Vývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročiléVývoj wp 7 aplikací pro pokročilé
Vývoj wp 7 aplikací pro pokročilé
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
 
Pořídit hotové řešení nebo si nechat vyrobit vlastní?
Pořídit hotové řešení nebo si nechat vyrobit vlastní? Pořídit hotové řešení nebo si nechat vyrobit vlastní?
Pořídit hotové řešení nebo si nechat vyrobit vlastní?
 

Mehr von Tomáš Holas

Gwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORMGwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORMTomáš Holas
 
Ondra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavOndra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavTomáš Holas
 
CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6Tomáš Holas
 
Google App Engine - exploiting limitations
Google App Engine - exploiting limitationsGoogle App Engine - exploiting limitations
Google App Engine - exploiting limitationsTomáš Holas
 
Erlang: Agile Scaling
Erlang: Agile ScalingErlang: Agile Scaling
Erlang: Agile ScalingTomáš Holas
 

Mehr von Tomáš Holas (7)

Gwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORMGwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORM
 
Ondra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavOndra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stav
 
Základy GWT
Základy GWTZáklady GWT
Základy GWT
 
CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6
 
Google App Engine - exploiting limitations
Google App Engine - exploiting limitationsGoogle App Engine - exploiting limitations
Google App Engine - exploiting limitations
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Erlang: Agile Scaling
Erlang: Agile ScalingErlang: Agile Scaling
Erlang: Agile Scaling
 

Úvod do OOP

  • 2. Úvod do OOP Tomáš Holas © UNICORN COLLEGE 2010
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. Ř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
  • 8. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. Stavební prvky OOP © UNICORN COLLEGE 2010
  • 17. 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
  • 19. 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
  • 20. Třída a instance © UNICORN COLLEGE 2010
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. Mapování problémové domény © UNICORN COLLEGE 2010