Úvod do předmětu, průběh, kritéria hodnocení. Architektury rozsáhlých aplikací.

Obsah

Charakteristika a cíle předmětu a průběh výuky
Charakteristika
Průběh výuky
Úlohy
Projekty
Zkouška
Složky hodnocení
Kritéria hodnocení předmětu
Modely
Modely vícevrstvých aplikací
Vrstvy
Komponenty
Orientace na služby
Správa
Zabezpečení
Kontejnery a rámce
Komponentní vs. objektové programování
Objektové programování - principy
Objektové programování - terminologie
Objektové programování - přednosti
Objektové programování - nedostatky
Komponentní programování - principy
Co musí komponenta splňovat
Srovnání komponentního a objektového přístupu
Komponentní programování - výhody oproti OOP
Komponentní programování - souvislosti
Komponentní dokumenty
Architektury orientované na služby (Service-oriented Architectures - SOA)
Motivace k SOA
Definice SOA
Technologie SOA
Charakteristiky SOA
Vztah komponent a služeb
Odkazy

Charakteristika a cíle předmětu a průběh výuky

Charakteristika

Předmět PA165 Vývoj programových systémů v jazyce Java je magisterským předmětem určeným pro zájemce o hlubší proniknutí do principů výstavby rozsáhlejších programových systémů na platformě Java.

Cílem je seznámit s principy:

  • kvalitního návrhu rozsáhlých systémů (jak navrhnout architekturu, jakou zvolit infrastrukturu/rámec...),

  • jejich tvorby (jaké zásady, nástroje,...)

  • testování (při vývoji, zavádění a v provozu),

  • refaktoringu (=zlepšování kódu bez změny funkcionality),

  • ladění výkonu (optimalizace)

Průběh výuky

Výuka probíhá jako:

  • Dvouhodinová přednáška - Po od 14.00 v A107

  • Dvouhodinová cvičení v nové učebně B130 (v přízemí "za halou")

  • Nedílnou součástí je řešení projektu - ve cvičení s možností konzultací nebo ve volném čase

Úlohy

Těžištěm předmětu je samostatná práce na projektech. Společně zadávaných úloh je proto minimum.

Projekty

Projekty jsou koncipovány jako týmové (4členné týmy).

Tematicky vždy pokrývají netriviální část z celkového obsahového záběru předmětu a musí tomu být i technologicky přizpůsobeny.

Zadání projektu stanovuje nebo schvaluje cvičící.

Zkouška

Zkouška bude ústní.

Student při ní musí prokázat dobrý přehled ve studované problematice s tím, že principy a technologie, které aplikoval při řešení projektu musí zvládnout do větší hloubky.

Složky hodnocení

Hodnocení předmětu je stanoveno podle celkového součtu bodů z jednotlivých kritérií:

  • Úlohy - 15 bodů

  • Projekt - 50 bodů

  • Ústní zkouška - 35 bodů

Kritéria hodnocení předmětu

K ukončení zkouškou potřebujete:

  • A 94 - 100 bodů

  • B 88 - 93 bodů

  • C 82 - 87 bodů

  • D 76 - 81 bodů

  • E 70 - 75 bodů

  • F 0 - 69 bodů

K ukončení zápočtem potřebujete:

  • 60 bodů

Modely

Modely vícevrstvých aplikací

Vrstvy

Komponenty

Orientace na služby

Správa

Zabezpečení

Kontejnery a rámce

Komponentní vs. objektové programování

Objektové programování - principy

Obecné, známé principy OO jazyků:

  • možnost (a nutnost) zapouzdření dat a metod ned nimi pracujících do podoby objektu,

  • dědičnost (inheritance) - odvozování nových typů s děděním vlastností typů rodičovských,

  • polymorfizmus (mnohotvarost) - využitelnost objektů poděděných typů v roli předků

Objektové programování - terminologie

Na obecných principech OOP není mezi teoretiky a vývojáři (v různých jazycích) až taková shoda, jak by se mohlo zdát:

  • bezespornou charakteristikou OOP je zapouzdření,

  • další char. jako dědičnost (inheritance) je už v různých jazycích pojímána různě, příp. chybí - a přesto můžeme ještě hovořit o OO jazyku,

  • polymorfizmus (mnohotvarost)

Objektové programování - přednosti

Výhody OOP (za předpokladu kvalitního návrhu) jsou dobře známy:

  • dobrá čitelnost a udržovatelnost kódu,

  • rozšiřitelnost,

  • určitá vnitřní nahraditelnost částí - např. třídu lze nahradit potomkem

  • aspoň teoreticky - využitelnost i jako "black-box"/černá skříňka - bez znalosti zdrojového kódu

Objektové programování - nedostatky

