====== 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.