Modell Alapú Szoftverfejlesztés Eclipse-szel



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

Grafikus felületek készítése 1.

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

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Programozási nyelvek Java

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

Az IBM WebSphere Multichannel Bank Transformation Toolkit V7.1 felgyorsítja a többcsatornás alkalmazásfejlesztést

Ráth István. A fejlesztés evolúciója

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. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

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

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

Közösség, projektek, IDE

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

Programozási nyelvek Java

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Szoftvertechnológia alapjai Java előadások

RIA Rich Internet Application

Grafikus szerkesztők készítése 2.

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

Eclipse Graphical Modeling Framework (GMF) Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

JAVA webes alkalmazások

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

Programozás II. ATM példa Dr. Iványi Péter

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

A Java EE 5 plattform

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

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

OOP: Java 4.Gy: Java osztályok

Szervlet-JSP együttműködés

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

Algoritmusok és adatszerkezetek II.

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

és az instanceof operátor

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

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

Újdonságok a Google műhelyéből. Péter Ekler

Ajax és Echo 2. Bokor Attila

C#, OOP. Osztályok tervezése C#-ban

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Java Programozás 11. Ea: MVC modell

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

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

eseményvezérelt megoldások Vizuális programozás 5. előadás

Web-fejlesztés NGM_IN002_1

Komplex feliratok készítése Maplex-el. Beke Dániel

Alap számológép alkalmazás

Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék. Eclipse Rich AJAX Pla0orm

Komponens alapú fejlesztés

Java programozási nyelv 4. rész Osztályok II.

Programozási nyelvek Java

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

Java és web programozás

7. rész: A specifikációtól az implementációig az EJB rétegben

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?

JNDI - alapok. Java Naming and Directory Interface

Book Template Title. Author Last Name, Author First Name

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Programozási technológia

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Objektumorientált programozás C# nyelven

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

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

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

ANDROID ALKALMAZÁSFEJLESZTÉS

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Webalkalmazás fejlesztés Java EE környezetben NetBeans segítségével: JavaServer Faces 1.2 AJAX

ZH mintapélda. Feladat. Felület

JavaServer Pages (JSP) (folytatás)

Bánsághi Anna

Osztályok. 4. gyakorlat

Java és web programozás

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Alternatív adatbázisok Gráfadatbázisok

JAVA SE/ME tanfolyam tematika

CORBA Áttekintés. Mi a CORBA? OMG and OMA. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Adatbázisok webalkalmazásokban

Java I. A Java programozási nyelv

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

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Java programozási nyelv 8. rész Grafikus felhasználói felület

Bevezető. Servlet alapgondolatok

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

Elemi Alkalmazások Fejlesztése II.

Broadcast Service Widget

Entity Framework + LINQ oktatási segédlet

12.óra jquery Framework #1. Gyimesi Ákos

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

Main schema Types_uj.xsd. Simple Type HirkozlesVezetekFektetesJellegeEnum. Simple Type HirkozlesVezetekCelTipusEnum. Annotations

JAVA PROGRAMOZÁS 3.ELŐADÁS

TSIMMIS egy lekérdezés centrikus megközelítés. TSIMMIS célok, technikák, megoldások TSIMMIS korlátai További lehetségek

OOP: Java 7.Gy: Öröklődés, referenciák

Utolsó módosítás:

Szoftvertechnológia alapjai Java előadások

Átírás:

Modell Alapú Szoftverfejlesztés Eclipse-szel

Miről lesz szó? Három Eclipse projekt 1. EMF Eclipse Modeling Framework modellközpontú szoftverfejlesztés ami a modellben benne van, azt nem kell kézzel megírni 2. GEF Graphical Editing Framework magas szintű grafikus eszközkészlet pl. gráf típusú hálózatoknál mozgatás, kijelölés, összekötés 3. GMF Graphical Modeling Framework EMF + GEF szisztematikus összeházasítása

1. Eclipse Modeling Framework (EMF) Előadás anyaga http://www.eclipse.org/emf/doc/ Modellező Keretrendszer Kód generálása modell alapján, iteratívan Modell relációk betartatásával (számosságok, kétirányú relációk stb.) Adatmodell szerviz funkciók mentés/betöltés (XML perzisztencia) Reflexió Dinamikusan módosítható adatmodell Segédletek UI készítéséhez Eclipse Property Sheet Változásértesítés (notification) Mi az a modell? Adatmodell: Objektumok, attribútumok Relációk Constraint-ek Műveletek tkp. az osztálydiagram Modellformátum: annotated Java.ecore (XML/XMI) Rational Rose

