---
# System prepended metadata

title: 4  Objektové metody návrhu systémů
tags: [řvss, informační-systémy, oop]

---

# 4  Objektové metody návrhu systémů
###### tags: `řvss`, `informační-systémy`, `oop`

## Návrhové vzory

Návrhový vzor je obecné a znovupoužiteľné riešenie pri návrhu softvéru.

- popis alebo šablóna riešenia problému, ktorý môže byť riešený v rôznych situáciach
- uľahčuje znovupoužiteľnosť architektúr a návrhov SW
- zachytávajú, statickú a dynamickú štruktúru a spoluprácu medzi účastníkmi SW
- nie sú finálny návrh slúžia len ako model, ktorý je treba prispôsobiť pre danú situáciu
- priekopníci Gang of Four(GoF)

#### Problémy návrhových vzorov

- neplatí, že čím viac vzorov tým lepšie
- máme tendenciu stále používať posledný naučený vzor
- môžme použiť nesprávny vzor pre riešenie daného problému
- vysoké náklady pri redizajne SW pre použitie návrhové vzoru
- vzory majú častokrát podobnú vizuálnu štruktúru, preto je potrebné im rozumieť

#### Základná štruktúra vzorov

- názov
- problém(na čo je vzor vhodný)
- riešenie(popis vzoru)
- dôsledky(výhody nevýhody)

#### Klasifikácia vzorov podľa GoF

1. Creational Pattern
    - problematika vytvárania objektov
    - inicializácia a konfigurácia
    - príklad
        - class:
            - Factory method
        - object:
            - Singleton
            - Prototype
            - Abstract Factory
            - Builder
2. Structural Pattern
    - oddeľujú rozhrania od implementácie
    - kompozícia tried do hierarchií
    - dedičnosť
    - príklad
        - class:
            - Adapter(class)
        - object:
            - Adapter(object)
            - Bridge
            - Composite
            - Decorater
            - Facade
            - Proxy
            - Flyweight
3. Behavioral Pattern
    - dynamická interakcia medzi triedami
    - distribuovanie zodpovednosti
    - príklad
        - class:
            - Interpreter
        - object:
            - Iterator
            - Memento
            - Observer
            - State
            - Strategy
            - Visitor

### Creational Patterns

#### Singleton
- **Vytvára a sprostredkúva prístup k jednej zdieľanej inštancii dostupnej odkiaľkoľvek**
- pokiaľ niekto bude chcieť vytvoriť druhp inštanciu, vráti sa mu odkaz na už vytvorenú
- použije se mechanismus volání statických metod(public static)

