5. týždeň

Konceptuálny návrh

Návrh objektov a akcií v softvérovom systéme.

Ciele

  1. Porozumieť konceptuálnemu návrhu systému.
  2. Naučiť sa identifikovať koncepty, ich vlastnosti a vzťahy medzi nimi v doméne navrhovaného systému.
  3. Naučiť sa používať UML diagram tried na konceptuálne modelovanie.

Úvod

Po tom, ako pochopíme, kto a načo bude používať náš systém, je potrebné analyzovať, aká bude jeho štruktúra. Vysokoúrovňový popis aplikácie z pohľadu používateľa sa nazýva konceptuálny model aplikácie (angl. conceptual model). Konceptuálny model, ktorý opisuje objekty, s ktorými sa používateľ môže v aplikácii stretnúť, ich vlastností, vzťahy a operácie, ktoré sa s nimi dajú vykonať.

Na tomto cvičení sa pozrieme na to, ako je možné opísať konceptuálny model pomocou analýzy objektov a akcií, a tiež ako je možné na jeho znázornenie použiť diagram tried z UML.

Postup

Krok 1: Konceptuálny model

Konceptuálny model slúži na to, aby návrhári systému si ujasnili čo všetko má obsahovať a tiež aby sformulovali, ako by chceli, aby systému porozumeli použivatelia.

Podľa článku Johnsona a Hendersona konceptuálny model špecifikuje a opisuje:

  • základné návrhové metafory a analógie použité v systéme (priečinky v súborovom systéme prezentované ako priečinky pre papierové dokumenty);
  • koncepty, prezentované používateľom, vrátane objektov domény, ktoré používatelia vytvárajú a pracujú s nimi (literatúru z knižnice si je možné požičať. Môže to byť kniha alebo magazín);
  • vlastnosti a vzťahy medzi konceptami (objektmi) systému (kniha je len jedna položka, magazíny majú viacero vydaní).

Poznámka

Konceptuálny model by mal byť natoľko jednoduchý, ako je to možné, a zároveň by mal poskytovať požadovanú funkcionalitu. Pri návrhu konceptuálneho modelu sa riaďte pravidlom: „menej je viac“.

Jedným zo spôsobov, ako vytvoriť konceptuálny model, je analýza objektov a operácií. Pri nej identifikujeme objekty, ktoré budú viditeľné v aplikácii, ich vlastnosti a operácie, ktoré sa s nimi dajú robiť.

V prípade redakčného systému z minulého cvičenia môžeme identifikovať minimálne tieto objekty:

  • samotný blog,
  • článok na blogu,
  • značka (tag) alebo kategória priradená článku,
  • komentár.

Ich vlastnosti a akcie sú opísané v tabuľke nižšie. Podčiarknuté vlastnosti označujú vzťahy s inými objektmi systému. Niektoré informácie a akcie v modeli sú prístupné iba pre autora, niektoré pre aj pre čitateľov.

Príklad: Objekty a akcie redakčného systému

Objekty Atribúty Akcie
Blog názov, meno autora, články, URL pozrieť najnovšie články, vyhľadať článok, pozrieť zoznam konceptov, upraviť atribúty
Článok nadpis, text, stav (publikovaný, koncept), dátum publikovania, značky, komentáre vytvoriť nový, upraviť, pridať značky, publikovať, odstrániť
Značka názov, články vytvoriť, zobraziť články
Komentár článok, text, meno, email, čas pridania pridať komentár k článku, odpovedať na komentár, zmazať komentár

Pre zostavenie tohto modelu bolo nevyhnutné urobiť viacero rozhodnutí o tom, ako budúci systém bude fungovať. Napríklad je tu určené, že články môžu mať priradených viacero značiek namiesto zaradenia do práve jednej kategórie.

Úloha 1.1

Doplňte do modelu objekty, atribúty alebo akcie potrebné pre podporu prípadov použitia, ktoré ste navrhli na minulom cvičení.

Poznámka

Riaďte sa pravidlom: „Ak sa to nenachádza v konceptuálnom modeli, systém nebude vyžadovať, aby mal o tom používateľ vedomosť“.

Krok 2: UML diagramy tried

Pre grafické znázornenie konceptuálnych modelov môžeme použiť diagramy tried zo štandardu UML. Diagram tried je zápis, ktorý je možné používať na rôzne účely: od grafického vyjadrenia elementov implementácie systému v nejakom programovacom jazyku, až po opis objektov reálneho sveta. V našom prípade budeme znázorňovať koncepty, ktoré budú prítomné v navrhovanej aplikácii.

Poznámka

Trieda je označenie pre všetky objekty s rovnakými vlastnosťami (atribútmi) a rovnakými akciami. Každý konkrétny článok je objekt, pričom všetky tieto objekty patria do triedy Článok.

Každá trieda v diagrame tried je znázornená ako obdĺžnik, ktorý môže byť rozdelený na tri časti: názov, vlastnosti, operácie. Vzťahy medzi triedami sú znázornené pomocou rôznych typov čiar, ktoré majú rôzny význam.

Grafické znázornenie triedy Blog
Obr. 1: Grafické znázornenie triedy Blog

