ÚVOD / Studijní obory / Sylaby / Architektura cloudových aplikací

Architektura cloudových aplikací

Cílem předmětu architektura cloudových aplikací je rozšířit znalosti programování z předchozího předmětu Základy softwarového vývoje a předat základní znalosti k tvorbě cloudových aplikací. Předmět se skládá ze čtyř stěžejních bloků: architektura, analýza a návrh, algoritmizace, programování. V průběhu předmětu se studenti naučí vyvinout cloudovou aplikaci včetně nasazení do cloudu. Zároveň se studenti naučí základům tvorby aplikací pro uuAppServer NodeJS.
Architektura:
Cílem tohoto bloku je seznámit studenty s typickou softwarovou architekturou cloudových aplikací, architekturou MVC, typickou strukturou aplikace a způsobu dokumentace.  Studenti se seznámí s typickými funkčnostmi a službami poskytované aplikačním serverem, principy autorizace a autentizace uživatelů, možnostmi ukládání dat a způsoby komunikace a přenosu dat mezi cloudovými aplikacemi.
Analýza a návrh:
Cílem tohoto bloku je poskytnout studentům základní znalosti z oblasti analýzy a návrhu software. Studenti se seznámí s klíčovými produkty v rámci životního cyklu vývoje software, se základními principy objektově orientovaného přístupu návrhu software a typologií požadavků na software. V průběhu tohoto bloku se studenti seznámí s nejpoužívanějšími diagramy UML (use case diagram, sekvenční diagram, diagram aktivit, komponentový diagram, package diagram) a základní notací UML a uuBML. Studenti v tomto bloku rovněž získají kontextové znalosti, základní terminologii a přehled v oblasti datových úložišť a způsobů jejich modelování.
Programování:
Cílem tohoto bloku je prohloubit znalosti programování z předmětu Základy softwarového vývoje. Studenti se naučí pokročilejší práci pomocí vestavěných metod s typicky používanými datovými typy a kolekcemi. Rovněž se naučí pokročilejší práci s funkcemi a základy objektově orientovaného programování. Dále se seznámí s ošetřováním chyb pomocí výjimek, naučí se základní principy Node.js a asynchronního programování, naučí se pracovat se soubory a specifickými formátu JSON, XML a CSV a seznámí se se základy tvorby unit testů a zásadami tvorby dokumentace zdrojového kódu.
Algoritmizace:
V rámci tohoto bloku se studenti seznámí s teoretickým základem algoritmizace a naučí se využívat nejznámější typy algoritmů při řešení implementačních úloh. Budou představeny základní datové struktury a metody vyhledávání a třídění.

Sylabus předmětu

Architektura:
  1. Architektura cloudových aplikací - třívrstvá architektura, architektura MVC, topologie aplikace v rámci uuAppServer, Use Case driven development, controller, model (logika aplikace), DAO (persistence dat).
  2. Komunikace aplikací - základy REST, strojově čitelné formáty dat a datové struktury pro komunikaci (JSON, XML, CSV).
  3. Aplikační server -  služby (uuCMDs), perzistence (model/dao/data), routing, validace, výjimky, autentizace, autorizace, logování, testování, …).
  4. Uživatelské rozhraní - základní struktura, komponentový přístup, přehled technologií a frameworků.
  5. Persistence dat - typy, terminologie, základní principy, základy SQL vs NoSQL databází, praktické ukázky jejich využití. DAO metody a indexy.
  6. Práva v aplikaci - profily pro UseCase a autorizace v aplikaci, autentizace uživatele přes identitu, hromadná správa uživatelů a práv, možnosti rozšíření
  7. Logování - co a jak logovat v aplikacích,  úrovně logování, přístup k logům aplikace.
  8. Práce s binárními daty - upload a download binárních dat (např. obrázky), persistence binárních dat.
  9. Nasazení aplikace - základní principy, proces nasazení, produkční vs. vývojové prostředí, nasazení aplikace v nejběžnějších PaaS platformách, nástroje pro podporu nasazení.
