Your SlideShare is downloading. ×

Eclipse emf

241
views

Published on

Introduction to Eclipse EMF.

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
241
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
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 --> Applicazione definita ad alto livello. ... Ci sono dubbi sull'abilità di MDA di realizzare le promesse prefissate: - Visione ambiziosa - Espressività vs Complessità del modello - Disponibilità di implementazioni (“vaporware”)
  • - OMG: standard - PIM --> 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'implementazione. Può portare un sostanziale vantaggio in termini di produttività.
  • Transcript

    • 1. Introduzione aIng. ANDREA SALICETTI Software Engineer
    • 2. Obiettivo
    • 3. AgendaModellazione & MDADefinizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    • 4. Agenda➔ Modellazione & MDADefinizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    • 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. 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. Agenda✔ Modellazione & MDA➔ Definizione di modelli con EMFArchitettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    • 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. Modello EMF (Come?) Ecore XSD
    • 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. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF➔ Architettura EMFGenerazione di codiceSviluppare con EMFConclusioni
    • 12. Architettura EMFModello Editor genera Applicazione Core Edit Codegen EMF Runtime EMF Tools EMF Framework Eclipse Platform
    • 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. 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. 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. Architettura EMF - EcoreEcore = metamodello
    • 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. 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. 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. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF✔ Architettura EMF➔ Generazione di codiceSviluppare con EMFConclusioni
    • 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. 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. 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. 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. Riferimenti bidirezionali Invariante garantita da protocollo di handshaking realizzato dai metodieInverseRemove()EinverseAdd()richiamati nel setter
    • 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. 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. 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. 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. 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. 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. 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. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF✔ Architettura EMF✔ Generazione di codice➔ Sviluppare con EMFConclusioni
    • 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. 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. 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. 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. 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. Agenda✔ Modellazione & MDA✔ Definizione di modelli con EMF✔ Architettura EMF✔ Generazione di codice✔ Sviluppare con EMF➔ Conclusioni
    • 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

    ×