Ale tak skvělé to zase není:

  • bez zdrojového kódu lze dobře znovupoužít jen kvalitní objektový kód,

  • kód je znovupoužitelný většinou jen na mikroúrovni - jednotlivé třídy

  • k znovupoužití je třeba detailní znalosti celého prostředí programu, rozhraní větších programů bývá většinou komplikované - i proto, že komponenty (objekty) jsou příliš malé, jemné

Komponentní programování - principy

V zásadě vychází z objektového, ale:

  • komponenty jsou VELKÉ (coarse-grained) objekty zapouzdřující ucelený kus aplikační logiky nebo dat,

  • komponenty jsou nezřídka přístupné i vzdáleně (tj. po síti, často i z jiných platforem/jazyků),

  • komponenty mohou (za podpory middleware) existovat relativně samostatně

  • vazby k ostatním jsou dobře kontrolovatelné a obecně spíše volné

  • jako protokoly, datové formáty atd. jsou přednostně použity standardní, byť třeba ne tak efektivní

Co musí komponenta splňovat

Komponenta musí být:

  • dobře dokumentovaná, s jasně definovaným API, nejlépe i formálně

  • důkladně testovaná

  • robustní a odolná vůči chybám uživatele (validace vstupů)

  • musí mít podrobné hlášení chyb

  • musí se chovat defenzivně - být odolná vůči nesprávnému použití - je nutné s ním počítat

Srovnání komponentního a objektového přístupu

Přestože komponenty jsou ve většině případů realizovány jako objekty - a tedy komponentní programování je v zásadě pokračováním objektového - je tu jeden zásadní rozdíl.

  • Při návrhu objektů v podstatě přímočaře reprezentujeme strukturu a chování výseku reality.

    Předpokládá se soulad chápání koncového uživatele (zákazníka) a návrháře ohledně této reprezentace.

  • Návrh komponent naproti tomu zcela podřizujeme účelu, proč komponenta existuje, a znovupoužitelnosti.

    Vnitřní struktura uživatele (zákazníka) nezajímá.

Komponentní programování - výhody oproti OOP

Oproti OOP to umožňuje:

  • daleko lepší znovupoužitelnost - slabší vazby, vyšší autonomie

  • vyšší robustnost komponentních systémů

  • snazší vyměnitelnost (nefunkční, zastaralé) komponenty

  • možnost souběžného použití různých verzí komponent

  • lepší testovatelnost komponent vzhledem ke slabším vazbám

  • vývoj mohou dělat nezávislejší mikro-týmy

Komponentní programování - souvislosti

V javovém světě jsou minimálně tyto trendy a možnosti odpovídající KP:

  • pro výstavbu velkých systémů (aplikací) se používají Enterprise JavaBeans,

  • existují tzv. aplikační servery, které pro ně zajišťují middleware,

Komponentní dokumenty

Komponentní principy nejsou užívány jen při tvorbě SW, ale i návrh struktur dokumentů:

Architektury orientované na služby (Service-oriented Architectures - SOA)

Motivace k SOA

  • Obecný příklon k chápání IT jako poskytovatele služby - servisu - nikoli jen technologie.

  • Stejně se začíná přistupovat i k vazbě mezi SW komponentami.

  • Orientace na služby se ve vývoji SW stává vůdčím směrem.

Definice SOA

Architektury orientované na služby (Service-oriented Architectures - SOA) představují princip budování softwarových architektur založený na:

  • komponentách umístěných v uzlech sítě

  • nabízející své služby ostatním prostřednictvím dobře definovaného protokolu

  • služby jsou bezestavové

  • vnitřní realizace klienta obvykle nezajímá - standardy zajišťují interoperabilitu služeb

Technologie SOA

SOA v zásadě neváže na žádnou SW platformu, OS, pg. jazyk ani konkrétní standard.

V úzkém slova smyslu se za SOA dnes někdy považují architektury budované na tzv. Web Services (webových službách, WS) kolem množiny standardů:

  • XML - data reprezentovaná značkovanými dokumenty

  • HTTP jako základní webový protokol

  • SOAP - jako std. protokol WS

  • WSDL - popisovač webových aplikací

  • UDDI - služby registrace a vyhledávání webových služeb

Charakteristiky SOA

Orientace na služby přináší:

  1. Nahraditelnost služeb

  2. Interoperabilitu

  3. Možnost nezávislého ladění služeb

  4. Usnadňuje integraci systémů třetích stran.

Vztah komponent a služeb

Oboje jsou moderní až módní záležitosti, vztah lze definovat takto:

  • Komponenta je často entitou realizující určitou službu.

  • Koncový uživatel nahlíží více na služby, zatímco vývojáře zajímají rovněž komponenty, které je realizují.