====== 2a - Analýza systému a využití UML ====== - Úvod do analýzy a využití UML - Základní prvky UML - Převod zadání do UML - Převod UML do kódu ---- ====== Úvod do analýzy a využití UML ====== Cílem je vysvětlit jednotlivé body v analýze systému a ukázat, kterou částí se budeme v rámci OMO zabývat. Hlavní rozdělení je: - Byznys analýza (BA) - Softwarová analýza (SA) BA a SA společně tvoří projektovou dokumentaci. == 1. BA == * Byznys cíle (BG) * Definují hlavní cíle projektu * Odpovídají na otázky CO a PROČ * Definuje vyšší management * Byznys požadavky (BRQ) * Mají naplňovat byznys cíle * Jsou detailnější než BG * Odpovídají na otázky CO a PROČ * Definuje nižší management a lidé, kteří jsou odpovědní za jednotlivé oblasti * Celková cena projektu (TCO) * Součástí je i údržba systému * Běžně počítáno na 5 let * Byznys procesy (BPM) * Mapování procesů důležitých pro chod firmy * Slouží k pochopení fungování firmy a zařazením toho, co v rámci projektu řešíme (implementací nebo hledáním software) * Byznys domain model (BDM) * Podobné jako class diagram, ale s důrazem na strukturu analyzovaného problému == 2. SA == * Softwarové požadavky (SR) * Specifikují detailněji BRQ * Odpovídají na otázku JAK * Definuje architekt * **Use casy (UC) - řešíme v rámci sem. proj.** * Jednotlivé scénáře užití * Definují chování systému a popisují jednotlivé funkce * Slouží jako podklad pro vývojáře při implementaci v kombinaci se sekvenčním diagramem a wireframes * Může být specifikováno i textově * //V rámci semestrálního projektu chceme popsat funkcionality, které bude systém umět.// * **Abstraktní doménový model (ADM) - řešíme v rámci sem. proj.** * Class diagram pro databázi * Může obsahovat i návrh jednotlivých funkcionalit z pohledu implementace (je vhodné udělat více diagramů a nesmolit vše do jednoho) * Wireframes * Diagram komponent * Slouží k popsání systému a propojení jednotlivých softwarových komponent mezi sebou (důležité u mikroservis) * Diagram nasazení * Popisuje, jak vypadá nasazení systému na serverech ====== Základní prvky UML (ADM) ====== - Class, interface, enum - Vazby, dědičnost - Násobnost Zkuste najít odpovědi na následující otázky: - Jaké jsou rozdíly mezi značením atributů + nebo -? - Jaké metody je zbytečné v diagramu naznačovat? - Jaký je rozdíl mezi jednosměrnou a obousměrnou vazbou? Zkuste vymyslet výhody i nevýhody. ====== Zpracování textu do ADM modelu ====== Systém pro správu elektronických zařízení v domácnosti * Třída Device Tato třída slouží jako základ pro všechna elektronická zařízení v systému. Obsahuje následující atributy: id (int) - Unikátní identifikátor zařízení. name (string) - Název zařízení. status (enum) - Stav zařízení, který může být jedním z následujících hodnot: ON, OFF, STANDBY. Kromě toho třída Device obsahuje metody pro zapínání (turnOn()) a vypínání (turnOff()) zařízení. * Třída SmartDevice (extends Device) Tato abstraktní třída rozšiřuje třídu Device a přidává atribut ipAddress (string), který reprezentuje IP adresu zařízení. Obsahuje metody pro připojení (connectToNetwork()) a odpojení (disconnectFromNetwork()) zařízení ze sítě. * Třída LightBulb (extends SmartDevice) Tato třída rozšiřuje třídu SmartDevice a má navíc atribut brightness (int), který umožňuje nastavit jas žárovky. Obsahuje metodu pro nastavení jasu (setBrightness(brightness: int)). * Třída Thermostat (extends SmartDevice) Tato třída také rozšiřuje třídu SmartDevice a obsahuje atribut temperature (float), který reprezentuje nastavenou teplotu termostatu. Obsahuje metodu pro nastavení teploty (setTemperature(temperature: float)). * Třída Controller Třída Controller obsahuje atribut devices, který je seznamem elektronických zařízení. Obsahuje metody pro přidání (addDevice(device: Device)) a odebrání (removeDevice(device: Device)) zařízení z tohoto seznamu. Dále obsahuje metodu pro ovládání všech zařízení zároveň (controlAllDevices()). * Rozhraní RemoteControl Rozhraní RemoteControl definuje dvě metody, které musí být implementovány třídami, které toto rozhraní používají. Jedná se o metody pro zapínání (turnOnDevice(device: Device)) a vypínání (turnOffDevice(device: Device)) zařízení. * Třída MobileApp (extends Controller, implements RemoteControl) Třída MobileApp rozšiřuje třídu Controller a implementuje rozhraní RemoteControl. Tím umožňuje ovládat zařízení pomocí mobilní aplikace. Obsahuje metody pro zapínání a vypínání zařízení, stejně jako metodu pro ovládání všech zařízení zároveň. Můžete použít jakýkoliv nástroj pro tvorbu UML: - Enterprise architect 12: https://moodle.fel.cvut.cz/course/view.php?id=2345 - Opensource: https://argouml.en.softonic.com - Lucichard: https://www.lucidchart.com/pages/ - DrawIO: https://draw.io - Umrello UML modeler: https://umbrello.kde.org/ ====== Zpracování návrhu z bodu 3 do kódu ====== * Zkuste si návrh přepsat do kódu. Pokud píšete v Javě, dbejte naming conventions a dalších zásad psaní kódu.