Domain- specifikus modellezés az Eclipse Modeling Framework használatával

Hasonló dokumentumok
Metamodellezés. Simon Balázs BME IIT, 2011.

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Modellező eszközök, kódgenerálás

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

Modellek végrehajtása, kódgenerálás

OOP és UML Áttekintés

Utolsó módosítás:

Folyamatmodellezés és eszközei. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Transzformációk integrált alkalmazása a modellvezérelt szoftverfejlesztésben. Ráth István

Szoftver újrafelhasználás

UML (Unified Modelling Language)

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Interfészek. PPT 2007/2008 tavasz.

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Modell alapú tesztelés mobil környezetben

A Java EE 5 plattform

Már megismert fogalmak áttekintése

Programozási nyelvek Java

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

S01-8 Komponens alapú szoftverfejlesztés 2

Programozási nyelvek Java

Közösség, projektek, IDE

Modell Alapú Szoftverfejlesztés Eclipse-szel

JAVA webes alkalmazások

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

JAVA PROGRAMOZÁS 2.ELŐADÁS

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java programozási nyelv 5. rész Osztályok III.

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

OOP: Java 8.Gy: Abstract osztályok, interfészek

A szoftverfejlesztés eszközei

Ákos Horváth Gábor Bergmann Dániel Varró István Ráth Model Driven Software Development Lecture 3

III. OOP (objektumok, osztályok)

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Programozási technológia

Ákos Horváth Gábor Bergmann Dániel Varró István Ráth Model Driven Software Development Lecture 3

OOP. Alapelvek Elek Tibor

Folyamatmodellezés és eszközei. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Web-fejlesztés NGM_IN002_1

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

Aspektus-orientált nyelvek XML reprezentációja. Kincses Róbert Debreceni Egyetem, Informatikai Intézet

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

CORBA bevezetés. Paller Gábor Internet és mobil rendszerek menedzselése

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Miért is transzformáljunk modelleket? Varró Dániel

JNDI - alapok. Java Naming and Directory Interface

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Utolsó módosítás:

Nagy bonyolultságú rendszerek fejlesztőeszközei

Komponens alapú fejlesztés

A szoftverfejlesztés eszközei

Programozási nyelvek II.: JAVA

10-es Kurzus. OMT modellek és diagramok OMT metodológia. OMT (Object Modelling Technique)

NEPTUN ID BMENET ID. Címtár BME VPN. vcenter VPN SVN. Trac Wiki. Wifi

Bevezető. Servlet alapgondolatok

Objektumelvű programozás

S0-02 Típusmodellek (Programozás elmélet)

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Előzmények

OOP #14 (referencia-elv)

Használati alapú és modell alapú tesztelés kombinálása szolgáltatásorientált architektúrák teszteléséhez az ipari gyakorlatban

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Ráth István. DECOS Nemzeti Nap október 15. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Java I. A Java programozási nyelv

Univerzális munkafolyamat szimulátor

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

Book Template Title. Author Last Name, Author First Name

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

ISA szimulátor objektum-orientált modell (C++)

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Petőfi Irodalmi Múzeum. megújuló rendszere technológiaváltás

problémák elvárások megoldások EAI MDA MOF CWM köztes Sw eszközök hatékonyság konklúzió 09:09 problémák elvárások megoldások EAI MDA MOF CWM

Programozási nyelvek Java

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Interfészek. Programozás II. előadás. Szénási Sándor.

Java Programozás 11. Ea: MVC modell

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT 6. kurzus

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

RIA Rich Internet Application

Adattárház kialakítása a Szövetkezet Integrációban, UML eszközökkel. Németh Rajmund Vezető BI Szakértő március 28.

ELTE, Informatikai Kar december 12.

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

A SZOFTVERTECHNOLÓGIA ALAPJAI

Objektumorientált paradigma és programfejlesztés Bevezető

ELTE SAP Excellence Center Oktatóanyag 1

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Átírás:

Domain- specifikus modellezés az Eclipse Modeling Framework használatával Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Domain- specifikus nyelvek: miért? A mai szobverfejlesztés kihívásai o Komplexitás Növekvő fejlesztési idő és költség o Sokféleség Domain, követelmény, implementációs technika, eszköz o Változás Környezet, követelmények, hibajavítások

