Úvod do softwarového inženýrství IUS 2009/2010 4. přednáška Ing. Radek Kočí, Ph.D. Ing. Bohuslav Křena, Ph.D. Úvod do softwarového inženýrství IUS 2009/2010 p.1/42
Domácí úloha systém správy účtů Provádíme analýzu systému správy účtů banky. Každý účet má jednoznačné číslo, dále je potřeba znát jméno a adresu majitele účtu. Kromě majitele mohou s účtem disponovat i další jím určené osoby. O těch je třeba znát stejné údaje jako o majiteli. Každá z disponujících osob může mít stanoven limit pro výběr z daného účtu. S účty manipuluje úředník banky na základě příkazu osoby oprávněné s účtem disponovat. Na účet lze provádět vklad, z účtu lze provádět výběr a lze převádět částky na jiné účty v téže nebo jiné bance. Musí být k dispozici informace, kdo příkaz zadal a který úředník ho provedl. Systém musí poskytovat prostředky pro správu informací o klientech banky, musí umožňovat vytvářet a rušit účty, zadávat příkazy, importovat příkazy pro převody z jiných bank a naopak exportovat příkazy pro převody na účty v jiných bankách. Systém musí být schopen tisknout měsíční výpisy z účtů a řadu dalších tiskových sestav. Úvod do softwarového inženýrství IUS 2009/2010 p.2/42
Objektově orientované modelování Objektově orientovaný přístup k modelování a vývoji systémů kolekce vzájemně komunikujících objektů soubor objektově orientovaných prostředků (objekty, třídy, UML,... ) a metodologie (např. RUP) vykazuje vyšší stabilitu navrhovaných prvků z pohledu měnících se požadavků Objektový návrh nutně neimplikuje objektovou implementaci! Úvod do softwarového inženýrství IUS 2009/2010 p.3/42
Objektově orientované modelování Objektově orientovaný přístup k modelování a vývoji systémů kolekce vzájemně komunikujících objektů soubor objektově orientovaných prostředků (objekty, třídy, UML,... ) a metodologie (např. RUP) vykazuje vyšší stabilitu navrhovaných prvků z pohledu měnících se požadavků Objektový návrh nutně neimplikuje objektovou implementaci! Vlastnosti objektové orientace Abstrakce (abstraction) Zapouzdření (encapsulation) Polymorfismus (polymorphism) Dědičnost (inheritance) Úvod do softwarového inženýrství IUS 2009/2010 p.3/42
Abstrakce Abstrakce vytvářený systém objektů je abstrakcí řešeného problému (zjednodušený pohled na systém bez ztráty jeho významu) analýza problému klasifikace do abstraktních struktur objekty klasifikace je založena na rozpoznávání podobností v řešené problematice objekt má definovanou zodpovědnost za řešení části problému Úvod do softwarového inženýrství IUS 2009/2010 p.4/42
Zapouzdření int obsah(int x, int y) { return x * y; } Úvod do softwarového inženýrství IUS 2009/2010 p.5/42
Zapouzdření int obsah(int x, int y) { return x * y; } struct Obdelnik { int x, y; } int obsah(struct Obdelnik o) { return o.x * o.y; } Úvod do softwarového inženýrství IUS 2009/2010 p.5/42
Zapouzdření int obsah(int x, int y) { return x * y; } struct Obdelnik { int x, y; } int obsah(struct Obdelnik o) { return o.x * o.y; } struct Obdelnik { int x, y; int obsah() { return x * y; } } Úvod do softwarového inženýrství IUS 2009/2010 p.5/42
Zapouzdření Zapouzdření seskupení souvisejících idejí (data, funkcionalita) do jedné jednotky Důsledky seskupení operací a atributů do jednoho typu objektu stav je dostupný či modifikovatelný pouze prostřednictvím rozhraní omezení externí viditelnosti informací nebo implementačních detailů Úvod do softwarového inženýrství IUS 2009/2010 p.6/42
Atributy objektu Atribut vs. proměnná objektu reprezentují data zapouzdřená v objektu Proměnná objektu implementační pohled Atribut objektu pohled z vyšší úrovně atribut je vlastnost objektu atribut není proměnná (i když je tak většinou realizován) atribut datum (dd/mm/rr) počet sekund od LP 1970 atribut objem součin tří hodnot získání/nastavení atributu operace Úvod do softwarového inženýrství IUS 2009/2010 p.7/42
Třídy objektů Třídní přístup nalezené objekty jsou dále klasifikovány do tříd třída je generická definice (šablona) pro množinu podobných objektů množina objektů mající stejné chování a stejnou množinu atributů objekt (konkrétní jedinec) je instancí třídy Třídně založené jazyky (Class Based Languages) Smalltalk,... Java, C++, C#,... (hybridní primitivní/strukturované datové typy) Úvod do softwarového inženýrství IUS 2009/2010 p.8/42
Příklad abstrakce, klasifikace do tříd zapouzdření: atributy, chování (operace) Úvod do softwarového inženýrství IUS 2009/2010 p.9/42
Stav a identita objektu Stav objektu stavová množina je reprezentována množinami hodnot atributů objektu aktuální hodnoty všech atributů představují aktuální stav v každém okamžiku je objekt v definovatelném stavu Identita objektu každý objekt je jedinečný bez ohledu na stav a třídu Shodnost objektů shodnost je vázána na stavy objektů objekty, které nejsou identické, mohou být shodné Úvod do softwarového inženýrství IUS 2009/2010 p.10/42
Identita objektu Java Smalltalk výsledek testu shodnost cas1.equals(cas2) cas1 = cas2 true cas2.equals(cas3) cas2 = cas3 true identita cas1 == cas2 cas1 == cas2 true cas2 == cas3 cas2 == cas3 false Úvod do softwarového inženýrství IUS 2009/2010 p.11/42
Rozhraní objektu Operace vs. metoda operace reprezentuje abstraktní pohled na chování objektu metoda implementuje operaci Rozhraní objektu množina operací, které určují chování třídy a její vztah k jiným třídám setfont(font) pouze definuje, co objekt umí (nabízí), nedefinuje jak způsob provedení operace závisí na její implementaci (metodě) setfont(font f) { super.setfont(f); columnwidth = 0; } Úvod do softwarového inženýrství IUS 2009/2010 p.12/42
Polymorfismus Znalost třídy, jak provést určitou operaci, která může být obecně společná pro více tříd stejné rozhraní může být implementováno různými objekty stejná operace s jedním názvem může mít více implementací různé implementace operace ze stejného rozhraní by měly zachovávat stejnou sémantiku Ukázka: operace setfont(font) metoda v třídě JTextField setfont(font f) { } super.setfont(f); columnwidth = 0; metoda v třídě JComponent setfont(font font) { } Font oldfont = getfont(); super.setfont(font);... Úvod do softwarového inženýrství IUS 2009/2010 p.13/42
Komunikace objektů Objekty spolu komunikují zasíláním zpráv zpráva obsahuje identifikátor příjemce název operace argumenty příjemce chápe zprávu jako požadavek na provedení služby (operace) zpráva se obslouží, tj. vyhledá se příslušná metoda (viz polymorfismus) a vykoná se po ukončení obsluhy může metoda vracet výsledek Úvod do softwarového inženýrství IUS 2009/2010 p.14/42
Časná a pozdní vazba Časná vazba implementace operace (metoda) je vybrána v době kompilace Pozdní vazba (dynamická vazba) je technika dosažení polymorfismu implementace operace (metoda) se vybere za běhu podle skutečně dosazeného objektu Úvod do softwarového inženýrství IUS 2009/2010 p.15/42
Dědičnost Dědičnost vyjadřuje hierarchický vztah mezi objekty definuje a vytváří objekty na základě již existujících objektů možnost sdílení chování bez nutnosti reimplementace možnost rozšíření chování organizuje a usnadňuje polymorfismus a zapouzdření objektů Úvod do softwarového inženýrství IUS 2009/2010 p.16/42
Dědičnost tříd Dědičnost tříd vztah generalizace/specializace mezi třídami odvozená třída sdílí atributy a chování obecnější třídy odvozená třída může přidávat a modifikovat atributy a chování color area() Polygon Triangle Rectangle Hexagon area() area() Úvod do softwarového inženýrství IUS 2009/2010 p.17/42
Dědičnost tříd Pojmy přepisování a přetěžování přepisování (overriding) je změna definice metody zadané v třídě T v některé z podřízených tříd přetěžování (overloading) je technika vícenásobné definice operace v jedné třídě (nesouvisí s dědičností) Přetěžování metod (Java): prevedna(ucet u, int castka); prevedna(ucet u); Smalltalk nezná přetěžování: preved: castka na: u. prevedna: u. Úvod do softwarového inženýrství IUS 2009/2010 p.18/42
Vícenásobná dědičnost Vícenásobná dědičnost komplikuje návrh (čitelnost) problém nejednoznačnosti dá se obejít (skládání objektů) existují případy, kdy má vícenásobná dědičnost význam Úvod do softwarového inženýrství IUS 2009/2010 p.19/42
Vícenásobná dědičnost Vícenásobná dědičnost ukázka nesprávně použité vícenásobné dědičnosti a její řešení pomocí skládání Kolo Motor Auto Auto Kolo Motor Úvod do softwarového inženýrství IUS 2009/2010 p.20/42
Prototypově orientované jazyky Představují takový styl OO přístupu, který pracuje pouze s objekty nové objekty se vytvářejí klonováním již existujících objektů vždy existuje alespoň jeden počáteční objekt (prototyp) Dědičnost (delegování) dědičnost objektů je vyjádřena delegováním objekt může určit množinu jiných objektů, na které deleguje zprávy, kterým sám nerozumí sdílení chování s jinými objekty více "nadřazených" objektů problém nejednoznačnosti priorita "nadřazených" objektů Jazyky Self, JavaScript,... Úvod do softwarového inženýrství IUS 2009/2010 p.21/42
Typy, kontrola typů Význam typování určit sémantický význam elementů (hodnoty v paměti) pokud má pamět ová hodnota přiřazený typ, můžeme s ní pracovat na vyšší úrovni víme jaké operace je možné provést, můžeme provádět kontrolu typové konzistence atp. Typ v objektově orientovaném prostředí typ je definován rozhraním (třídou) objekt je typu A, pokud implementuje rozhraní A objekt může mít více typů poznámka: každý jazyk má svůj specifický pohled na typování Úvod do softwarového inženýrství IUS 2009/2010 p.22/42
Typy, kontrola typů Staticky typované jazyky k typové kontrole dochází v době kompilace jazyky C++, Java,... Dynamicky typované jazyky k typové kontrole dochází v době běhu programu jazyky Smalltalk, Self, Python, Lisp... Úvod do softwarového inženýrství IUS 2009/2010 p.23/42
Typy, kontrola typů I. Ukázka chování staticky a dynamicky typovaných systémů var x; // (1) x := 5; // (2) x := "hi"; // (3) staticky typované: řádek č. 3 je ilegální dynamicky typované: řádek č. 3 je OK (není požadovaná typová konzistence pro proměnnou x) II. Ukázka chování staticky a dynamicky typovaných systémů var x; // (1) x := 5; // (2) 5 / "hi"; // (3) staticky typované: řádek č. 3 je ilegální dynamicky typované: řádek č. 3 vyvolá chybu za běhu programu Úvod do softwarového inženýrství IUS 2009/2010 p.24/42
Typy, kontrola typů Dynamická kontrola probíhá u všech jazyků jako dynamicky typované se označují ty, které nemají statickou kontrolu některé staticky typované jazyky (C + +, Java) umožňují dynamické přetypování, čímž částečně obcházejí statickou typovou kontrolu Úvod do softwarového inženýrství IUS 2009/2010 p.25/42
Typy, kontrola typů Silně a slabě typované jazyky tyto pojmy dostávaly různé významy bývá obtížné porozumět, co konkrétní autor míní užitím těchto pojmů Silně a slabě typované jazyky (interpretace) silně typované silná omezení na kombinace typů, zamezení kompilace či běhu kódu, který může obsahovat nekorektní data (nekompatibilní typy) slabě typované slabá omezení na kombinace typů (obsahují např. implicitní přetypování) i slabě typovaný jazyk může být bezpečný (type safe) Příklady Haskell > Java > Pascal > C 3 + 27 30, 327, nemožné Úvod do softwarového inženýrství IUS 2009/2010 p.26/42
Objektově orientované modelování v UML UML Unified Modelling Language základní modelovací jazyk metodiky RUP jednotlivé modely si představíme v příslušných částech metodiky RUP základní model diagram tříd Úvod do softwarového inženýrství IUS 2009/2010 p.27/42
Diagram tříd Diagram tříd zobrazuje třídy a statické vztahy mezi nimi Vztahy mezi třídami asociace (association) závislost (dependency) zobecnění (generalization) realizace (realization) Úvod do softwarového inženýrství IUS 2009/2010 p.28/42
Asociace Asociace slouží k zachycení vztahů a informací z několika různých perspektiv. Úvod do softwarového inženýrství IUS 2009/2010 p.29/42
Vlastnosti asociace objekt má ve vztahu svou roli asociace má své násobnosti (mohutnosti) násobnost je odrazem cíle modelu (bez této znalosti nelze určit špatnou/dobrou násobnost) asociace má svůj název název může být sloveso nebo podstatné jméno Zaměstnání; je zaměstnán v ; zaměstnává v OO návrhu dáváme přednost podstatnému jménu vyjadřuje proměnlivý vztah mezi objekty (instancemi tříd) každé spojení váže instanci jedné třídy s instancí druhé třídy počet spojení se v čase může měnit v OO návrhu lze asociaci povýšit na třídu (asociační třída) Úvod do softwarového inženýrství IUS 2009/2010 p.30/42
Asociační třída Zamestnání období Osoba 0..* zamestnanec 0..1 zamestnavatel Spolecnost Osoba 1 zamestnanec Zamestnání 0..1 období 0..* 1 zamestnavatel Spolecnost Úvod do softwarového inženýrství IUS 2009/2010 p.31/42
Asociace vyššího stupně binární asociace (vztah dvou tříd, resp. jejich instancí) N-ární asociace (vztah více tříd, resp. jejich instancí) jsou méně časté, většinou se dají převést na binární asociace, pokud ne, bývá nutné povýšit asociaci na třídu. Úvod do softwarového inženýrství IUS 2009/2010 p.32/42
Asociace celek/část Agregace Agregace (Seskupení) celek je seskupen z více částí celek = agregační (seskupený) objekt část celku = konstituční (tvořící) objekt Vlastnosti agregace seskupený objekt může existovat bez svých konstitučních objektů konstituent (konstituční objekt) může být součástí více seskupení implicitní násobnost se nedá předpokládat asociace agregace nemívá název (vyjadřuje vztah má) agregace bývají homeometrické (tj. konstituenti patří do téže třídy) Úvod do softwarového inženýrství IUS 2009/2010 p.33/42
Asociace celek/část Agregace Osoba 0..* Zamestnání 0..1 Spolecnost Spolecnost 0..1 0..* zamestnanec Osoba Úvod do softwarového inženýrství IUS 2009/2010 p.34/42
Asociace celek/část Kompozice Kompozice (Složení) celek je složen z více částí celek = kompozitní (složený) objekt část celku = komponentní (složkový) objekt Vlastnosti kompozice složený objekt neexistuje bez svých komponent komponenta (komponentní objekt) může být součástí pouze jedné kompozice implicitní násobnost každé složky je 1 asociace kompozice nemívá název kompozice bývají heterometrické (tj. komponenty patří do různých tříd) Úvod do softwarového inženýrství IUS 2009/2010 p.35/42
Asociace celek/část Kompozice Circle 1 pointobj Point Polygon 3..* pointobj Úvod do softwarového inženýrství IUS 2009/2010 p.36/42
Diagram tříd Závislost Závislost vyjadřuje jiné různé vztahy mezi objekty či třídami typ závislosti se označuje pomocí stereotypů Nejběžnější typ stereotypu používání «use» závislost mezi třídami (nejběžnější) závislost bez stereotypu se považuje za používání A (klient) B (dodavatel) operace třídy A potřebuje argument třídy B operace třídy A vrací hodnotu třídy B operace třídy A používá objekt třídy B, ale ne jako atribut Úvod do softwarového inženýrství IUS 2009/2010 p.37/42
Diagram tříd Realizace Realizace vztah mezi třídou a rozhraním třída implementuje všechny operace (metody) z daného rozhraní objekt používající/asociující rozhraní pak umí používat i jeho implementační třídy umožňuje flexibilnější modelování omezuje počet vazeb mezi třídami Úvod do softwarového inženýrství IUS 2009/2010 p.38/42
Diagram tříd Realizace Alternativní zobrazení Úvod do softwarového inženýrství IUS 2009/2010 p.39/42
Studijní koutek Ubytovací stipendia Komu lze přiznat bc/mgr/dr studium v prezenční formě nebyla překročena standardní doba studia místo trvalého pobytu není okres Brno-město ani Brno-venkov Výše a výplata stipendia dáno rozhodnutím rektora (poměr objemu finančních prostředků a počtu studentů, kterým bylo ubytovací stipendium přiznáno) rozhodnutí se vydává a ubytovací stipendium vyplácí ve čtyřměsíčních intervalech květen až srpen 2009: 600 Kč (rozhodnutí rektora č. 12/2009) Zdroje Stipendijní řád VUT Směrnice rektora č. 16/2008 http://stipendium.vutbr.cz Úvod do softwarového inženýrství IUS 2009/2010 p.40/42
Studijní koutek Poplatek za studium 58 odst. 3 Zákona č. 111/1998 O Vysokých školách (...) Studuje-li student ve studijním programu déle, než je standardní doba studia zvětšená o jeden rok v bakalářském nebo magisterském studijním programu, stanoví mu veřejná vysoká škola poplatek za studium, který činí za každých dalších započatých šest měsíců studia nejméně jedenapůlnásobek základu; do doby studia se započtou též doby všech předchozích studií v bakalářských a magisterských studijních programech, které byly ukončeny jinak než řádně podle 45 odst. 3 nebo 46 odst. 3, přičemž období, ve kterém student studoval v takovýchto studijních programech a v aktuálním studijním programu souběžně, se do doby studia započítávají pouze jednou. Článek 14 odst. 2 Statutu VUT Výše poplatků podle odstavce 1 za každých započatých 6 měsíců studia činí: a) trojnásobek základu v prvním roce, b) šestinásobek základu ve druhém roce, c) dvanáctinásobek základu ve třetím a dalších rocích, po zaokrouhlení nahoru na celé desetikoruny. Úvod do softwarového inženýrství IUS 2009/2010 p.41/42
Studijní koutek Poplatek za studium Výše základu vyhlášeného MŠMT pro akademický rok 2009/10 2.941 Kč Výše poplatku za každých započatých 6 měsíců studia po dobu 12 měsíců pro akademický rok 2009/10: 8.830 Kč pokud studium přesahuje standardní dobu + 1 rok 17.650 Kč pokud studium přesahuje standardní dobu + 2 roky 35.300 Kč pokud studium přesahuje standardní dobu + 3 a více let Poplatek za další studium ( 58 odst. 4 zákona O Vysokých školách, čl. 14 odst. 4 Statutu VUT) 2.941 Kč viz Rozhodnutí rektora č. 3/2009 Úvod do softwarového inženýrství IUS 2009/2010 p.42/42