Vzťahy medzi triedami je užitočnejšie zobrazovať pomocou čiar. Všimnite si, že vlastnosť články v triede Blog je teraz vynechaná. Namiesto nej je čiara označujúca asociáciu medzi triedami Blog a Článok.

Konceptuálny model redakčného systému znázornený pomocou diagramu tried UML
Obr. 2: Konceptuálny model redakčného systému znázornený pomocou diagramu tried UML

Oproti textovej verzii, tento diagram obsahuje aj informácie navyše — početnosť vzťahov medzi triedami. Početnosť označuje, koľko objektov danej triedy sa môže vyskytovať vo vzťahu. Napríklad v blogu môže byť ľubovoľný počet článkov, ale článok sa nachádza práve v jednom blogu. Početnosť sa v UML označuje pomocou intervalov takto:

Označenie Význam
0..1 žiaden alebo jeden
0..* ľubovoľný počet (0 až nekonečno)
1 práve jeden
1..* aspoň jeden

Úloha 2.1

Nakreslite samostatne uvedený konceptuálny model redakčného systému.

V rámci tohoto cvičenia budeme používať webový nástroj diagrams.net (predchádzajúci názov draw.io). V palete tvarov naľavo nájdite a rozbaľte sekciu UML:

Paleta elementov UML diagramu
Obr. 3: Paleta elementov UML diagramu

Tu nájdete všetky potrebné elementy, predovšetkým triedu:

Paleta elementov UML diagramu
Obr. 4: Paleta elementov UML diagramu

Stačí kliknúť na element v palete a on sa pridá na plátno, kde ho môžete upravovať. Ďalší element, ktorý budete potrebovať, je asociácia — vzťah medzi dvoma triedami. Tento element tiež nájdete v palete ako „Association 1“:

Paleta elementov UML diagramu
Obr. 5: Paleta elementov UML diagramu

Úloha 2.2

Doplňte diagram o objekty a vlastností, ktoré ste navrhovali predchádzajúcom kroku.

Krok 3: Vzťahy medzi triedami

Asociácie medzi triedami môžu okrem početnosti mať uvedené aj názvy vzťahu. Okrem toho konce čiary môžu mať špeciálne značky, napríklad šípku, ktorá určuje typ vzťahu, alebo diamant, označujúci agregáciu. Agregácia označuje, že nejaký objekt je súčasťou iného objektu. Napríklad v našom prípade článok je súčasťou blogu (alebo blog obsahuje články). Podobný vzťah je medzi článkom a komentárom. Diamant sa v tomto prípade kreslí pri tej triede, ktorá predstavuje celok:

Konceptuálny model s vyznačením vzťahu agregácie
Obr. 6: Konceptuálny model s vyznačením vzťahu agregácie

Podobným vzťahom je kompozícia, ktorá je označovaná čiernym diamantom. O rozdiele medzi agregáciou a kompozíciou si prečítajte v článku Martina Fowlera.

Ďalší typ vzťahu, ktorý môžeme použiť v diagrame tried, je zovšeobecnenie (alebo generalizácia). Je to vzťah medzi všeobecnejšou triedou a jej špeciálnym prípadom. Tento vzťah sa označuje šípkou s prázdnym trojuholníkovým koncom smerujúcim k všeobecnejšej triede.

Povedzme, že v systéme chceme mať špeciálny typ článku — odkaz. Pôjde o príspevok, kde autor blogu komentuje nejakú inú stránku a dáva na ňu odkaz (podobne ako v populárnom blogu Daring Fireball). Odkaz má všetky vlastnosti článku, ale navyše má adresu na odkazovaný článok a možnosť ho zobraziť.

Konceptuálny model so vzťahom zovšeobecnenia
Obr. 7: Konceptuálny model so vzťahom zovšeobecnenia

Tento vzťah sa nazýva aj dedičnosť, lebo špeciálny prípad „dedí“ všetky vlastnosti a akcie zo všeobecného.

Úloha 3.1

Upravte diagram podľa vzoru: tam, kde je to vhodné, nahraďte obyčajné asociácie agregáciou a doplňte vzťah zovšeobecnenia.

Krok 4: Zadania

Úloha 4.1

Navrhnite konceptuálny model pre opis domény vášho zadania. Použite analýzu objektov a akcií a znázornite ho pomocou diagramu tried.

Nesprávny príklad

Používateľ a systém
Obr. 8: Používateľ a systém

Takýto diagram nepovie o fungovaní systému vôbec nič. Navyše všetko, čo sa znázorňuje na v konceptuálnom modele je súčasťou systému, preto nemá zmysel kresliť samotný systém ako jednu z tried. Celý diagram je systém.

Krok 5: Domáca úloha

Úloha 5.1

Prečítajte si článok Conceptual Models: Begin by Designing What to Design a pozrite aj ďalšie zdroje tohto cvičenia.

Zdroje

  1. Johnson J., Henderson A.: Conceptual Models: Begin by Designing What to Design — popis významu konceptuálneho modelu pri návrhu aplikácie.
  2. Johnson J., Henderson A.: Conceptual Models in a Nutshell — definícia konceptuálneho modelu pomocou analýzy objektov a akcií.
  3. Practical UML: A Hands-On Introduction for Developers — prehľad základných prvkov diagramov UML.