Domain- specifikus nyelvek Cél: a szakterüles fogalmakkal fejezzük ki magunkat o Absztrakciós szint növelése o Szakértő (nem fejlesztő) is értse a modellt! Domain- specifikus nyelv (Domain Specific Language) o Pl. HTML, SQL, reguláris kifejezések Lehetne általános célú nyelv (General Purpose Language) o Pl. Java, C stb. o De túl implementációspecifikus o Szakértő nem tudja hatékonyan használni

Domain- specifikus nyelvek: mikor? Előnyök o Specifikus problémák gyorsabb megoldása o Követelmények kifejezése a problématér szintjén o AutomaSkus validáció Hátrányok o Jártasság szükséges a szakterületben (költség) o Nyelvtan megalkotása szubjek`v, bonyolult o Eszköztámogatás fejlesztése költséges lehet (a behatárolt alkalmazhatósághoz képest) o InkompaSbilis DSL- ek elterjedhetnek ugyanarra a területre Szabványosítás

Nyelv: o Modellek leírása o Emberek számára Nyelv- alapú fejlesztés o Cél: problématerület ábekintése Biztosítandó o Fubatás o Analízis o Tesztelés o Implementáció o

Nyelvek együbes kezelése Feladat: több nyelv együbes kezelése o Transzformáció o Aspektus integráció o Szinkronizáció o Finomítás és ekvivalencia vizsgálata o Evolúció Hasonlóan az aspektus- orientált programozáshoz o Több szempont o Azonos rendszer

Az UML lehetőségei és korlátai Előnyök: o Standard közös nyelv o Vizuális Hátrányok: o Nem formális szemanska Nincs egy közös, általánosan használható szemanska o Korlátozob hatókör UML Profilok o Nem domain- specifikus o Unified (NOT Universal) Modeling Language

Metamodellezés Modellező nyelvek tervezése

Modellező nyelvek tervezése Metamodellezés: Tervezési metodológia modellező nyelvekhez Metamodell: egy modellező nyelv modellje Részei: o Konkrét szintaxis o Absztrakt szintaxis o Jólformáltsági szabályok További lehetőségek: o SzemanSka o Leképezések más nyelvekre

Konkrét szintaxis A modellek (vagy programok) megjelenése o Szöveges jelölés: + Könnyen írható: Komplex kifejezések megadása gyorsan - Nehéz olvasni: Ábekinthetőség, kapcsolatok megjelenítésének hiánya - Nehéz karbantartani: Névvel történő hivatkozások o Vizuális jelölés: + Könnyen olvasható: Intui`v, könnyen érthető jelölésrendszer + Biztonságosan írható: Csak szintakskailag helyes modellek készíthetőek - Nehéz írni: A grafikus szerkesztés lassabb

Példa: konkrét szintaxis Grafikus jelölés Szöveges jelölés request [load<10] Idle CalculaSng response void request() { if(state == IDLE && this.load < 10) state = CALCULATING; } void response() { if (state == CALCULATING) state = } IDLE;

Absztrakt szintaxis (metamodell) Metamodell: a modellező nyelv modellje Cél: definiálni... o a nyelv által tartalmazob koncepciókat o és az ezek közöo lehetséges kapcsolatokat Tartalma: o Alapelemek definíciója o Kapcsolatok az elemek közöb o Absztrakció/finomítás (Taxonómia, Ontológia) az elemek közöb o Kényszerek (pl. számosság) o (Egyéb jólformáltsággal kapcsolatos szabályok)

Metamodellek és példányok Automaton Metamodell szint AccState initial states transitions State from Transition color:{r,g,b} to Metamodell Modell szint t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Metamodellek és példányok Automaton AccState initial states transitions State from Transition color:{r,g,b} to Osztály Metamodell szint Metamodell Modell szint t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Metamodellek és példányok Automaton Metamodell szint AccState initial states transitions State from Transition color:{r,g,b} to Metamodell Osztály Abribútum Modell szint t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Metamodellek és példányok Automaton Asszociáció Metamodell szint AccState initial states transitions State from Transition color:{r,g,b} to Metamodell Osztály Abribútum Modell szint t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Metamodellek és példányok Öröklődés Metamodell szint AccState Automaton initial states transitions State from Transition color:{r,g,b} to Asszociáció Osztály Metamodell Abribútum Modell szint t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Metamodellek és példányok Automaton Metamodell szint AccState initial states transitions State from Transition color:{r,g,b} to Metamodell Modell szint t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Metamodellek és példányok Automaton Metamodell szint AccState initial State states color:{r,g,b} Objektum Metamodell from to transitions Transition Modell szint t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Metamodellek és példányok Automaton Metamodell szint AccState initial State states color:{r,g,b} Objektum Metamodell from to transitions Transition Modell szint Kapcsolat t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr a1 s1 t3 t1 s3 s2 t2 Absztrakt szintaxis Konkrét szintaxis

