nyílt fejlesztőrendszerek domain specifikus nyelvek eclipse modeling framework

Post on 25-Jan-2016

27 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework. Technológia részletesen. EMF - kódgenerálás. A generálás alapja a genmodel Platform specifikus Az ecore modell alapján készül részletes Létrejön Alapértelmezett editor Perzisztencia kezelés - PowerPoint PPT Presentation

TRANSCRIPT

Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Nyílt FejlesztőrendszerekDomain specifikus nyelvek

Eclipse Modeling Framework

Technológia részletesen

2Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF - kódgenerálás

A generálás alapja a genmodel− Platform specifikus− Az ecore modell alapján készül− részletes

Létrejön− Alapértelmezett editor− Perzisztencia kezelés− Modell manipuláció

3Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF - kódgenerálás

Mi jön létre?− Néhány Eclipse plug-in

Minden esetre megoldás?− NEM!− Nem feltétlenül kényelmes editor− Nem feltétlenül elégséges „üzleti logika”

4Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF – a generált komponensek

Tree editor

Modell manipuláció

Modell tárolás

5Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model

A modell kód a PIM 100%-os implementációjaHatékony perzisztencia kezelés XML fájlok

támogatásával100% folytonosság a modell és a kód között

− Előre tudjuk mit kapunk− Általában nem akarjuk módosítani

6Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model

Lehetséges kiegészítések− Saját fájlformátum támogatás

● Parser● Okos szerkesztő

− Extra információk beszúrása a fájlokba● Kerülendő● Inkább legyen a PIM része

7Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model – EClass implementáció

A generált implementáció egy előre definiált keretrendszert terjeszt ki

8Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model – EClass implementáció

EAttribute -> get és set metódusokEReference

− „many” -> get metódus− „one” -> get és set metódus

9Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Model – EClass implementáció

Minden osztály tartalmaz framework-specifikus elemeket− Reflektiv set/get− Kezőértékek tárolása és inicializálása

10Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Az ecore keretrendszer

Igen összetett− Csak néhány elemét nézzük át

Általában csak egy kis részét kell megérteni a használathoz− Az EObject interfészt− A reflexiót− Az értesítési mechanizmust

A keretrendszer viselkedést az EObjectImpl és gyerekei valósítják meg

11Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EObject interfész

Minden interfész ezt terjeszti ki

12Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

eClass()

Gyakran használt metódusMinden üzleti objektum megkaphatja a saját

EClass reprezentációjátHasonló a Java getClass() hívásához

− reflexió

13Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

eResource()

Egy objektumhoz rendelhetünk egy Resource példány− Resource eResource()

Az erőforrás a perzisztens tárat reprezentálja

14Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EAttribute implementáció

Az attribútum get, set metódussá alakulÁltalában nem akarjuk módosítani az

implementációt

15Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EReference implementáció

Hasonló az EAttribute-hozA típus itt egy másik objektum leszNéhány kiegészítés szükséges, ha nem

tartalmazás jellegű reláció van− Az objektum más tárban is lehet

● Referencia-feloldás− Ellenőrizni kell a kétirányú referenciák integritását

● „opposite”

16Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EOperation implementáció

Az ecore modellben metódusokat is megadhatunk Nincs támogatás a szemantika definiálására Ötlet:

− Az ecore modellben definiáljuk a metódus● Nevét● Paramétereit, típusukat● Visszatérési típust

− Implementáljuk Java-ban A kódgenerátor csak vázat generál, amit kitöltünk

17Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EOperation implementáció

Első generálásnál az EMF egy Exception-t dobó implementációt készít

Át kell venni a felügyeletet− Beállítjuk a @generated taget NOT-ra− Implementáljuk a metódust

18Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EOperation implementáció

Ha definiáltunk egy metódust− Hozzáadja az interfészhez− Egy dummy implementációt készít az implementáló

osztályban

19Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Értesítés implementáció

Minden modell objektum támogatja az értesítés-küldést− Observer minta− Event objektumok az értesítésben− A genmodel-ben beállíthatjuk, hogy mi váltson ki

értesítést

20Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Értesítés implementáció

A megvalósítás részletei nem fontosak− Tipikusan sose akarjuk módosítani…

21Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.EDIT

Szerepe− A GUI és a modell szétválasztása− GUI független akciók implementálása

Nagyobb eséllyel módosítjuk− Módosítjuk az elem provider-t− Új parancsokat adunk hozzá

22Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Generator minta

Minden modell objektumhoz egy adapter jön létre az EMF.Edit-ben− Neve: ItemProvider− Pl. ArtistItemProvider

Az item provider az org.eclipse.emf.edit.provider.ItemProviderAdapter− Alapértelmezett implementáció az alap

