Charakteristika a cíle předmětu a průběh výuky
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)
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
Těžištěm předmětu je samostatná práce na projektech. Společně
zadávaných úloh je proto minimum.
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 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.
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:
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í 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)
-
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.
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
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
Orientace na služby přináší:
-
Nahraditelnost služeb
-
Interoperabilitu
-
Možnost nezávislého ladění služeb
-
Usnadňuje integraci systémů třetích stran.
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í.