Példányosítás Automaton initial states transitions AccState State from Transition color:{r,g,b} to instance t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr

Példányosítás AccState instance Automaton initial states transitions State from Transition color:{r,g,b} to Kapcsolat modellszint és metamodell szint közöb t3 fr to ini st st s1 a1 s3 tr st tr fr to t1 s2 t2 to fr

Létező metamodellek Különböző alkalmazási domainek az UML körül o SysML (rendszerfejlesztés) o SPEM (folyamat modellezés) o CWM (adabárházak) o GRM (általános erőforrás metamodell) o EDOC (nagyvállalas elosztob rendszerek)

Jólformáltsági szabályok Számossági kényszerek o Legfeljebb egy: 0..1 o Sok: * Aggregáció/Tartalmazás o Minden modellelemnek legfeljebb egy szülő Nyelvspecifikus kényszerek o Pl. egyedi nevek o Pl. OCL- ben (Object Constraint Language) kifejezhető

Dinamikus szemanska SzemanSka: a nyelv fogalmainak jelentése Fő megközelítések: o Denotációs: egyik nyelv fogalmainak lefordítása a másik nyelvre fordítob o Operációs: a nyelvi fogalmak viselkedésének modellezése interpretált

Eclipse Modeling Framework (EMF) Metamodellezés Eclipse alab

Eclipse Modeling Framework Modellezési komponens Eclipse alá Lehetőség domain- specifikus nyelvek definiálására Szerkesztés o Alapvető parancsok o Értesítés változásokról o Visszavonás o Alapvető editor komponens XML/XMI export- import támogatás Saját metamodellező mag

Az EMF eszközkészlet

Az EMF eszközkészlet Plaxorm független modell Metamodell megadása

Az EMF eszközkészlet Plaxorm specifikus modell ECore model - > plaxorm leképezés

Az EMF eszközkészlet Kód sablonok a generátorhoz

Az EMF eszközkészlet Kódgenerálás

Az EMF eszközkészlet Modell perzisztencia Java osztályok

Az EMF eszközkészlet Modell manipuláció ÜzleS logika Elemek létrehozása, törlése

Az EMF eszközkészlet Modell editor Fastrukturájú megjelenítés

ECore Az EMF metamodellező nyelve o Meta- nyelv: metamodellező nyelv A metamodellek plaxormfüggetlenek o További nyelv(ek) az implementáció- közeli modellezésre Strukturális modellek definíciójára szolgál

Ecore A legfontosabb elemek

Ecore A legfontosabb elemek Egy `pust jelképez Többszörös öröklődés Tetszőleges számú abribútum Tetszőleges számú asszociáció

Ecore A legfontosabb elemek Típusos abribútum

Ecore A legfontosabb elemek Egyirányú, bináris kapcsolat Opcionálisan ellenkező irány is Hivatkozob `pust definiálja

Teljes ECore hierarchia

Közös ősosztály Teljes ECore hierarchia

Típusok csomagokba szervezve Teljes ECore hierarchia

Teljes ECore hierarchia Atomi ada~pus

