====== AP14 Objektově-orientovaná analýza a návrh ====== (nástroje UML, modely různých aspektů systémů v UML, vysvětlení a aplikace empirických zákonů) ===== Objektově orientovaná analýza ===== Objektově orientovaná analýza je přístup k softwarovému inženýrství, který modeluje systém jako skupinu vzájemně interagujících objektů. Přínosy objektově orientované analýzy. * Zvládnutí náročnějších problémových oblastí. * Zlepšení interakce mezi analytikem a expertem v dané oblasti. * Zvýšení vnitřní konzistence analytických výsledků. * Explicitní vyjádření společného * Vytvoření modifikovatelných specifikací. * Opětné použití analytických výsledků * Konzistentní nosná reprezentace pro analýzu a návrh. Tvrdí se o ní, že je "přirozenější" proti strukturované analýze * Během vývoje systému mají funkce a procesy tendenci se měnit, zatímco objekty mají tendenci zůstávat beze změn. * ...vlivem toho může model podle strukturované analýzy časem přestat platit, zatímco objektově orientovaný model nezestárne * ...proto se tvrdí, že objektově-orientované systémy jsou lépe udržovatelné. ==== Principy zvládnutí složitosti ==== * **Abstrakce** Abstrakce vymezuje podstatné znaky objektu, které jej odlišují od ostatních druhů objektů, a tak poskytuje ostře definované konceptuální hranice relativně podle perspektivy pozorovatele .((skripta, kapitola OOA, strana 7)) * **Zapouzdření** Princip použitý při vývoji celé programové struktury. Spočívá v tom, že každá komponenta programu by měla zapouzdřit a ukrýt jediné návrhové rozhodnutí. Rozhraní každého modulu je definováno tak, aby odhalilo co nejméně o vnitřním dění v modulu.((skripta, kapitola OOA, strana 8)) * **Dědičnost** Mechanismus, který vyjadřuje podobnost mezi třídami, zjednodušuje definici třídy pomocí dříve definované třídy. Vyjadřuje generalizaci a specializaci tím, že v hierarchii tříd explicitně určuje společné atributy a služby.((skripta, kapitola OOA, strana 14)) * **Sdružování** * **Komunikace pomocí zpráv** * **Postupné metody organizace** * **Měřítko** * **Kategorie chování** ===== Coad & Yourdon: 5vrstvý model ==== {{:home:prog:uml_coad.jpg|}}((skripta, kapitola OOA, strana 22)) * vrstva subjektů * vrstva Tříd & Objektů * vrstva struktury * vrstva atributů * vrstva služeb Hlavní aktivity: - Nalezení Tříd & Objektů - Identifikace struktur - Identifikace subjektů - Definice atributů - Definice služeb Nejedná se o sekvenční kroky. Rozpracované aktivity lze podle potřeby střídat v různém pořadí. ===== UML ===== UML (Unified modeling language) je standardní jazyk pro zobrazení, specifikaci, konstrukci a dokumentaci artefaktů systémů s převážně softwarovou charakteristikou. Může být použit při všech procesech životního cyklu vývoje a pro různé technologie implementace. UML kombinuje to nejlepší z * konceptů datového modelování. * modelování výrobních procesů * modelování objektů * modelování komponent UML umožňuje: * zobrazovat hranice systému a jeho hlavních užití pomocí případů užití a účastníků. * ilustrovat realizaci případů užití pomocí diagramů interakcí. * reprezentovat statickou strukturu systému pomocí diagramu tříd. * modelovat chování objektů, pomocí stavově přechodových diagramů * odhalit fyzickou implementační strukturu, pomocí diagramů zapojení komponent. * rozšířit funkcionalitu pomocí stereotypů. Vývoj UML začal v roce 1994, kdy Grady Booch a Jim Rumbaugh začali ve firmě Rational Software (nyní součást firmy IBM) spojovat své metodiky – Booch a OMT (Object Modeling Technique). Na konci roku 1995 do firmy Rational Software vstoupil Ivar Jacobson se svojí metodologii OOSE (Object-Oriented Software Engineering). Výsledkem jejich práce byl návrh UML (verze 0.9) a metodika RUP (Rational Unified Process). Standardizační organizace OMG v roce 1997 přijala jako standard UML verze 1.1 ve které byly začleněny prvky z dalších metodik (označení UML 1.0 se používá pro návrh, který poslala firma Rational Rose standardizační komisi). Nejpoužívanější UML diagramy: ==== Diagram případů užití ==== Diagram případů užití (Use Case Diagram) předkládá vnější pohled na systém. Diagramy případů užití jsou tvořeny, aby znázornily vztahy mezi účastníky a případy užití. {{:home:prog:uml_use_case.jpg|}} Při tvorbě případů užití můžou být nalezeny další vztahy. * vztah <> (užívá) ukazuje chování, které je společné dvěma a více případům užití, části nemůžou bez používané třídy fungovat . * vztah <> (rozšiřuje) ukazuje volitelné chování. {{:home:prog:uml_use_case2.jpg|}} Realizace případů užití se popisuje pomocí interakčních diagramů. * diagramy posloupností. * diagramy spolupráce. ==== Diagram posloupností ==== Diagram posloupnosti (Sequence diagram) ukazuje interakci mezi objekty uspořádanou do časové posloupnosti. {{:home:prog:uml_sequence.jpg|}} ==== Diagram spolupráce ==== Diagram spolupráce (Collaboration diagram) ukazuje interakce objektů a jejich propojení mezi sebou. {{:home:prog:uml_collaboration.jpg|}} ==== Diagram tříd ==== Diagram tříd (Class diagram) ukazuje existenci tříd a jejich vztahů v logickém pohledu na systém. UML modelovací prvky používané v diagramech tříd: * třídy, jejich struktura a chování * asociace, agregace, závislosti a vztahy dědění. * příznaky (ukazatele) násobnosti a navigace. * jména rolí === Třída === Třída je kolekce objektů se shodnou strukturou, shodným chováním, shodnými vztahy a shodnou sémantikou. Třída se znázorňuje obdélníkem, který obsahuje tři části : * jméno * atributy * metody {{:home:prog:uml_classs.jpg|}} Třídy a jejich operace mohou být nalezeny po přezkoumání diagramů interakcí (posloupnosti, spolupráce). {{:home:prog:use_class5.jpg|}} Atributy tříd, kterými je reprezentována struktura třídy, mohou být nalezeny přezkoumáním definice třídy, požadavků na problémy a použitím znalostí z předmětné oblasti. {{:home:prog:use_class4.jpg|}} === Vztahy mezi třídami === Vztahy poskytující cestu pro komunikaci mezi objekty bývají odhaleny po přezkoumání diagramů interakcí -- pokud dva objekty spolu hovoří, musí existovat komunikační cesta. {{:home:prog:use_class6.jpg|}} Vztahy: * **Asociace** -- obousměrné propojení mezi třídami. Znázorňuje se jako čára propojující vztažné třídy. * **Agregace** -- je silnější forma vztahu, jedná se o vztah mezi celkem a jeho částmi. Znázorňuje se jako čára propojující vztažené třídy, značka diamant je umístěna u třídy, která představuje celek. Agregace se značí prázdným diamantem, její silnější forma -- **kompozice** -- při které celek nemá bez částí smysl, se značí vyplněným diamantem. (Dle všeho je tedy notace ve slidech uvedena dle starší normy.) * **Závislost** -- je slabší forma vztahu mezi klientem a poskytovatelem, kde klient nemá žádnou sémantickou znalost o poskytovateli. Je ukázána jako čárkovaná čára se šipkou ukazující od klienta k poskytovateli. * **Dědičnost** -- je vztah mezi nadtřídou a jejími podtřídami. Existují dvě cesty jak ji nalézt -- zobecnění a specializace. Dědičnost se znázorňuje šipkou směrem od podtřídy k nadtřídě. Společné atributy a vztahy jsou zobrazeny na nejvyšší úrovni hierarchie. {{:home:prog:use_class.jpg|}} * **Násobnost** -- definuje, kolik objektů se účastní vztahů. Násobnost je počet instancí jedné třídy vztažené k //jedné// instanci druhé třídy. Pro každou asociaci a agregaci musí být nalezeny dvě násobnosti, pro každý konec vztahu. {{:home:prog:use_class2.jpg|}} ==== Stavově přechodový diagram ==== Stavově přechodový diagram se tvoří pro objekty, které mají významné dynamické chování, ukazuje: * životní historii dané třídy, * události, které způsobují přechod z jednoho stavu do druhého * akce, které jsou výsledkem změny stavu {{:home:prog:uml_status.jpg|}} ==== Diagram nasazení ==== Diagram nasazení ukazuje konfiguraci procesních prvků použitých během běhu a softwarové procesy, které jsou na ně umístěny. V těchto diagramech se velmi často používají stereotypy, a to tak, že mají přiřazen vlastní vizuální symbol -- tedy např. tiskárna nevypadá jako krychle, ale opravdu nám připomíná tiskárnu, nebo server opravdu může vypadat jako schematické znázornění serveru. Pak jsou tyto diagramy přístupné i pro čtenáře, kteří naprosto neznají UML. {{:home:prog:uml_deploy.jpg|}} ==== Diagram komponent ==== Diagram komponent znázorňuje uspořádání a závislosti mezi softwarovými komponentami. Komponentou mohou být: * komponenty zdrojového kódu (source code components) * binární komponenty (binary code components) * spustitelné komponenty (executable components) {{:home:prog:uml_component.jpg|}} ==== Rozšiřování UML ==== UML je možné rozšiřovat dalšími prvky dle uvážení uživatele pomocí stereotypů. Stereotyp je vlastně nějaké rozšíření jazyka UML, může být prakticky libovolné, jde jen o to, aby bylo pro čtenáře pochopitelné. Příklady stereotypů: * stereotyp tříd: hranice, entity, utility, výjimky * stereotyp dědičnosti: <> a <> * stereotyp komponent: subsystém * stereotyp nasazení: obrázky procesních prvků ===== Empirické zákony ===== ==== Lehmanovy zákony ==== * **Zákon trvalé proměny** Systém používaný v reálném prostředí se neustále mění, dokud není levnější systém restrukturalizovat nebo nahradit zcela novou verzí. * **Zákon rostoucí složitosti** Při evolučních změnách je program stále méně strukturovaný a vzrůstá jeho vnitřní složitost. Odstranění složitosti vyžaduje dodatečné úsilí. * **Zákon vývoje programu** Rychlost globálních změn atributů systému se může jevit v omezeném časovém intervalu jako náhodná. V dlouhodobém pohledu se však jedná o seberegulující proces, který lze statisticky sledovat a předvídat. * **Zákon invariantní spotřeby práce** Celkový pokrok při vývoji projektů je statisticky invariantní. Jinak řečeno, rychlost vývoje programu je přibližně konstantní a nekoreluje s vynaloženými prostředky * **Zákon omezené velikosti přírůstku** Systém určuje přípustnou velikost přírůstku v nových verzích. Pokud je limita překročena, objeví se závažné problémy týkající se kvality a použitelnosti systému. ==== Brooksův zákon ==== **Přidání řešitelské kapacity u opožděného projektu může zvětšit jeho zpoždění** Náklady na začlenění nového pracovníka do týmu jsou zpravidla větší než jeho přínos. ====== Předměty ====== * [[http://is.muni.cz/predmety/predmet.pl?fakulta=1433;obdobi=3724;kod=PB007|FI:PB007 ]] Analýza a návrh systémů(podzim), [[http://is.muni.cz/lide/?fakulta=1433;obdobi=3724;kod=PB007;uco=3444|RNDr. Jaroslav Ráček, Ph.D.]],[[http://is.muni.cz/lide/?fakulta=1433;obdobi=3724;kod=PB007;uco=3636|RNDr. Radek Ošlejšek, Ph.D.]] ====== Použitá literatura ====== * RNDr. Jaroslav Ráček, [[https://is.muni.cz/auth/dok/rfmgr.pl?fakulta=1433;obdobi=3523;kod=PB007;furl=%2Fel%2F1433%2Fpodzim2006%2FPB007%2Fum%2F2716264%2F;info= |Skripta k předmětu]] ====== Kam dál ====== * UML a objektový návrh je probíráno více v předmětu - [[http://is.muni.cz/predmety/predmet.pl?kod=PA103;fakulta=1433;obdobi=|FI:PA103]] Objektové metody návrhu informačních systémů * [[http://mpavus.wz.cz/uml/uml-uvod-1.php|UML : co je UML]] Web o návrhu systému. * [[http://www.visual-paradigm.com/|Visual paradigm]] Dle mého nejlepší a nejdostupnější nástroj pro UML modelování. ====== Jedna k dobru ====== Každý kdo někdy prošel vývojem jakéhokoli produktu narazil občas, nebo spíš skoro vždy na to že to není úplně totéž jako se nám snaží vtlouct do hlavy ve škole. Asi mi dáte za pravdu že to s projektem vypadá spíš nějak takhle... {{:home:prog:it_project.jpg|}} ====== Vypracuje ====== Winsik - ICQ: 215787520 mail: winsik.cz(zavinac)gmail.com Otázku jsem připravil podle sebe a jsem si vědom toho, že někomu může něco chybět, nebo že se někomu nebude líbit struktura nebo grafické zpracování. Proto pokud chcete můžete samozřejmě sami otázku upravit, doplnit co podle vás chybí, kontaktovat mne, a třeba připomínku vyjádřit v diskuzi, budu jen rád. ~~DISCUSSION~~