![](https://i.imgur.com/Gr0taCD.png)

Aplikovatelnosť:
- ak potrebujeme v celom systéme presne jednu inštanciu danej triedy, dostupnú cez dobre známy definovaný prístupový bod

Dôsledky:
- kontrolovaný prístup k inštancií
- redukcia menného priestoru

Kritika:
- singleton je niekedy spomínaný v anti-patterns, vytvoriť niečo globálne 
- porušuje single responsibility principle 

### Structural Patterns

#### Facade
- sprostredkuje prístup k podsystému
- namiesto priamej interakcie klientov s komplexnými komponentami subsystému, používa jednotné (často zjednodušené) API

![](https://i.imgur.com/2LXMlfD.png)

Aplikovatelnosť:
- keď chcete poskytnúť jednoduché rozhranie pre komplexný podsystém
- keď chcete vrstviť svoje podsystémy, použite fasádu na definovanie vstupného bodu do každej úrovne podsystému

Dôsledky:
- Chráni klientov pred komponentmi podsystému, čím znižuje počet objektov, s ktorými klienti pracujú, a uľahčuje používanie podsystému.

### Behavioral Patterns

#### Memento
- zachytáva a ukladá interný stav objektu
- uložený stav objektu môže byť neskôr načítaný

Aplikovatelnost:
- ak chceme ukladať stav objektu (alebo jeho časti) pre načítanie neskôr
- a zároveň ak by priame rozhranie pre získanie stavu objektu zbytočne vystavovalo implementačné detaily

Důsledky: 
- zachováva princípy zapuzdrenia (encapsulation)
- zjednodušuje pôvodcu (Originator) - nemusí si v sebe držať všetky verzie uložených stavov
- nevýhoda: používanie mementa môže býť náročné (kopírovanie veľkého množstva informácií)

![](https://i.imgur.com/TfOS7ic.png)

## Interfaces
- Poskytuje kontakt s vonkajším svetom
- zobrazuje vlastne akú funkcionalitu môžme očakávať od danej komponenty a za akých podmienok
- obsahuje operácie, vstupné a výstupné parametre
- slúži ako kontrakt s okolitým svetom, ktorý hovorí o tom, že za dodržania vopred stanovených podmienok bude poskytovať takúto službu
- musí byť veľmi dobre zdokumentovaný
- kontrakt sa vlastne skladá z podmienok, dokumentácie jednotlivých operácií a parametrov

### Objektovo orientované kontrakty
- udávajú presnú štruktúru špecifikácie daného interfacu
- popisuje služby ktoré sú poskytované za konkrétnych podmienok

### Typy kontraktov
Invariatny:
- je to podmienka ktorá musí vždy platiť pre všetky inštancie danej triedy/komponenty
- podmienka ktorá sa počas behu programu nikdy nemení

Precondition
- je to podmienka ktorá musí byť splnená na začiatku volania určite operácie

Postcondition
- je to podmienka ktorá platí vždy po volaní operácie

### Object Constraint Language
- je to jazyk na formulácie podmienok daného kontraktu
- podmienky vlastne pridávajú informáciu o elementoch daného modelu a vzťahoch medzi nimi
- OCL obsahuje string, boolean, real a integer
- pridávajú sa do UML
- používa sa na presnú špecifikáciu daného kontraktu
- OCL formulujeme vždy v kontexte danej triedy a následne pridávame podmienky
- v prípade dedenia, pre-condition je v sub-class vždy **slabšia**
- V prípade dedenia, post-condition je v sub-class vždy **silnejšia**

#### OCL collections
- OCL obsahuje kolekcie:
    - Set - neusporiadana množina v ktorej sa každý prvok vyskytuje práve jeden krát
    - Bag - neusporiadana množina v ktorej sa každý prvok môže vyskytovať viackrát
    - Sekvencia - usporiadana množina v ktorej sa každý prvok môže vykystovať viackrát

#### OCL operations
- OCL obsahuje operácie:
    - collect - vracia Bag prvkov splňujúci danú podmienku
    - select - vracia subset elementov ktoré splňujú danú podmienku
    - reject - doplnok ku select
    - forAll - je true pokiaľ podmienka platí pre všetky prvky danej kolekcie
    - exists - je true pokial podmienka platí aspoň pre jeden prvok danej kolekcie
    - iterate - dokážeme danou kolekciou iterovať

## SW architecture

- Skladá sa zo základných dizajnových rozhodnutí týkajúcich sa daného systému.
- Je to také rozhodnutie, ktoré je v neskorších fázach veľmi ťažké zmeniť

Prvky softvérovej architektúry
- modules 
    - sú to časti softvéru, ktoré implementujú určitú funkcionalitu
    - zapúzdrené časti softvéru ktoré obsahujú logicky zoskupenú funkcionalitu
    - pre komunikáciu s vonkajším svetom sú vystavené interfaces
- connector
    - interface daného modulu
    - slúži na komunikáciu
- deployment
    - je to vlastne mapovanie modulov a konektorov na harverové zdroje na ktorých budú bežať
    - môže to ovplyvniť správanie celého systému

### Architektonické návrhy

- Generické riešenia dizajnu architektúry
- je to súhrn architektonických riešení ktoré sú aplikovateľné na konkrétny prípad použia
- je prepoužiteľný
- Slúži na vzájomnú komunikáciu medzi zúčastnenými stranami o danom softvere
- Využíva sa aj pri projektovom plánovaní, na základe architektúry si vieme lepšie predstaviť čo vlastne ideme implementovať, vďaka tomu vieme lepšie odhadovať pracnosť
- udržovateľnosť

#### Client-Server architecture pattern
- data sú distribuované naprieč servermi ktoré poskytujú službu
- klient volá takéto služby

**Server**
- reactive entity

**Client**
- active entity

#### Peer-to-Peer Architecture
- distribuovaná architektúra, kde úlohy a zaťaženie sú rozdelené medzi jednotlivé peery
- peer pôsobí ako klient aj ako server

#### Layered Architecture
- pomáha štruktúrovať aplikáciu na viacero vrstiev, ktoré komunikujú prostredníctvom interfacov
- čím vyššia vrstva, tým vyššia miera abstrekcie
- Vrstva N poskytuje službu vrstve N+1 a deleguje úlohy na vrstvu N-1
- Vrstvy sú komplexné entity pozostávajúce z komponent

Komunikácia zhora nadol: 
- Klient zadá požiadavku na vrstvu N. Vrstva N volá ďalšiu vrstvu N-1 na podporu čiastkových úloh a tak ďalej, kým sa nedosiahne vrstva 1. Vrstva N často prekladá jednu požiadavku na niekoľko požiadaviek do vrstvy N-1.

Komunikácia zdola nahor: 
- Reťazec akcií začína na nižšej vrstve 1, napr. keď ovládač zariadenia detekuje vstup. Horné vrstvy sú upozornené a poskytnuté údaje sú interpretované hornými vrstvami.

Výhody:
- jednotlivé vrsty je možné prepoužiť

Nevýhody:
- nižšia efektivita komunikácie

Príklad: iDesign Method

#### Repository Architecture Pattern
- Interakcia s dátami prostredníctvom centrálneho repoziráta
- Repozitár je stredník v komunikácií medzi dátovou vrstvou a biznisovou vrstvou

#### Model View Controller(MVC)
- pomerne starý pattern

Model: 
- poskytuje funkcionalitu a enkapsuluje dáta
- upozorňuje závislé komponenty na zmenu

View:
- prezentuje dáta použivateľovi
- rôzne Views môžu zobražovať model v rôznych podobách

Controller:
- Prijíma vstup používateľa ako udalosti. Udalosti sa prevedú do žiadostí pre Model alebo súvisiace Views.

#### Broker Architecture
- pôsobi ako stredník v komunikácií medzi klientom a serverom

Client:
- Implementujee používateľskú funkcionalitu, posiela požiadavky na servery. Na zavolanie vzdialenej služby klienti preposielajú požiadavky Brokerovi. Klient nemusí poznať lokalitu serverov, ku ktorým pristupuje.

Server:
- implementuje služby

Broker:
- je zodpovedný za prenos dát medzi klientom a serverom

#### Microkernel Architecture
- core systém štruktúry mikcokernel obsahuje iba minimálnu funkcionalitu potrebnú na to, aby bol systém operovateľný.
- Plug-in moduly sú samostatné, nezávislé komponenty ktoré obsahujú funkcionalitu a vlastný kód, ktorý má rozšíriť core systém 

#### Pipes and Filters
- poskytuje štruktúru systému cez ktorý prúdia dáta
- dáta prúdia prostredníctvom pipes a menie sa v jednotlivých filtroch
Pipe: zabezpečuje spojenie medzi jednotlivými filtrami
Filter: Procesuje vstupné dáta a vracia upravené výstupné
Active filter: získava dáta z pipes a odosiela ich ďalej
Active pipes: aktívne posieľajú a žiadajú dáta
Data source: input stream
Data sink: výsledok na konci pipe

#### Blackboard
- užitočný na riešenie problémov na ktoré nemáme konkrétny postu
- Centrálne úložisko dát. Termín slovná zásoba používame pre množinu všetkých dátových prvkov, ktoré sa môžu objaviť na tabuli.
- Knowledge sources - separate independent subsystems that resolve specific aspects of overall problem, komunikujú len prostredníctvom tabule
- Control - určuje poradie KS, monitoruje blackboard

## Komponentové systémy

- spustitelný kus kódu
- typicky sa skladá z množstva tried alebo objektov
- nepriamo komunikuje prostredníctom interfacov
- nezobrazujú source code, sú enkapsulované, poskytujú len dobre špecifikovaný interface
- sú prepoužiteľné a jednoducho 
- Rozhrania sú užitočné pri deklarovaní celkového správania komponentu, ale nemajú žiadnu individuálnu identitu.
- Port má identitu. Komponent môže komunikovať s iným komponenton cez špecifický port.
- komponent sa delí na časti

#### Komponentový model
- definuje špecifikú reprezentáciu, interakciu, kompozíciu a iné štandardy SW komponent
- komerčný príklad, Corba

## Quality Assurance
- chceme garantovať kvalitu daného softvéru
- vzhľadom na SLA, zákazník požaduje určite štandardy týkajúce sa kvality, za ktoré platí

funkčné požiadavky
- definujú funkcionalitu sw

nefunčkné požiadavky
- môže definovať obmedzenia a použité technológie

Extra-functional requirements
- rýchlosť systému, dostupnosť

Ako navrhnúť vysoko kvalitný softvér?
- snažíme sa použiť vhodné architektonické návrhy
- snažíme sa robiť jednotlivé komponenty alebo prvky čo najkvalitnejšie

Ako garantovať kvalitu?
- musíme ju merať
- meriame prostredníctom
    - monitorovania a testovania
    - formálnej verifikácie
    - predikcie na základe modelu - odhad kvality vyvíjaného systému(je na to potrebný model systému, je to použiteľné počas celej doby návrhu architektúry), kvalita odhadu závisí na modele a pozornosti venovanej detailom

Kvalita komponenty alebo služby závisí na kvalite jej implementácie, služieb ktoré jú volajú a zdrojoch ktoré komponent používa a spôsobe ako je služba používaná