Teljes ECore hierarchia Felsorolt `pus

Teljes ECore hierarchia Tulajdonság

Teljes ECore hierarchia Művelet

Az EMF felhasználása Define Plaxorm Independent Model Define Generator Model Generate Code Evaluate Result Define or Override Code

Az EMF felhasználása Define Plaxorm Independent Model Define Generator Model Generate Code Evaluate Result Define or Override Code

ECore modell létrehozása

ECore modell létrehozása Többféle konkrét modellmegadás

ECore modell létrehozása UML osztálydiagram Megfelelően sorosítva Pl. RaSonal SoBware Architect EclipseUML

ECore modell létrehozása Egy XML dokumentum metamodellje

ECore modell létrehozása Szöveges DSL ecore modell leírásra

ECore modell létrehozása Közvetlen megadás (ecore model editor)

ECore modell létrehozása Speciálisan annotált Java Közvetlen interfészek megadás (ecore model editor)

EmfaSc Szöveges DSL EMF metamodellek számára

ECore Tools: ECore Diagram Editor Grafikus DSL EMF metamodellek számára

Példa: KapcsolaS háló

Példa: Az ECore metamodell

Példa: Az ECore metamodell Csomag

Példa: Az ECore metamodell Osztály

Példa: Az ECore metamodell Abribútum

Példa: Az ECore metamodell Referencia

Példa: Az ECore metamodell Felsorolt `pus

Az EMF felhasználása Define Plaxorm Independent Model Define Generator Model Generate Code Evaluate Result Define or Override Code

Kódgenerálás ECore modellből forráskód generálható o Modell perzisztencia o Modell menedzsment o Modell editor o Modell tesztelés Ezek testre szabhatóak o Generátor modell o Kód sablonok

Kódgenerálás A generálás alapja egy genmodel fájl o Plaxorm- specifikus o Az ECore modell alapján készül o Részletes Létrejön néhány Eclipse plug- in o Alapértelmezeb editor o Perzisztencia kezelés o Modell manipulációs

Kódgenerálás Nem kulcsrakész megoldás o Az editor nem túl felhasználóbarát o Az üzles logika sem feltétlenül elégséges

Generátor modell Cél: o Kódgenerálási beállítások megadása EMF modell o Tree Editor o Hivatkozik a saját ecore modellünkre Kódgenerálási beállítások o Java verzió (pl. Java 5 esetén enumok használata) o Package/projektnevek o

Generátor modell

Generátor modell Hivatkozob ECore modellelemek (akár több ECore modellből is)

Generátor modell Általános paraméterek

Generátor modell Modellmanipuláci ó paraméterei

Generátor modell Szerkesztőspecifiku s paraméterek

Generátor modell Modellspecifikus paraméterek

Az EMF felhasználása Define Plaxorm Independent Model Define Generator Model Generate Code Evaluate Result Define or Override Code

Kódgenerátor keretrendszerek Java o Java Emiber Templates (JET) o Velocity (Jakarta) o JSP (XML/HTML).NET o CodeDOM

Java Emiber Templates Java Emiber Temlates (JET) o JSP alapú template nyelv o Szabad kimenes formátum (Szöveges) o Java objektumok átadhatóak Az EMF generátor használja

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 példa <%@ jet package="hello" imports="java.util.*" JET fejléc 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 példa <%@ jet package="hello" imports="java.util.*" class="xmldemotemplate" %> <% List elementlist = (List) argument; %> <?xml version="1.0" encoding="utf-8"?> Bemenő paraméter <demo> definíció <% for (Iterator i = elementlist.iterator(); i.hasnext(); ) { %> <element><%=i.next().tostring()%></element> <% } %> </demo>

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(); Céldokumentu i.hasnext(); ) { %> m kezdete <element><%=i.next().tostring()%></element> <% } %> </demo>

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

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 példa <%@ jet package="hello" imports="java.util.*" class="xmldemotemplate" %> <% List elementlist = (List) argument; %> <?xml version="1.0" encoding="utf-8"?> <demo> Ciklusmag <% for (Iterator i = elementlist.iterator(); i.hasnext(); ) { %> <element><%=i.next().tostring()%></element> <% } %> </demo>

Az EMF felhasználása Define Plaxorm Independent Model Define Generator Model Generate Code Evaluate Result Define or Override Code

A A generált EMF komponensek 3. Tree editor 2. Modellmanipuláció 1. Modell tárolása

A A generált EMF komponensek

EMF.Model Az ECore modell teljes implementációja Hatékony perzisztenciakezelés o XMI technológia A modell és a kód közel van egymáshoz o Előre tudjuk, mit kapunk o Általában nem szükséges módosítani

EMF.Model Lehetséges kiegészítések o Saját fájlformátum támogatás Parser Okos szerkesztő Xtext projekt így működik o Extra információk beszúrása a generált forrásfájlokba Kerülendő Inkább legyen az ecore modell része

