1 / 47

Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

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

nikita
Download Presentation

Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nyílt FejlesztőrendszerekDomain specifikus nyelvekEclipse Modeling Framework Technológia részletesen

  2. 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ó

  3. 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”

  4. EMF – a generált komponensek • Tree editor • Modell manipuláció • Modell tárolás

  5. EMF.Model • A modell kód a PIM 100%-os implementációja • Hatékony perzisztencia kezelés XML fájlok támogatásával • 100% folytonosság a modell és a kód között • Előre tudjuk mit kapunk • Általában nem akarjuk módosítani

  6. 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

  7. EMF.Model – EClass implementáció • A generált implementáció egy előre definiált keretrendszert terjeszt ki

  8. EMF.Model – EClass implementáció • EAttribute -> get és set metódusok • EReference • „many” -> get metódus • „one” -> get és set metódus

  9. 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

  10. 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

  11. EObject interfész • Minden interfész ezt terjeszti ki

  12. eClass() • Gyakran használt metódus • Minden üzleti objektum megkaphatja a saját EClass reprezentációját • Hasonló a Java getClass() hívásához • reflexió

  13. eResource() • Egy objektumhoz rendelhetünk egy Resource példány • Resource eResource() • Az erőforrás a perzisztens tárat reprezentálja

  14. EAttribute implementáció • Az attribútum get, set metódussá alakul • Általában nem akarjuk módosítani az implementációt

  15. EReference implementáció • Hasonló az EAttribute-hoz • A típus itt egy másik objektum lesz • Né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”

  16. 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

  17. 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

  18. 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

  19. É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

  20. Értesítés implementáció • A megvalósítás részletei nem fontosak • Tipikusan sose akarjuk módosítani…

  21. 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á

  22. 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

  23. Generator struktúra

  24. EMF.Edit és a minták

  25. 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

  26. Ikon változtatása • Másik tipikus példa az ikonok megváltoztatása • A 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

  27. 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

  28. 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

  29. Parancsok használata EMF.Edit-ben : Példa • Egyszerű példa: loggolás hozzáadása • Bonyolultabb példák esetén az összetett parancsok módosítása is szükséges lehet

  30. 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

  31. Mi generálódik? • Editor • Fastruktúra • Események – akciók összekötése • Workbench elemek beállítása • Menük • Varázsló (új modell…) • Plugin osztály

  32. Konklúzió – EMF.Edit • Az editor a leggyengébb láncszem • Több próbálkozás van a javításra • Egyik: GEF – Graphical Editing Framework • Eclipse túránk következő állomása

  33. Kódgenerálás a gyakorlatban - keretrendszerek • Eclipse • Eclipse Modeling Framework • Java Emitting Templates • J2EE • Velocity (Jakarta) • JSP (XML/HTML) • .NET • CodeDOM

  34. 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

  35. 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

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

  37. 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>

  38. 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

  39. 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ó

  40. 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

  41. 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

  42. 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

  43. 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ó!

  44. 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!

  45. Emf extrák - OCL • OCL kényszerek kezelése • Tetszőleges EMF modell felett • Meta- és példány szinten • Interaktív OCL editor • …

  46. EMF extrák - query • Egyszerű, SQL szerű query api • Modellek elemek kinyerésére • Könnyen programozható • Rugalmas • Bővíthető

  47. EMF extrák - reldb • Modell sorosítás/betöltés relációs adatbázisba • Hibernate alapú • HQL alapú lekérdezések • Projekt: Teneo (EMFT sub)

More Related