Modelem řízený vývoj SWI 1 Jan Kryštof
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
III. Návrh notace Konstrukce DSL jazyka 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 Marry řídí Joel je ředitel Marry je asistent Oba mohou někde pracovat Pouze Marry může řídit auto IKEA pracuje jako sekterářka ří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>>, <<CheckBox>>,... 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 xp oc etu ziva telu maxmimální počet uživatelů (licence) perform O pera tion() 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 PIM TRANSFORMACE PSM INFORMACE Mapování
Jak se uskutečňují přechody mezi modely Transformace mohou být vůči iteratovní M CIM 1 M CIM 2 M CIM 3 M PIM 1 M PIM 2 M PIM 3
DSL Příklad tranformace PIM PSM
Příklad tranformace pokrač. Meta-model relací mezi prvky GUI
Příklad tranformace pokrač. Model struktury okna
Příklad tranformace pokrač. Transformace 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é netypové Vážený pane $name$, vaše registrační číslo $olduserid$, bylo změněno na $newuserid$,... Vážený pane Novák vaše registrační číslo 123 bylo změněno na 456,.... name= Novák newuserid=123 olduserid=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