Főbb képességek o Reflexió Az ECore keretrendszer o Értesítés (nosficason) o Perzisztencia o Asszociációk kezelése o Többszörös öröklődés

Reflexió eclass() o Minden üzles objektum megkaphatja a saját EClass reprezentációját o Hasonló a Java getclass() hívásához eget/eset/eisset/eset/eunset() o Tulajdonságok generikus kezelése econtainer/econtents() o Hierarchia o Szülő/gyerekek visszaadása tartalmazások mentén

Értesítés Minden modellobjektum támogatja az értesítésküldést o Observer minta o Event objektumok az értesítésben o Genmodellben állítható, hogy mi vált ki értesítést

Értesítés Feliratkozás o eadapters().add(adapter) Értesítésküldés o enotify(notification) A megvalósítást nem részletezzük o EMF biztosítja o Tipikusan sose akarjuk módosítani

Perzisztencia EMF modellek tárolása: erőforrásokban (resource) Egy objektumhoz rendelhetünk egy Resource példányt o eresource() adja vissza Beépíteb implementáció: XMIResourceImpl o Betöltés/mentés XMI formátumú fájlokból/fájlokba

EPackage implementáció Példány elérése: <csomagnév>package.einstance Minden osztályhoz metódus o EClass get<osztálynév> Minden osztály minden tulajdonságához metódus o EStructuralFeature get<osztálynév>_<tulajdonságnév>

EFactory implementáció Példány elérése: o <csomagnév>factory.einstance o <csomagnév>package.einstance.get<csomagnév>factory Minden osztály példányosítására metódus o <osztálynév> create<osztálynév>

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

EClass implementáció A generált kód egy előre definiált keretrendszert terjeszt ki Publikus interfészek

EClass implementáció A generált kód egy előre definiált keretrendszert terjeszt ki Publikus interfészek Implementációs osztályok

EClass implementáció A generált kód egy előre definiált keretrendszert terjeszt ki Általános értesítési mechanizmus Publikus interfészek Implementációs osztályok

EClass implementáció A generált kód egy előre definiált keretrendszert terjeszt ki Általános értesítési mechanizmus EMF megvalósítás Publikus interfészek Implementációs osztályok

EClass implementáció A generált kód egy előre definiált keretrendszert terjeszt ki Általános értesítési mechanizmus EMF megvalósítás Publikus interfészek Implementációs osztályok Saját meta- modell elemei

Eclass implementáció Abribútumok és referenciák kezelése o EAbribute: geber és seber metódusok o EReference: mulsplicitásfüggő many : szerkeszthető kollekció, hozzá egy geber metódus one : geber metódus az értékre Kezdőértékek tárolása és inicializálása

EAbribute implementáció protected static final String NAME_EDEFAULT = null; protected String name = NAME_EDEFAULT; public String getname() { return name; } public void setname(string newname) { String oldname = name; name = newname; if (enotificationrequired()) { enotify(new ENotificationImpl( )); } } Általában nem akarjuk módosítani az implementációt o Kivéve pl. származtatob tulajdonságok