Modell formátumok Book Title: String pages: Int Annotated Java /** * @model */ public interface Book /** * @model */ String gettitle(); /** * @model */ int getpages(); <ecore:epackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/xmi" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/ecore" XMI name="library "nsuri="http:///library.ecore" nsprefix="library"> <eclassifiers xsi:type="ecore:eclass" name="book"> <estructuralfeatures xsi:type="ecore:eattribute" name="title" etype="ecore:edatatype http://www.eclipse.org/emf/2002/ecore#//estring"/> <estructuralfeatures xsi:type="ecore:eattribute" name="pages" etype="ecore:edatatype http://www.eclipse.org/emf/2002/ecore#//eint"/> </eclassifiers> </ecore:epackage> XML Schema <xsd:schema targetnamespace="http:///library.ecore" xmlns="http:///library.ecore" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:complextype name="book"> <xsd:sequence> <xsd:element name="title" type="xsd:string"/> <xsd:element name="pages" type="xsd:integer"/> </xsd:sequence> </xsd:complextype> </xsd:schema>

Generált kód Book Title: String pages: Int Java interface public interface Book extends EObject String gettitle(); void settitle(string value); int getpages(); void setpages(int value); Java implementation public class BookImpl extends EObjectImpl implements Book... protected static final int PAGES_EDEFAULT = 0; protected int pages = PAGES_EDEFAULT; public int getpages() return pages; public void setpages(int newpages) int oldpages = pages; pages = newpages; if (enotificationrequired()) enotify(new ENotificationImpl(this, Notification.SET,..., oldpages, pages));...

Generált kód: relációk, tartalmazás Library Name: String Library 1 0..* books Book Title: String pages: Int books author 0..* 1 Writer Name: String Tartalmazás public EList getbooks() if (books == null) books = new EobjectContainmentEList (Book.class, this,...); return books; public NotificationChain basicsetauthor(..) Writer oldauthor = author; author = newauthor; if (enotificationrequired()) ENotificationImpl notification = new ENotificationImpl(this,...); if (msgs == null) msgs = notification; else msgs.add(notification); return msgs; Kétirányú reláció public void setauthor(writer newauthor) if (newauthor!= author) NotificationChain msgs = null; if (author!= null) msgs = ((InternalEObject)author). einverseremove(this,..., msgs); if (newauthor!= null) msgs = ((InternalEObject)newAuthor). einverseadd(this,..., msgs); msgs = basicsetauthor(newauthor, msgs); if (msgs!= null) msgs.dispatch(); else if (enotificationrequired()) enotify(new ENotificationImpl(this,...));

Továbbá... Factories public interface LibraryFactory extends EFactory LibraryFactory einstance = new LibraryFactoryImpl(); Book createbook(); Writer createwriter(); Library createlibrary(); LibraryPackage getlibrarypackage(); Használat LibraryFactory factory = LibraryFactory.eINSTANCE; Book book = factory.createbook(); Writer writer = factory.createwriter(); writer.setname("william Shakespeare"); book.settitle("king Lear"); book.setauthor(writer); A metódus törzseket az Impl osztályokban meg kell írni! Módosítások védelme /** *... * @generated NOT */ public String gettitle() // módosítás... return title; Értesítés kérése I. Adapter bookobserver =... book.eadapters().add(bookobserver); EObject someobject =...; Értesítés kérése II. AdapterFactory someadapterfactory =...; Object requiredtype =...; if(someadapterfactory.isfactoryfortype(requiredtype)) Adapter theadapter = someadapterfactory.adapt(someobject, requiredtype);...

Valamint... A kódgenerátor intelligens, jól paraméterezhető, és ha kell a sablonok is módosíthatók Nem említettük: EMF.Edit: további wrapper osztályok az Impl. fölé: CommandStack magasszintű modell szerk. Parancsokhoz Eclipse Property Sheet + attribútum szerkesztő segédletek enotification IViewerNotification... tkp. részletkérdés, mert elfedhető a GMF-fel EMF.Editor: hibrid grafikus/szöveges TreeView editor... használjuk inkább a GMF-et

2. Graphical Editing Framework (GEF) Előadás anyaga http://www.eclipse.org/gef/reference/gef Tutorial 2005.ppt Eclipse Runtime-ban futó grafikus alkalmazásokat készítő keretrendszer Bővíthető, magas szintű eszköztár a leggyakoribb igényeknek megfelelő funkcionalitás megvalósításával RCP ui.views Platform Runtime SWT GEF Draw2D

