SWI 1 – Jan Kryštof
Modelem řízený vývoj
Související zkratky • • • • •
MDA ~ Architecture – formální vymezení MDD ~ Development – aktivita SW vývojářů MDG, MDE, ... UML ~ Unified modeling language OMG ~ Object Management Group konsorcium pro schvalování a údržbu standardů v oblasti vývoje podnikového softwaru
Cíl • Přenositelnost • Inteoperabilita • Znovupoužitelnost • Jak na to? – Specifikace systému v platformně nezávislé terminlogii – Odstínění detailů – Transformace platformě nezávislé specifikace do platformě závislé
Ukázka aplikace MDD
CREATE TABLE t_customers ( id INTEGER NOT NULL, name NVARCHAR(50) NOT NULL, basket INTEGER NOT NULL, PRIMARY KEY (id), KEY (basket) );
Specifikace systému dle MDA • CIM ~ computation-independent model • PIM ~ platform-independent model • PSM ~ platform-specific model
CIM: computation-independent model • popis požadavků na systém na úrovni businessu • popis systému CO bude dělat a ne JAK to bude dělat • využití některého jazyku pro popis domén (DSL ~ domain specific language) • minimální odkazy na systém jako na software • velká abstrakce => často opomíjený • prostředky pro zápis – přirozený jazyk, ontologie ...
PIM: Platform-independent model • Popisuje to, jak bude systém sestrojen na úrovni domén • Nepoužívá odkazy na použité technoloigie • Nepopisuje mechanismy výstavby systému, které jsou spojeny s platformu • Nejdůležitejší model architektury => znovupoužitelná komponenta • prostředky pro zápis – UML, IDL, ...
PSM : platform-specific model • Popisuje řešení realizace systému na konkrétní platformě – jak je systém implementován • Představuje model s nejnižší možnou úrovní detailů – nejbohatější model
Schéma aplikace MDD 1) Nalezení DSL jazyka 2) Nalezení transformací mezi modely 3) Konstrukce/nalezení rámce pro provedení resp. interpretaci transformací
DSL : Jazyky pro tvorbu modelů 1) Na počátku: představa o systému: Prostor A = maximální abstrakce a minimální omezení 1)Prostor B 2)Prostor C 3)…
2) Na konci systém jako SW: Prostor Z = minimální abstrakce, maximální omezení
Konstrukce DSL jazyka I. Identifikace abstrakcí. Cílem tohoto kroku je vytvořit slovník a koncepty jazyka. př. GUI: „tlačítko“, „rozložení“, „interakce“ . II. Specifikace meta-modelu. Analýza vztahů mezi objekty slovníku z předchozího kroku a závislosti mezi nimi
Konstrukce DSL jazyka III. Návrh notace Pro snadnější orientaci v modelu je vhodné opatřit koncepty jazyka odpovídají notací, např. ikonou nebou stylem čáry. IV. Definice generátoru Úkolem je získat zdrojový kód => konstrukce generátoru kódu z modelu: - validace modelu proti meta-modelu - transformace - generování zdrojového kódu
Příklad 1: slovník meta-modelu
Příklad 2: meta-modelu s pravidly
Joel pracuje jako ředitel IBM
řídí
Marry
Joel je ředitel Marry je asistent Oba mohou někde pracovat Pouze Marry může řídit auto
pracuje jako sekterářka IKEA
řídí
Volvo
UML jako DSL • Proč UML: – – – – –
vyvíjen a udržován OMG dlouhá tradice, mnoho spokojených uživatelů podpora modelovacích nástrojů formální, rozšiřitelné vlastní formát dat - XMI
Přístupy k vytvoření DSL nad UML • Robustní (heavy-weight) přístup • Odlečený (light-weight) přístup Souvislost s MOF (Meta Object Facility) - jazyk pro definici metamodelů
Definice DSL nad UML: robustní přístup • Zásah do vrstvy M2 : přidání nových konstruktů a pravidel jazyka • Větší možnosti • Ztráta kompatiblity s UML => ztráta kompatibility s XMI •
Definice DSL nad UML: odlehčený přístup • Využití profilů • Omezení vyjádřitelnosti nového DSL koncepcí mechanismem profilů: je mechanismus dostatečený? • Zachování kompatibility: XMI je pro profily připraveno • Široké využití mechanismu profilů: profily pro – – – –
procesní modelování, SOA, GUI, J2EE, ... telekomunikace železniční infrastrukturu ....
UML profily • stereotypy • značené hodnoty • omezení
Stereotypy • Má jméno: <<Button>>, <
>, .... • Aplikovatelný na elementy UML (třídy, aktivity, akce, zprávy, případy použití, ...) • Reprezentace grafická/textová
Příklad : definice ikony stereotypu v EA
Značené hodnoty – Tagged values • Další upřesnění/omezení stereotypů • Atributy stereotypu • Dvojice: jméno=hodnota
Příklad – značené hodnoty
Omezení • Možnosti značených hodnot jsou limitovaný • Omezení – textové popisky – formální: OCL (Object Constraint Language)
• OCL – sekvence invarinatů invariant: vždy platná podmínka, pre/post condition –
Příklad - OCL m a x P oc etU ziva telu … maxmimální počet uživatelů (licence)
perfo rm O pera tio n() … se provolává vždy, kdy uživatel provádí operaci
is P erm itted() … získá licenci ze serveru
Context Licence inv: maxPocetUzivatelu > 0 Context Aplikace::performOperation() : void pre: uzivatelIsLogged() Context Aplikace::isPermitted(): boolean post: maxPocetUzivatelu >= uzivatele.size()
OCL
Schéma aplikace MDD 1) Nalezení DSL jazyka 2) Nalezení transformací mezi modely 3) Konstrukce/nalezení rámce pro provedení resp. interpretaci transformací
Schéma transformace
AC E
TRANSFORMACE
IN FO RM
PIM
Mapování
PSM
Jak se uskutečňují přechody mezi modely • Transformace mohou být vůči iteratovní – MCIM1 → MCIM2 → … MCIM3 – MPIM1 → MPIM2 → … MPIM3
Příklad tranformace PIM → PSM • DSL
Příklad tranformace … pokrač. • Meta-model relací mezi prvky GUI
Příklad tranformace … pokrač. • Model struktury okna
Příklad tranformace … pokrač.
Tr a
ns fo r
m ac e horzintální rozložení vertikální rozložení
Příklad transformace: PIM → PSM ...pokrač. • Dodádní značené hodnoty ptype (platform type) • Cílová platforma - Swing : pro všechny stereotypy “Button“ nastvat tv na: ptype=javax.swing.JButton
Wrapper = javax.swing.JPanel Label = javax.swing.JLabel SimpleInput = javax.swing.JTextField Window = javax.swing.JFrame Button = javax.swing.JButton Panel = javax.swing.JPanel Form = javax.swing.JPanel Image = javax.swing.JLabel
Příklad tranformace … pokrač.
Schéma aplikace MDD 1) Nalezení DSL jazyka 2) Nalezení transformací mezi modely 3) Konstrukce/nalezení rámce pro provedení resp. interpretaci transformací
Transformace • Použití API k procházení modelů (UML modelovací nástroje: Enterprise Architect, rational Rose, ...) – šablonové (vestavěná podpora šablon, vlastní šablolny – StringTemplate, Velocity) – přímé generování kódu (nezávislý průchod modelem)
• Použití transformačních jazyků - modelovací rámce: AndroMDA, Kermeta, OptimalJ – vlastní jazyky: QTL, MTL, ...
Průchod modelem skrze API
Generování kódu – šablonové transformace • Šablonovací jazyky – oddělení výstupu, dat a logiky – obvyklé konstrukce jazyka: podmínky, cykly, proměnné Vážený pane Novák – netypové vaše registrační číslo 123 bylo Vážený pane $name$, vaše registrační číslo $oldUserID$, bylo změněno na $newUserID$, ... …. name=”Novák” newUserID=123 oldUserID=456 ....
změněno na 456, ...
Σ Template engine
Literatura • Template Programming for Model-Driven Code Generation … ZDE • Explore model-driven development (MDD) and related approaches: A closer look at model-driven development and other industry initiatives … ZDE • A Survey of Model Driven Engineering Tools for User Interface Design … ZDE