Ereference implementáció Hasonló az EAbribute- hoz A `pus ib egy másik objektum lesz Néhány kiegészítés szükséges, ha nem tartalmazás jellegű reláció van o Az objektum más tárban is lehet Referencia- feloldás o Ellenőrizni kell a késrányú referenciák integritását Ellenkező oldal frissítése

EoperaSon implementáció Az ECore modellben metódusokat is megadhatunk Nincs támogatás a szemanska definiálására Ötlet o Az ECore modellben definiáljuk a metódus Nevét Paramétereit, `pusukat Visszatérési értékének `pusát o Implementáljuk Java- ban A kódgenerátor csak kódvázat generál

EOperaSon implementáció ecore model emf.core Ha definiáltunk egy metódust o Hozzáadja az interfészhez o Egy üres implementációt készít az implementáló osztályban

EOperaSon implementáció public class Ximpl extends EObjectImpl implements X { } /** * @generated NOT */ void f() { // Provide the implementation } Első generálásnál az EMF egy ExcepSon- t dobó implementációt készít Át kell venni a felügyeletet o Beállítjuk a @generated taget NOT- ra o Implementáljuk a metódust

A A generált EMF komponensek

A A generált EMF komponensek

EMF.Edit Szerepe o A GUI és a modell szétválasztása o GUI független akciók implementálása Nagyobb eséllyel módosítjuk o Módosítjuk az element providert o Új parancsokat adunk hozzá

Generator minta Minden modell objektumhoz o Egy adapter jön létre Neve: ItemProvider Pl. ArSstItemProvider A providerek közös őse: o org.eclipse.emf.edit.provider.itemprovideradapter Alapértelmezeb implementáció alap funkcionalitáshoz Egy részét definiáljuk felül

Generator struktúra

Megjelenítés List- és TableViewerben Generator struktúra

Megjelenítés szerkezete TreeViewerbe n Generator struktúra

Generator struktúra Megjelenítés szövege és képe

Generator struktúra Tulajdonságok megjelenítése a ProperSes Viewban

Generator struktúra Modellhierarchi a módosító parancsai

EMF.Edit és a tervezési minták

Címkék változtatása A testreszabás Spikus példája a címkék változtatása o A genmodel- ben megadhatjuk, hogy egy objektum mely abribútuma jelenjen meg címkeként o Mi van, ha többől akarjuk összerakni? Változtatni kell a ItemProvider.getText- en o Töröljük/NOT- ra állítjuk a @generated taget o Saját implementációt írunk

Ikonok változtatása Másik Spikus példa az ikonok megváltoztatása A genmodel egy egyszerű ikont rendel minden elemhez o Az elemek az edit projekt icons/full könyvtárában találhatóak obj16: konkrét osztályokhoz ctool16: gyerekelem- létrehozási parancsokhoz A legegyszerűbb a fájlok lecserélése saját ikonra Ha logika alapján kell: ItemProvider.getImage felülírása

EMF.Edit parancsok Minden módosítás parancsokon (command) keresztül történik o Menü akció o Abribútum változtatás o Drag- n- drop Undo/redo támogatás A keretrendszer generált és már létező kód keverékét használja o EMF Common Command Framework (CCF) o EMF.Edit által generált parancsok

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 o createaddcommand() o createremovecommand() o A módosítás során a protected metódusok egyikét módosítjuk általában

Parancsok az EMF.Edit- ben: Példa public class SetArtistNameCommand extends SetCommand { } public SetArtistNameCommand(EditingDomain domain, Eobject owner, EStructuralFeature feature, Object value) { super(domain, owner, feature, value); } public void doexecute() { Artist artist = (Artist)this.owner; Logger.log(MessageFormat.format( "Name of artist changed from {0} to {1}", artist.getname(), value.tostring())); super.doexecute(); } Egyszerű példa: loggolás hozzáadása Bonyolultabb példák esetén az összeteb parancsok módosítása is szükséges lehet

A A generált EMF komponensek

A A generált EMF komponensek

EMF.Editor Az EMF.Editor generálja az SWT/JFace kódot a grafikus editorhoz Két fő opció o Meghagyjuk alapértelmezejen o Újraimplementáljuk teljes egészében

Editor (JFace alapú) o Fastruktúra Mi generálódik? o Események akciók összekötése o Workbench elemek beállítása Menük Varázsló (új modell ) Plugin acsvator

A generált szerkesztő

EMF.Editor - Összefoglalás A generált editor elsődlegesen tesztelésre való o Fastruktúra nehezen átlátható o Alapszintű műveletek Alterna`v megoldások o GMF: GEF technológiára alapuló grafikus editor EMF modellekhez o Xtext: szöveges editor EMF modellekhez

EMF - Összefoglalás

EMF Általános modellező keretrendszer o Többféle bemenet o Sorosítási és szerkesztési támogatás Kódgenerálás o Testreszabható o Jó alapértelmezések Sokan használják o Sokféle Eclipse- es projekt alaptechnológiája o Jól alkalmazható különféle területeken

További EMF alapú technológiák ValidaNon o Kényszerek megadása és ellenőrzése Query o Magas szintű lekérdezések fubatása Compare o Modellek strukturális összehasonlítása (pl. verziókezeléshez) Teneo o EMF modellek perzisztenciája relációs adatbázisba SDO o Service Oriented Architecture megvalósítása EMF alapon CDO o Elosztob, kliens- szerver EMF modellek