Analýza a návrh:
  1. Životní cyklus návrhu a vývoje cloudové uuApp - zadání, HLC, design, implementace, nasazení, provoz.
  2. Objektově orientovaná analýza a návrh - základní principy, terminologie, UML, rozdíl mezi analýzou a návrhem, kategorizace požadavků (FURPS+)
  3. Vizuální modelování - formální vs. neformální modelování, notace UML, notace uuBML.
  4. Diagramy UML - představení jednotlivých typů diagramů, třídní diagram, use case diagram, aktivity diagram, stavový diagram, sekvenční diagram, package a komponentový diagram.
  5. Modelování datového úložiště - základní principy, typy relací, rozdíl v přístupu modelování mezi SQL a NoSQL
Algoritmizace:
  1. Výpočetní složitost – časová složitost, prostorová složitost, asymptotická složitost.
  2. Turingův stroj - zavedení turingova stroje, jeho použití pro výpočetní složitost.
  3. Třídění - základní principy třídění (stabilita, složitost, atd.), jednoduché třídící metody (selection sort, insertion sort, bubble sort, atd.).
  4. Vyhledávání - vyhledávací struktura, vyhledávací operace nad seznamem a polem (včetně binárního a interpolačního vyhledávání), binární vyhledávací strom, AVL strom a jeho vlastnosti.
  5. Bitové operace a hashování - bitové operace, interpretace binárních čísel, hashování a odpovídající datová struktura
Programování:
  1. Opakování a rozšíření základní syntaxe JavaScriptu – zopakování programovacích konstrukcí, seznámení se s dalšími syntaktickými prostředky jazyka JavaScript pro jejich implementaci, základy práce s dokumentací JavaScriptu.
  2. Objektově orientované programování - třídy, konstruktory, dědičnost, polymorfismus a rozhraní, možnosti vícenásobné dědičnosti (mixiny), objekty a klíčové slovo this.
  3. Modulárnost aplikace - dělení aplikace do modulů (require vs import, export), viditelnost proměnných, objektů a funkcí, práce s moduly.
  4. Práce se soubory, datovými typy a pokročilá asynchronnost - moduly Node.js pro práci se soubory, pokročilá práce s asynchronními úlohami (async/await, Promise), JSON formát.
  5. Pokročilá práce s kolekcemi - práce s poli, asociativními poli a množinami pomocí vestavěných metod. Immutabilita a reference.
  6. Výjimky a zpracování chyb – úvod do práce s výjimkami, bloky try-catch-finally.
  7. Pokročilejší práce s řetězci – pokročilejší práce s řetězci pomocí vestavěných metod, regulární výrazy, použití regulárních výrazů v JavaScriptu.
  8. Testování a dokumentace - typy testů, proces testování (příprava testu, provedení a vyhodnocení), tvorba unit testů a zásady dokumentace zdrojového kódu.

Doporučená literatura

Základní učební texty a pomůcky

  1. BLOKDYK, G.: Cloud Architecture: Journey from Novice to Expert. CreateSpace Independent Publishing Platform, 2017. ISBN 1978333617
  2. BROWN, E.: Learning JavaScript: JavaScript Essentials for Modern Application Development 3rd Edition, O'Reilly Media, 2016.
  3. ERL, T.: Cloud Computing: Concepts, Technology & Architecture 1st Edition, 2013. ISBN 0133387526
  4. KEOGH, J., GIANNINI, M.: OOP Objektově orientované programování bez předchozích znalostí, Computer Press, 2010
  5. CORMEN, T., LEISERSON, Ch., RIVEST, R., STEIN, C.: Introduction To Algorithms, The MIT Press, 2009
  6. LARMAN, C. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process (3nd Edition), New York, Prentice Hall, 2004

Doplňující a rozšiřující učební texty