Analýza a modelování dat Přednáška 4
Objektově orientovaný přístup
Strukturovaný přístup starší přístup analýzy modelování dat typický zástupce: E-R model prvky reálného světa zobrazujeme do předem připravených struktur entita, vztah modelování procesů typický zástupce: data flow diagram (DFD) strukturované programování
počátky OOP: Historie OOP 60. léta: programovací jazyk Simula67 rysy OOP rozvoj OOP: 70. léta: výzkumné středisko PARC projekt Dynabook návrh osobního grafického počítače základ pro Apple Macintosh, MS Windows, X- Window
Historie OOP jednotný software (OS) a programovací jazyk: SmallTalk považována za první čistý skutečně objektový jazyk spojoval rysy neprocedurálního (funkcionálního) jazyka Lisp a jazyka SIMULA67
Objektově orientovaný programovací styl Jedna z definic: Objektově orientovaný programovací styl lze označit jako obecný postup analýzy, návrhu a implementace programu, založený na přímém modelování (programovém popisu) objektů z reálného světa aplikace (včetně jejich vazeb a interakce) ve světě počítače s využitím prostředků pro abstrakci a hierarchizaci popisu.
Čisté OOP a smíšený přístup čisté OOP programovací jazyky pouze objektové rysy, neexistence globálních proměnných SmallTalk, Java smíšený přístup klasické jazyky (většina - C, Pascal) rozšířené o rysy OOP (C++, C#, Borland Delphi Pascal s objekty) je možné zapsat program i v klasickém strukturovaném stylu, překladače jej přeloží, mixovat styly
Čisté OOP a smíšený přístup Proč vznikl smíšený přístup? v 80. letech nebyl dostatečně výkonné počítače a překladače pro plnou podporu všech rysů OOP snaha o zpětnou kompatibilitu
OMG Object Management Group www.omg.org sdružení zabývající se standardy objektového modelování UML OCL MDA (Model Driven Architecture)
Objekty Základní datový prvek objekt modeluje nějakou část reálného světa (člověk, zvíře, zařízení), i abstraktní (stav počasí, ) sdružuje (zapouzdřuje) data (tzv. atributy) a funkcionalitu (operace nad daty metody) objekt je zapouzdřením atributů a metod objekty jsou propojené vazbami a vzájemně na sebe působí
Zprávy, metody zpráva zasílaný požadavek, který objekt přijímá např. požadavek na zjištění jména ( vybírání hodnot atributů), zápis jména ( zapisování hodnot do atributů) spouštění operací nad objekty v praxi volání metod metoda může mít parametry protokol objektu seznam všech zpráv, které může objekt přijímat
Polymorfismus mnohotvarost, vícetvarost stejná zpráva může vyvolat různé operace, např. podle typu objektu z pohledu toho, kdo posílá zprávu, je stejná v C++ (Javě) je polymorfismus realizován mechanismem: přetěžování metod metoda se rozlišuje počtem a typem parametrů dynamicky vázanými metodami (virtuálními) rozhodnutí, která metoda se vyvolá, se děje až za běhu programu podle typu objektu, nad kterým je metoda vyvolána
Objektově orientovaná analýza zjednodušeně: spočívá v tvorbě modelových objektů co nejlépe zobrazující prvky reálného světa a hledání vazeb mezi nimi objekt: dvojice (D,F): D - atributy, F - metody snažíme se identifikovat atributy, popíšeme je svým jménem a typem metody popisujeme jménem, chování popisujeme v prvé fázi zpravidla slovně, později třeba konečným automatem
měli bychom pamatovat i na výjimečné a chybové stavy výstupem objektově orientované analýzy je systémový popis pomocí ustálených diagramů nebo již definice objektů zapsaná v programovacím jazyce jedna z prvních knih o OOA: Peter Coad, Edward Yourdon: Object -Oriented Analysis, Yourdon Press, 1991 notace: zavedena právě Codadem: Codadova notace viz další snímek
z Codadovy notace vychází dnes převážně používané UML diagram tříd Objekt 1 atributy metody 1 n Objekt 2 atributy metody více např. Richta, K. - Sochor, J.: Softwarové inženýrství I., skripta ČVUT, 1996
Kolekce objektů v čistém OO přístupu se rozeznává: množina SET objekty jsou neuspořádané, každý objekt se vyskytuje pouze 1x (v jedné instanci) batoh BAG objekty jsou neuspořádané, stejné objekty se mohou vyskytovat v kopiích seznam LIST batoh, kde objekty jsou uspořádané podle určité hodnoty: lze určit první, druhý,, poslední prvek Poznámka: tabulka je také druh kolekce, ale v OOP se nepoužívá
Třída Třída je popis objektu Objekt je instancí třídy
Popis třídy v UML konkrétní třída Název třídy Seznam datových položek objektů této třídy (atributů) Seznam metody objektů této třídy Osoba Jméno Příjmení Adresa Datum_narozeni Vek()
Popis třídy v UML v UML se ještě specifikuje: - - soukromý (privat) atribut (metoda) + - veřejný (public) atribut (metoda) # - chráněný (protected) atribut (metoda) ~ - atribut viditelný v rámci balíku u metod návratový typ: vek(): integer a seznam parametrů
Objekt instance třídy v UML Josef Novák: Osoba Jméno = Josef Příjmení = Novák Adresa = Praha Datum_narozeni = 8.1.1980 Vek()
Kolekce objektů V UML neexistuje standardní symbol byl zakomponován v návrhu verze 0.8, ale později byl odstraněn UML 2.0 dovoluje definici vlastních symbolů lze dodefinovat V OOA se používá symbol: Název kolekce: typ kolekce
Kolekce objektů ZAMĚSTNANCI : SET Osoba Jméno Příjmení Adresa Datum_narozeni Vek()
Dědění definice jedné třídy (subclass - podtřída) využívá definici druhé třídy (superclass nadtřída) podtřída dědí od nadtřídy všechny atributy a metody v OOP lze metody přetížit, tj. předefinovat v podtřídě lze dodefinovat atributy i metody podtřída má vše, co má nadtřída, a může mít něco navíc tam, kde se užívají instance nadtřídy, lze použít i instance podtřídy
Dědění Dospělá Osoba Jméno Příjmení Adresa Datum_narozeni Vek() nadtřída (superclass) Dítě Matka Otec Adresa() poddtřída (subclass)
Skládání objektů datová položka objektu (atribut) může být také objekt otec Dospělá Osoba Jméno Příjmení Adresa Datum_narozeni Vek() Dítě matka Adresa()
Skládání objektů ohodnocená orientovaná hrana (pojmenovaná šipka) znamená instance třídy Dítě mají dvě položky otec, matka, které obsahují instance třídy Dospělá Osoba v UML se využívá pro skládání (agregaci) šipka s prázdným kosočtvercem na konci instance mohou existovat samostatně, nezávisle, mohou být součástí více seskupení
Skládání objektů V UML existuje ještě silnější typ agregace: kompozice Instance nemohou existovat samostantě (složené objekty bez komponent a komponenty bez složených objektů, každá komponenta je součástí pouze jednoho složeného objektu kompozice a agregace často determinují dopředu i implementační detail realizaci komponenty jako objekt nebo ukazatel na objekt
Skládání objektů LIDÉ: SET otec Dospělá Osoba Jméno Příjmení Adresa Datum_narozeni Vek() Dítě matka Adresa()
Skládání objektů LIDÉ: SET otec Dospělá Osoba Jméno Příjmení Adresa Datum_narozeni Vek() Dítě matka Adresa()
vyjadřuje vazby mezi objekty (vztahy) kardinalita: Asociace dospělá osoba má 0 nebo více dětí dítě má jednoho (otec neznámý) nebo dva rodiče šipka u textu určuje směr čtení, nikoliv fakt, kterým směrem asociace platí Dospělá Osoba 1..2 má 0..* Dítě
Asociace x skládání asociace může být někdy nahrazena skládáním tři možnosti realizace 1. dítě obsahuje objekt rodiče Dospělá Osoba otec matka Dítě vhodné, když častěji pracujeme s dětmi a občas se podíváme na rodiče
Asociace x skládání 2. rodiče obsahují kolekci dětí Dospělá Osoba děti { Set } Dítě vhodné, když častěji pracujeme s rodiči a díváme se na všechny jejich děti
Asociace x skládání 3. oba způsoby softwarově náročnější (konzistence) Dospělá Osoba matka otec Dítě děti { Set }
Operace nad kolekcemi operace se zapisují pomocí výrazů tzv. λ - kalkulu výběr (selection) vybere z kolekce podmnožinu na základě podmínky př. výběr osob mladších 20 let z kolekce LIDÉ LIDÉ (λx x vek < 20)
Operace nad kolekcemi sběr (collection) přeměna prvků nějaké kolekce na jinou kolekci výběr všech otců dětí Inst(Dítě) >> (λx x otec) pro všechny instance z kolekce Dítě vytvoř kolekci jejich otců
Operace nad kolekcemi projekce (projection) operace je převzata z relačních databázových systémů (relační algebry) zvláštní případ sběru: transformuje objekty zmenšováním protokolu, tj. vybírá jen některé atributy LIDÉ >> [Příjmení, Datum_narození]
OCL (Object Constraint Language) jazyk pro popis omezení (podmínek) pro objektově orientovaný návrh jako doplněk UML 2.0 specifikován OMG poslední verze 2.4 z roku 2014 věty jazyka OCL mají podobu logických formulí odvozených z λ - kalkulu lze zapsat podmínky pro prvky kolekcí, operaci selekce (výběru), log. výrazy,...
OCL - příklady (z knihy Merunka: Objektové modelování) žádné dvě instance od třídy osoby nesmějí mít stejné jméno Osoba.allInstances -> forall(p1,p2 p1 <> p2 implies p1.jmeno <> p2.jmeno)
OCL - příklady všichni zaměstnanci musí být starší 18 let Zamestnanci.select(p p.vek<=18) -> is Empty()
ONF (objektové normální formy) odvozeny od normálních forem relací 1ONF 2ONF 3ONF Pokročilé techniky návrhu Objektové normální formy
1ONF Třída je v 1ONF, jestliže její objekty neobsahují skupinu opakujících se atributů Převedení do 1ONF vyčlenění atributů do nové třídy zavést vazbu na kolekci této nové třídy
2ONF Třída je ve 2ONF, jestliže její objekty neobsahují atribut nebo skupinu atributů, které by byly sdílené s nějakým jiným objektem Převedení do 2ONF vyčlenění sdílených atributů do nové třídy zavést vazby na kolekci této nové třídy
3ONF Třída je ve 3ONF, jestliže její objekty neobsahují atribut nebo skupinu atributů, které mají samostatný význam nezávislý na objektu Převedení do 3ONF vyčlenění atributů do nové třídy zavést vazbu na kolekci této nové třídy
popisují modelové situace a dávají návod, jakým způsobem je řešit struktura návrhového vzoru název popis problému, který návrhový vzor řeší řešení Návrhové vzory zpravidla diagram a slovní popis řešení důsledky použití vzoru
strukturální vzor angl. adaptor, též wrapper (obálka) problém: Příklady: Adaptér na stávající objekt potřebujeme nasadit jiné rozhraní, které bude měnit protokol objektu (a též např. transformovat data) Adaptér 1 Adaptovaná
Příklady: Adaptér Adaptér jméno příjmení ulice č_domu psč město osoba 1 Osoba jméno příjmení adresa extrahuje z osoby části adresy
strukturální vzor angl. Composite problém: potřebujeme implementovat hierarchické stromové struktury bez předem známé hloubky využití kusovník Příklady: Skladba
Příklady: Skladba Celek List Skladba
Příklady: Stav behaviorální vzor (vyjadřuje chování) angl. State problém: potřebujeme zachytit chování - různé stavy objektu, každý stav má jiné atributy řešení: objekt má datovou položku (atribut) typu abstraktní stav
Příklady: Stav Objekt 1 Abstraktní stav Stav A Stav B
Příklady: Stav Osoba jméno příjmení adresa role 1 Role Student ročník obor Zaměstnanec plat zařazení
Příklady: Stav udržujeme informace o osobách ve škole při změně role (student dostuduje a stane se zaměstnancem) není nutné rušit objekt nesoucí informace o osobě, změní se pouze hodnota položky role