funkcionalitáshoz− Általában felüldefiniáljuk bizonyos részét

23Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Generator struktúra

24Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Edit és a minták

25Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Címkék változtatása

Tipikus példa a testre szabásra a címkék változtatása− A genmodel-ben megadhatjuk, hogy egy objektum

mely attribútuma jelenjen meg címkeként− Mi van, ha többől akarjuk összerakni?

Változtatni kell a ItemProvider.getText-en− Megváltoztatjuk a @generated tag-et− Saját implementációt írunk

26Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Ikon változtatása

Másik tipikus példa az ikonok megváltoztatásaA genmodel egy egyszerű ikont rendel minden

elemhez− Az elemek az emf.edit/icons/obj16 és ctool16

könyvtárban találhatóak● Minden elemhez, illetve minden elem létrehozási

lehetőséghez

A legegyszerűbb a fájlok lecserélése saját ikonra

27Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Parancsok használata EMF.Edit-ben

Minden módosítás parancsokon (command) keresztül történik− Menü akció− Attribútum változtatás− Drag-n-drop

A keretrendszer generált és általános kód keverékét hsaználja− Common Command Framework (CCF)− EMF.Edit Generated Commands

28Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Parancsok használata EMF.Edit-ben

A parancsok használata a template method mintára épül

Az ItemProvider implementálja a createCommand() metódust, a kéréseket továbbítja protected metódusaiknak− createAddCommand()− createRemoveCommand()− …

A módosítás során a protected metódusok egyikét módosítjuk általában

29Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Parancsok használata EMF.Edit-ben : Példa

Egyszerű példa: loggolás hozzáadásaBonyolultabb példák esetén az összetett

parancsok módosítása is szükséges lehet

30Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF.Editor

Az EMF.Editor generálja az SWT/JFace kódot a grafikus editorhoz

Két fő opció− Hagyjuk ahogy van− Újraimplementáljuk, mivel köze sincs ahhoz, amit akarunk

31Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Mi generálódik?

Editor− Fastruktúra− Események – akciók összekötése− Workbench elemek beállítása

MenükVarázsló (új modell…)Plugin osztály

32Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Konklúzió – EMF.Edit

Az editor a leggyengébb láncszemTöbb próbálkozás van a javításraEgyik: GEF – Graphical Editing

Framework− Eclipse túránk következő állomása

33Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Kódgenerálás a gyakorlatban - keretrendszerek

• Eclipse

• Eclipse Modeling Framework

• Java Emitting Templates

• J2EE

• Velocity (Jakarta)

• JSP (XML/HTML)

• .NET

• CodeDOM

34Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

CodeDOM

• .NET alapú nyelvek kezelése

• Forráskód – DOM – forráskód transzformációk

• parser

• code generator

• nyelvek közötti fordítás

• dinamikus forráskód-generálás és fordítás

35Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Velocity/JSP

• Velocity

• Általános template nyelv

• Java objektumok használata

• Könnyen integrálható modellező eszközökbe

• Szöveges kimenet

• JSP

• Elsősorban XML alapú dokumentumokhoz (Web)

• J2EE-be integrált

36Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Java Emitting Templates

• Java Emitting Temlates (JET)• JSP alapú template nyelv• Szabad kimeneti formátum (Szöveges)• Java objektumok átadhatóak

37Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

38Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

JET fejléc

39Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Bemenő paraméter definició

40Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Céldokumentum kezdete

41Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Ciklus a bemenő paraméter alapján

42Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

JET példa

<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>

<?xml version="1.0" encoding="UTF-8"?><demo>

<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>

<% } %>

</demo>

Ciklusmag

43Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Kódgenerálás - összefoglaló

• A program-generálásból indult• UML -> Java, C++, ….

• ma már széles körben használt• dokumentum generálás (web)• report generálás (XML, XLS, CSV, nyomtatás)

• Széles körű támogatottság• EMF – JET• Velocity• CodeDOM

• NEM CSAK az MDA környékén használható!

44Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF extrák – UML

Org.eclipse.uml2 – UML2 plugin− Modell perzisztencia− Modell manipuláció− Default (tree) editor− Több ipari tool is használja

● Egyszerű eyüttműködés!

45Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Emf extrák - OCL

OCL kényszerek kezeléseTetszőleges EMF modell felettMeta- és példány szintenInteraktív OCL editor…

46Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF extrák - query

Egyszerű, SQL szerű query apiModellek elemek kinyeréséreKönnyen programozhatóRugalmasBővíthető

47Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

EMF extrák - reldb

Modell sorosítás/betöltés relációs adatbázisbaHibernate alapúHQL alapú lekérdezésekProjekt: Teneo (EMFT sub)

top related