Metamodellezés Simon Balázs BME IIT, 2011.
Tartalom Bevezetés Metamodellezés EMF & ecore
(C) Simon Balázs, BME IIT, 2011.
2
Bevezetés Hétfő: Simon Balázs hetente felváltva: előadás és gyakorlat metamodellezés kódgenerálás fordítóelmélet
Csütörtök: Dr. László Zoltán kéthetente
(C) Simon Balázs, BME IIT, 2011.
3
Célok Fejlett modellező eszköz használata Saját metamodell tervezése Kódgenerátorok készítése Programkódok feldolgozása Fordítóelmélet alapjainak megismerése A fenti módszerek használata a szoftverfejlesztés egyes fázisaiban
(C) Simon Balázs, BME IIT, 2011.
4
Metamodellezés
(C) Simon Balázs, BME IIT, 2011.
5
Modell
Modell Kutya
Kép
<>
Bodri: Kutya
Tacsi: Kutya
Világ
<>
(Bodri)
(Tacsi)
(C) Simon Balázs, BME IIT, 2011.
6
Modellezés Model Abstraction az adott környezet számára érdektelen információk figyelmen kívül hagyása
Classification a közös tulajdonsággal rendelkező fontos információk csoportosítása
Metamodel modellezési nyelv modellje megadja a modellek egy családjának építőelemeit, struktúráját, szemantikáját és kényszereit (C) Simon Balázs, BME IIT, 2011.
7
Metamodellezés ???
Világ
Object
UML
<> Kutya
<>
<>
Bodri: Kutya
Tacsi: Kutya
(Bodri)
(Tacsi)
(C) Simon Balázs, BME IIT, 2011.
8
Metamodellezés UML – Unified Modeling Language (M2) use-case diagram osztálydiagram szekvencia diagram …
MOF – MetaObject Facility (M3) ebben van leírva az UML legfelső meta-szint önleíró az UML egy kicsi részhalmaza
XMI – XML Metadata Interchange modellek cseréje eszközök között XML formátumban (C) Simon Balázs, BME IIT, 2011.
9
Metaszintek Metaszint
Leírás
Elemek
M3
MOF meta-metamodell (önmaga metamodellje)
MOF: Class, Property, Association stb.
M2
UML metamodell
UML: Class, Property, Association, State, Activity stb.
M1
UML modell
„Kutya” nevű osztály
M0
objektumok és adatok: az M1 réteg elemeinek példányai
„Bodri” nevű Kutya típusú objektum
(C) Simon Balázs, BME IIT, 2011.
10
Metamodellezés UML (M2): nem mindig elegendő pl. gráfok, fák, egyéb speciális alkalmazási területek
DSL – Domain Specific Language (M2) szakterület-specifikus nyelvek speciális szakterületre kialakított nyelvek az absztrakt szintaxis (modell struktúrája, elemei és kényszerei) MOF-ban leírva a konkrét szintaxis (felhasználó számára) lehet: szöveges (speciális programnyelv) grafikus (speciális dobozok és vonalak)
előny: a felhasználó a saját fogalmaiból építkezik (C) Simon Balázs, BME IIT, 2011.
11
Metaszintek Metaszint
Leírás
Elemek
M3
MOF meta-metamodell (önmaga metamodellje)
MOF: Class, Property, Association stb.
M2
a MOF által leírt metamodellek: a MOF elemeinek példányai
UML: Class, Property, Association, State stb.; DSL metamodell
M1
az M2 réteg metamodelljei által leírt modellek: az M2-es metamodellelemek példányai
„Kutya” nevű osztály; DSL modell
M0
objektumok és adatok: az M1 réteg elemeinek példányai
„Bodri” nevű Kutya típusú objektum; DSL objektumok
Megjegyzés: Két egymás feletti metaszint közötti kapcsolat relatív, így tetszőlegesen sok metaszint létezhet! (C) Simon Balázs, BME IIT, 2011.
12
MDA: Model Driven Architecture
(C) Simon Balázs, BME IIT, 2011.
13
MDA: Model Driven Architecture Platform futtatási környezet specifikálása modellek egy halmazára legalább egy implementáció pl. Java, .NET; Windows, Linux; Oracle, MySQL
PIM: Platform Independent Model PSM: Platform Specific Model Mapping leképzés, függvény: PIM-ből a PSM előállítása
Marker ez alapján dől el, milyen platformra készül a PSM A leképzés plusz bemenete, nem része a PIM-nek! (C) Simon Balázs, BME IIT, 2011.
14
MDA: Model Driven Architecture Unmarked PIM
Unmarked PIM
Unmarked PIM
Marks for Platform A Marks for Platform B
Marks for Platform A Marks for Platform B
Unmarked PIM
Mapping Unmarked PSM
Marks for Platform A Marks for Platform B Mapping
Unmarked PSM
(C) Simon Balázs, BME IIT, 2011.
15
MDA: Model Driven Architecture Model elaboration a modell általában nem teljes: finomítani kell kiindulás: magas absztrakciós szintű modell átmenet: köztes modellek kimenet: alacsonyabb absztrakciós szintű modell példák: get-set metódusok automatikus hozzáadása a modellhez Java kód generálása modellből
Reverse engineering modell visszafejtése az absztrakciós szint emelése példa: Java kód alapján UML osztálydiagram előállítása (C) Simon Balázs, BME IIT, 2011.
16
Transzformációk Modell feldolgozását igényli: modelltranszformáció, kódgenerálás
Programkód megértését igényli: aspektusszövés, pretty printing, reverse engineering, fordítás modelltranszformáció
aspektusszövés, pretty printing kódgenerálás
Modell
Programkód
fordítás
Gépi kód
reverse engineering (C) Simon Balázs, BME IIT, 2011.
17
Gyakorlatok
(C) Simon Balázs, BME IIT, 2011.
18
Mi ez?
(C) Simon Balázs, BME IIT, 2011.
19
Mi ez?
(C) Simon Balázs, BME IIT, 2011.
20
Context Diagram & Data Flow Diagram
(C) Simon Balázs, BME IIT, 2011.
21
Context & Data Flow Diagram Data-flow: adat Process: folyamat Store: tár Terminator: külső forrás/nyelő
(C) Simon Balázs, BME IIT, 2011.
22
Feltételek Store csak process-hez kapcsolható Context diagramon nincs store Egy store több szinten is előfordulhat
(C) Simon Balázs, BME IIT, 2011.
23
Gyakorlatok MOF (EMF ecore)
1. CD & DFD programnyelv
CD & DFD szöveges reprezentáció
2., 3. 4.
CD & DFD metamodell
CD & DFD modell
(C) Simon Balázs, BME IIT, 2011.
5.
CD & DFD grafikus eszközkészlet
CD & DFD grafikus reprezentáció
24
Eclipse Modeling Framework (EMF)
(C) Simon Balázs, BME IIT, 2011.
25
Eclipse Modeling Framework (EMF) Java alapú keretrendszer strukturált modellező nyelvek létrehozására EMF ecore: az EMF magja a MOF-nak felel meg, de kicsit eltér
Saját modellező nyelv létrehozása: ecorera építve Létezik EMF-re épülő UML metamodell is Modell mentése, visszatöltése: XMI (C) Simon Balázs, BME IIT, 2011.
26
Követelmények Tervezéshez: Eclipse Helios (3.6) + “Modeling/EMF – Eclipse Modeling Framework SDK” plugin telepítése
Egyszerű felhasználáshoz Java kódból: Saját metamodellből generált .jar fájl org.eclipse.emf.ecore.jar org.eclipse.emf.common.jar
Összetettebb felhasználáshoz (grafikus editorral): Eclipse fejlesztőkörnyezet (C) Simon Balázs, BME IIT, 2011.
27
ecore
(C) Simon Balázs, BME IIT, 2011.
28
ecore
(C) Simon Balázs, BME IIT, 2011.
29
Saját metamodell létrehozása Négy lehetséges módszer: Java interfészek kommentbe írt annotációkkal UML osztálydiagramszerű grafikus editor XMI XML Schema
Végül mindegyik a Java osztályokra képződik le kicsit megtévesztő: nem Java 1.5-ös annotációk, hanem kommentbe írt speciális karakterláncok (C) Simon Balázs, BME IIT, 2011.
30
Grafikus editor
(C) Simon Balázs, BME IIT, 2011.
31
Java annotations 1. Java csomag létrehozása 2. Csomagon belül interfészek létrehozása: minden metamodell-beli elemnek egy-egy interfészek elé komment: /** (implementációja osztály lesz)
* @model */
használható még az abstract módosító: (implementációja absztrakt osztály lesz)
/** * @model abstract=“true” */
többszörös öröklődés megengedett (interfész szinten) (C) Simon Balázs, BME IIT, 2011.
32
Java annotations 3. Interfészeken belül: getter függvények fejléce, ezekből lesznek az implementáló osztály attribútumai getter-ek előtt komment: /** * @model */
lehetséges módosítók: default="…" (alapértelmezett érték megadása) changeable="false" (csak olvasható attribútum) containment="true" (lista esetén: kompozíció)
(C) Simon Balázs, BME IIT, 2011.
33
Példa package tree.model;
package tree.model; import java.util.List;
/** * @model */ public interface Node { /** * @model */ public Composite getParent(); }
/** * @model */ public interface Composite extends Node { /** * @model containment="true" */ public List getChildren(); } (C) Simon Balázs, BME IIT, 2011.
34
Java annotations Az interfészek alapján az Eclipse generálni tudja az implementációt Csak a @model-lel annotált elemeket veszi figyelembe, minden mást változatlanul hagy A gyökérinterfészeket az EObject-ből származtatja, implementációjukat pedig EObjectImpl-ből A listákat lecseréli EList-re Ha változtatható az attribútum, setter-t is generál (kivéve listáknál) (C) Simon Balázs, BME IIT, 2011.
35
Generált implementáció A saját csomagon belül: ModelFactory interfész ModelPackage interfész két alcsomag: [saját csomag].impl [saját csomag].util
Az impl alcsomag tartalma: minden eredeti interfészhez egy [interfésznév]Impl nevű implementáló osztály sok generált függvény @generated annotációval ellátva ezeket újrageneráláskor felülírja az annotációt eltávolítva saját kód is írható
ModelFactoryImpl osztály ModelPackageImpl osztály (C) Simon Balázs, BME IIT, 2011.
36
ModelFactory A modell példányosításáért felel Singleton, elérése: ModelFactory.eINSTANCE
Minden definiált interfészhez egy .create[interfésznév]() függvény Példa: ModelFactory factory = ModelFactory.eINSTANCE; Node node = factory.createNode();
(C) Simon Balázs, BME IIT, 2011.
37
Összefoglalás Metamodellezés Transzformációk: metamodell kódgenerálás refaktorálás grafikus modellezés
Saját metamodell készítése: EMF
(C) Simon Balázs, BME IIT, 2011.
38