Vizualizáció GEF Célkitűzések Modell grafikus megjelenítése Szerkesztés : modell-felhasználó interakció megteremtése GUI beviteli eszközök (egér, bill.) kezelése, Bevitt input modell szintű értelmezése Parancsok, undo/redo Modell változások kezelése Integráció Eclipse környezetbe Menük, billentyűkombinációk, Toolbar-ok, Wizard-ok Property Sheet szerkesztő Eclipse integráció: - gazdag editor/workbench szemléletű eszközkészletet ad - de csak Eclipse RCP-ben használható

GEF Architektúra Interaction Layer Model-to-View mapping Workbench Integration Rendering Layout Scaling Native (SWT) Layer

Egyszerű példa, grafikus lehetőségek 1 2 3 4 5 6 7 8 9 10 11 12 Display d = new Display(); Shell shell = new Shell(d); shell.setlayout(new FillLayout()); FigureCanvas canvas = new FigureCanvas(shell); canvas.setcontents(new Label("Hello World")); shell.settext( draw2d ); shell.open(); while (!shell.isdisposed()) while (!d.readanddispatch()) d.sleep(); 2 13 6 4 5 BorderLayout Left XYLayout Top Center Bottom Right Canvas/Figure hierarcha 2 4 3 1 5 FlowLayout 1 2 3 4 6 ToolbarLayout Bővíthető Layout Manager -ek 12,8,20,10 30,20,27,14 1 2 3

További lehetőségek Koordináta-transzformációk, zoom, nézetek Szöveg-megjelenítés: Rich text a org.eclipse.draw2d.text-ből Keretek, színek, sortörés, font-ok, offset API stb... Label : text + icon, grafikus elemhez kötötten (pl. vonal közepe felett ) Connection: speciális Figure forrás/cél anchor Router-ek Anchor Location Labels placed using ConnectionLocators Midpoint Endpoint v u Fig 2 PolylineConnection (pl. Fan, Bendpoint, Manhattan, ShortestPath) Fig 1 PolygonDecoration 2 1-4 -3-2 -1-1 -2

Model-View-Controller Model Root (Diagram) Children Diagram EditPart fig fig fig A tartalmazás reláció tükröződik, de nem feltétlen kell 1-1-1 megfeleltetés (azért nem árt...) Model EditPart Factory EditParts GraphicalViewer Figures @#!

EditPart-ok készítése AbstractGraphicalEditPart-ból származtatva: 1. createfigure() - Figure megrajzolása (draw2d/swt) 2. refreshvisuals() - modell állapotának lekérdezése, grafika frissítése 3. getmodelchildren() - megfelelő modell objektum gyermekeinek lekérdezése Az editpart-okat be kell csatolni a modell változás-értesítés mechanizmusába: az editpart felelőssége, hogy intelligensen kitalálja, mely gyermekén kell refreshvisuals()-t hívni (újrarajzolni) GEF objektumok becsatolása EMF notification láncba problémás, de megoldható. Automatikus (generált) megoldást majd a GMF ad.

Szerkesztő parancsok életútja Tool Tool EditPart EditPolicy SWT Events Requests Requests showfeedback() erasefeedback() getcommand() Commands Commands EditPolicy Request Command EditPart-hoz rendelhető logika pl. figure anchorpoint-jára kattitva connection mozgató parancs visszaadása? Stack Stack Commands Tool Több grafikus elemre hivatkozó művelet vezénylő állapotgépe pl. creationtool: Palettából Canvas-ra DnD visszajelzéssel

Big Picture EditDomain EditPartViewer EditPartViewer EditPartViewer 1. acts on Model 2. events 3. request 4. command Palette CommandStack Active Tool Tool1 Tool2 Tool3 5. execute Command Command Command Command 6. modifies

3. Graphical Modeling Framework (GMF) EMF + GEF szisztematikus összeházasítása Kiindulás: EMF osztálydiagram Eredmény: GEF alkalmazás (plugin) A szükséges kód generálása 50-100%-ban automatikus, wizard-okkal fél-grafikus editorokkal támogatott (Fél)automatikusan generálja azt a glue kódot és alkalmazás logikát, amit unalmas lenne megírni Grafikus Eclipse alkalmazások fejlesztésében Segít? Nagyon sokat Korlátoz? Kicsit

GMF fejlesztés menete Domain Model: class diagram Domain Gen Model: EMF kódgenerátor paraméterek Graphical Def Model: Figure definíciók (modellek) Tooling Model: GEF Tool -ok Mapping Model: Figure Model elem Tool összerendelés Diagram Gen Model: GMF kódgenerátor paraméterek