Introduzione aIng. ANDREA SALICETTI Software Engineer
Obiettivo
AgendaModellazione & MDADefinizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusioni
Agenda➔    Modellazione & MDADefinizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusi...
Modellazione & MDA           OMG           Platform Independent ModelMR AO  DR    C      Tecnologie PIM to PSMD I    HE V ...
Modellazione & MDA         Si può fare?          Visione troppo ambiziosa?MR AO  DR     Espressività VS Complessità del   ...
Agenda✔   Modellazione & MDA➔    Definizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConc...
Modello EMF (Cosa?)Descrizione di un dato applicativoAttributi delloggettoRelazioni (associazioni) fra oggettiOperazioni d...
Modello EMF (Come?)             Ecore    XSD
Modello EMF (Perché?)UML, XML, Java: 3 forme - 1 modello   Non solo queste..Dal modello, EMF può generare:   Codice Java (...
Agenda✔   Modellazione & MDA✔   Definizione di modelli con EMF➔    Architettura EMFGenerazione di codiceSviluppare con EMF...
Architettura EMFModello      Editor        genera                                    Applicazione Core         Edit       ...
Architettura EMF - Componenti                Core        Edit           Codegen                  EMF Runtime              ...
Architettura EMF                 Core         Edit             Codegen                  EMF Runtime                 EMF To...
Architettura EMF - Componenti                Core        Edit            Codegen                 EMF Runtime              ...
Architettura EMF - EcoreEcore = metamodello
Architettura EMF - EcoreI modelli applicativi sono istanze di classiEcore EAttribute       (name=“name“)                  ...
Architettura EMF - EcoreFormato persistente: XMI (.ecore / .emof)<eClassifiers xsi:type="ecore:EClass" name="HierarchyRoot...
Modello – Importazione e             Generazione                                                 Edit                     ...
Agenda✔   Modellazione & MDA✔   Definizione di modelli con EMF✔   Architettura EMF➔    Generazione di codiceSviluppare con...
Codice di modello generatoInterfacce e implementazioni di ogni modello  Includono gli accessor per ogni attributo/riferime...
Notifiche di cambio statoOgni EObject è anche un notificatore                                                             ...
Notifiche di cambio statoNotifica efficiente dal setter public String getName() {                    HierarchyNodeImpl.jav...
Riferimenti bidirezionali                                                   Invariante:                                   ...
Riferimenti bidirezionali Invariante garantita da protocollo di handshaking realizzato  dai metodieInverseRemove()Einverse...
Typesafe Enum●    Metamodelli ENUM implementati secondo il pattern Java    typesafe enumpublic enum NodeType implements En...
Factory & Package●   Factory per la creazione di classi di modelloMDDHierarchyFactory factory = MDDHierarchyFactory.eINSTA...
Reflective API (EObject)●   EObject è implementata da TUTTE le classi EMF●   Fornisce API efficienti per la manipolazione ...
Reflective API (EObject)●    Implementazione generata di metodi introspettivi basata su    switchpublic Object eGet(int fe...
Sinossi degli artefatti generati    Modello    Modello                                                                 ...
Rigenerazione & Merge●   Il generatore EMF è un merging generator:/**                                    HierarchyNodeImpl...
Rigenerazione & Merge●   I metodi generati possono essere estesi con codice custom    mediante r idir ezionepublic String ...
Agenda✔   Modellazione & MDA✔   Definizione di modelli con EMF✔   Architettura EMF✔   Generazione di codice➔    Sviluppare...
Persistenza●   Un dato persistente è associato a una    risorsa●   Gli oggetti possono essere suddivisi fra    diverse ris...
Resource Set●   Contesto per più risorse che hanno fra loro    riferimenti●   Tipicamente è unistanza di ResourceSetImpl● ...
Registries●   Resource Factory Registry    ●   Restituisce una factory per il tipo di risorsa dato    ●   Basato su schema...
Resource●   Container per oggetti da rendersi persistenti    insieme    ●   Converte a e da formato persistente mediante s...
Reflection●   Set di un attributo mediante API generate    Master master = ...    master.setName(“radice“);●   ... oppure ...
Agenda✔   Modellazione & MDA✔   Definizione di modelli con EMF✔   Architettura EMF✔   Generazione di codice✔   Sviluppare ...
Conclusioni●EMF è un tool di modellazione a basso costo perJava●Promuove il valore del modello intrinsecodellapplicazione ...
Upcoming SlideShare
Loading in …5
×

Eclipse emf

464 views

Published on

Introduction to Eclipse EMF.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
464
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Imparare concetti di modellazione e capire come EMF può aiutarci a scrivere applicazioni in maniera drasticamente più veloce, semplicemente sfruttando il modello che il più delle volte è già definito. CDO è un progetto per la distribuzzione di modelli EMF condivisi e insieme una soluzione per un rapido server-based mapping O/R. SDO è un framework che semplifica e unifica lo sviluppo delle data application in architetture SOA (Service Oriented Architecture). Support ae integra il formato xml e incorpora i patterns J2EE e le best practices. EMF include un implementazione EMF-based di Service Data Objects. Teneo è una soluzione per la persistenza su database per EMF, che utilizza Hibernate o EclipseLink. Supporta automaticamente la creazione di mapping tra EMF e basi dati relazionali. Gli oggetti EMF possono essere immagazzinati e recuperati utilizzando sistemi di query avanzati (HQL or EJB-QL). Model Query fornisce strumenti per costruire ed eseguire query su modelli EMF. Validation Framework fornisce la possiilità di definire costraints sul modello e sulla sua definizione, algoritmi per le strategie custom e model traversal e listener di validazione. EMF sarà parte integrante del prossimo rilascio di Eclipse previsto a Giugno 2009 (Galileo).
  • - OMG: standard - PIM --&gt; Applicazione definita ad alto livello. ... Ci sono dubbi sull&apos;abilità di MDA di realizzare le promesse prefissate: - Visione ambiziosa - Espressività vs Complessità del modello - Disponibilità di implementazioni (“vaporware”)
  • - OMG: standard - PIM --&gt; Applicazione definita ad alto livello. ... Contrariamente a quanto pensino molti programmatori, la modellazione è utile ancor più della documentazione. • Quasi tutti i programmi gestiscono un qualche genere di modello, definito usando UML, XML Schema, qualche altro genere di linguaggio o implicitamente in Java • EMF si propone di estrarre questo modello „intrinseco“ e di generare parte dell&apos;implementazione. Può portare un sostanziale vantaggio in termini di produttività.
  • Eclipse emf

    1. 1. Introduzione aIng. ANDREA SALICETTI Software Engineer
    2. 2. Obiettivo
    3. 3. AgendaModellazione & MDADefinizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    4. 4. Agenda➔ Modellazione & MDADefinizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    5. 5. Modellazione & MDA OMG Platform Independent ModelMR AO DR C Tecnologie PIM to PSMD I HE V Comprende diversi standard aperti:L E I N T UML (Unified Modeling Language) E C MOF (Meta-Object Facility) T XMI (XML Metadata Interchange) U R CWM (Common Warehouse Mode E
    6. 6. Modellazione & MDA Si può fare? Visione troppo ambiziosa?MR AO DR Espressività VS Complessità del C modelloD I HE V E I VaporwareL N T ? EMF ! E Permette di generare automaticamente parte del C codice, spianando la strada allo sviluppo di sistemi più T complessi! Modelli semplici da accoppiare a codice di U business! R Realtà dal 2002! E
    7. 7. Agenda✔ Modellazione & MDA➔ Definizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    8. 8. Modello EMF (Cosa?)Descrizione di un dato applicativoAttributi delloggettoRelazioni (associazioni) fra oggettiOperazioni disponibili su ogni oggettoVincoli (es. cardinalità) su oggetti e relazioni UML UML Class Diagram EMF
    9. 9. Modello EMF (Come?) Ecore XSD
    10. 10. Modello EMF (Perché?)UML, XML, Java: 3 forme - 1 modello Non solo queste..Dal modello, EMF può generare: Codice Java (modello + UI) XML Schema Componenti (plug-in) eclipse
    11. 11. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF➔ Architettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    12. 12. Architettura EMFModello Editor genera Applicazione Core Edit Codegen EMF Runtime EMF Tools EMF Framework Eclipse Platform
    13. 13. Architettura EMF - Componenti Core Edit Codegen EMF Runtime EMF Tools EMF FrameworkEMF Core RuntimeFramework di notifica (pattern observer)Metamodello EcorePersistenza (XML/XMI)ValidazioneRiflette i cambiamenti sul modello
    14. 14. Architettura EMF Core Edit Codegen EMF Runtime EMF Tools EMF FrameworkEMF.EditSupporto agli editor e alle viste associate / basate sul modelloEditor di default introspettivo
    15. 15. Architettura EMF - Componenti Core Edit Codegen EMF Runtime EMF Tools EMF FrameworkCodegenGerenatore di codice per modelli ed editor applicativiFramework di importazione / esportazione del modello estendibile
    16. 16. Architettura EMF - EcoreEcore = metamodello
    17. 17. Architettura EMF - EcoreI modelli applicativi sono istanze di classiEcore EAttribute (name=“name“) EClass EClass (name=“HierarchyNode“) (name=“Detail“) EAttribute eReferenceType (name=“type“) (upperBound = -1)EClass EClass(name=“HierarchyRoot“) (name=“Master“) eReferenceType (upperBound = 1)
    18. 18. Architettura EMF - EcoreFormato persistente: XMI (.ecore / .emof)<eClassifiers xsi:type="ecore:EClass" name="HierarchyRoot"> <eStructuralFeatures xsi:type="ecore:EReference" name="master" eType="#//Master" /> <eClassifiers xsi:type="ecore:EClass" name="HierarchyNode" abstract="true">    <eStructuralFeatures xsi:type="ecore:EReference" name="details" upperBound="­1"        eType="#//Detail" containment="true"/>    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1"    eType="#//NodeType"/>    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString" iD="true"/>  </eClassifiers>  <eClassifiers xsi:type="ecore:EClass" name="Master" eSuperTypes="#//HierarchyNode"/>  <eClassifiers xsi:type="ecore:EClass" name="Detail" eSuperTypes="#//HierarchyNode"/>  <eClassifiers xsi:type="ecore:EEnum" name="NodeType">    <eLiterals name="JDOQL" literal="JDOQL"/>    <eLiterals name="SQL" value="1" literal="SQL"/>  </eClassifiers></eClassifiers>
    19. 19. Modello – Importazione e Generazione Edit Ecore XSDGeneratore Editor Personalizzabile (template, JET) Integrato con JDT / Ant Modellazione grafica Ecore Supporta la rigenerazione e il merge
    20. 20. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF✔ Architettura EMF➔ Generazione di codiceSviluppare con EMFConclusioni
    21. 21. Codice di modello generatoInterfacce e implementazioni di ogni modello Includono gli accessor per ogni attributo/riferimento public interface HierarchyNode extends EObject { EList<Detail> getDetails(); NodeType getType(); void setType(NodeType value); String getName(); void setName(String value); Object getPersistentClass(); void setPersistentClass(Object value); } public abstract class HierarchyNodeImpl extends EObjectImpl implements HierarchyNode { ... }
    22. 22. Notifiche di cambio statoOgni EObject è anche un notificatore Adapter Manda notifiche al cambio di un attributo / riferimento del modello Gli observer possono aggiornare viste o oggetti dipendenti adapter.notifyChanged() Gli observer sono anche Adapter setName(...) Master Adapter adapter= ... master.eAdapters().add(adapter);
    23. 23. Notifiche di cambio statoNotifica efficiente dal setter public String getName() { HierarchyNodeImpl.java return name; } public void setName(String newName) { String oldName = name; name = newName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, ..., oldName, name)); }
    24. 24. Riferimenti bidirezionali Invariante: (HierarchyNode hN) hN.getTieProperty().getBackProperty() == hNpublic interface HierarchyNode extends EObject { … HierarchyNode.java Detail getTieProperty(); void setTieProperty(Detail value);}public interface Detail extends EObject { HierarchyNode getBackProperty(); Detail.java void setBackProperty(HierarchyNode value);}
    25. 25. Riferimenti bidirezionali Invariante garantita da protocollo di handshaking realizzato dai metodieInverseRemove()EinverseAdd()richiamati nel setter
    26. 26. Typesafe Enum● Metamodelli ENUM implementati secondo il pattern Java typesafe enumpublic enum NodeType implements Enumerator{ JDOQL(0, "JDOQL", "JDOQL"), SQL(1, "SQL", "SQL"); public static final int JDOQL_VALUE = 0; public static final int SQL_VALUE = 1; private final int value; private final String name; private final String literal; private NodeType(int value, String name, String literal) { ... } ...}
    27. 27. Factory & Package● Factory per la creazione di classi di modelloMDDHierarchyFactory factory = MDDHierarchyFactory.eINSTANCE;Master master = factory.createMaster();● Package per laccesso ai metadatiMDDHierarchyPackage mddPackage = MDDHierarchyPackage.eINSTANCE;EClass masterClass = MDDHierarchyPackage.Literals.MASTER;// oppure mddPackage.getMaster();Eattribute typeAtt = MDDHierarchyPackage.Literals.HIERARCHY_NODE__TYPE; // oppure mddPackage.getHierarchyNode_Type() // oppure (EAttribute) masterClass.getEStructuralFeature( MDDHierarchyPackage.HIERARCHY_NODE__TYPE)
    28. 28. Reflective API (EObject)● EObject è implementata da TUTTE le classi EMF● Fornisce API efficienti per la manipolazione introspettiva degli oggetti ● Utilizzato dal framework (presistenza, utility di copia, ● comandi di editing) Chiave per integrare componenti basati su EMF con altre applicazionipublic interface EObject{ EClass eClass(); Object eGet(EStructuralFeature sf); void eSet(EStructuralFeature sf, Object val); ...}
    29. 29. Reflective API (EObject)● Implementazione generata di metodi introspettivi basata su switchpublic Object eGet(int featureID, ...) { HierarchyNodeImpl.java switch (featureID) { case MDDHierarchyPackage.HIERARCHY_NODE__TIE_PROPERTY: return getTieProperty(); case MDDHierarchyPackage.HIERARCHY_NODE__TYPE: return getType(); case MDDHierarchyPackage.HIERARCHY_NODE__NAME: return getName(); case MDDHierarchyPackage.HIERARCHY_NODE__PERSISTENT_CLASS: return getPersistentClass(); } return super.eGet(featureID, ...);}
    30. 30. Sinossi degli artefatti generati Modello Modello   Edit ((UIIndependent))  Edit UI Independent  Interfacce eeclassi Interfacce classi   Item providers Item providers   Enum type-safe  Item provider adapter factory  Enum type-safe  Item provider adapter factory  Package (metadati)  Package (metadati)  Factory  Factory  Switch utility  Switch utility  Editor ((UIdependent))  Editor UI dependent  Adapter factory base  Adapter factory base  Model wizard Model wizard   Validatori  Editor  Validatori  Editor  Risorse custom  Contributor allaction bar  Risorse custom  Contributor allaction bar  XML Processor  Advisor (RCP)  XML Processor  Advisor (RCP)  Component artifacts Component artifacts Test Test   Manfest, classi plug-in, Manfest, classi plug-in,  Test cases Test cases  properties, icone, ... properties, icone, ...  Test suite  Test suite  Esempio stand-alone  Esempio stand-alone
    31. 31. Rigenerazione & Merge● Il generatore EMF è un merging generator:/** HierarchyNodeImpl.java * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public String getName() { return name; }● Gli elementi annotati come @generated possono essere rigenerati / rimossi dal generatore EMF.
    32. 32. Rigenerazione & Merge● I metodi generati possono essere estesi con codice custom mediante r idir ezionepublic String getName() { HierarchyNodeImpl.java return format(getNameGen());}/** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */public String getNameGen() { return name;}
    33. 33. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF✔ Architettura EMF✔ Generazione di codice➔ Sviluppare con EMFConclusioni
    34. 34. Persistenza● Un dato persistente è associato a una risorsa● Gli oggetti possono essere suddivisi fra diverse risorse allinterno di un insieme ben definito (ResourceSet)● I Proxy rappresentano gli oggetti referenziati in altre risorse
    35. 35. Resource Set● Contesto per più risorse che hanno fra loro riferimenti● Tipicamente è unistanza di ResourceSetImpl● Fornisce metodi factory per la creazione di nuove risorse nellinsieme ResourceSet rs = new ResourceSetImpl(); URI uri = URI.createFileURI("C:/data/po.xml"); Resource resource = rs.createResource(uri);● Fornisce anche laccesso ai registri, un convertitore di URI e optioni di default per il
    36. 36. Registries● Resource Factory Registry ● Restituisce una factory per il tipo di risorsa dato ● Basato su schema URI, estensione file o content type ● Determina il formato per il salvataggio / caricamento ● Se non si trova una factory locale, delega al registry globale ● Resource.Factory.Registry.INSTANCE● Package Registry ● Restituisce il package identificato dal namespace URI dato ● Usato nel caricamento per accedere alle factory per istanziare le classi
    37. 37. Resource● Container per oggetti da rendersi persistenti insieme ● Converte a e da formato persistente mediante save() e load() URI uri = URI.createFileURI("C:/data/po.xml"); Accesso al contenuto mediante getContents() Resource resource = rs.createResource(uri); ● resource.getContents().add(p1); resource.save(null);● EMF fornisce limplementazione generica <PurchaseOrder> XMLResource <shipTo>John Doe</shipTo> Proxy resolution / <next>p2.xml#p2</next> demand load </PurchaseOrder> altre, volendo ● ... ma anche (XMI, EMOF, ...)
    38. 38. Reflection● Set di un attributo mediante API generate Master master = ... master.setName(“radice“);● ... oppure usando le reflective API ! EObject master = ... EClass masterClass = master.eClass(); master.eSet(masterClass.getEStructuralFeature("name"), "radice"); Dynamic EMF
    39. 39. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF✔ Architettura EMF✔ Generazione di codice✔ Sviluppare con EMF➔ Conclusioni
    40. 40. Conclusioni●EMF è un tool di modellazione a basso costo perJava●Promuove il valore del modello intrinsecodellapplicazione per guidare le scelte di sviluppo ● Non cè bisogno di tool CAD di alto livello●Unisce modellazione e programmazione per trarre ilmassimo dei benefici da entrambi● Aumenta la produttività e lintegrabilità● Pone le basi per lo sviluppo model-driven e perlintegrazione dati in Eclipse

    ×