Δημιουργία μοντέλου EMF

Τελευταία ενημέρωση: 18 Ιουνίου 2007

Αυτό το πρόγραμμα εκμάθησης είναι μια βήμα προς βήμα περιγραφή της διεργασίας δημιουργίας ενός μοντέλου EMF και μιας απλής λειτουργίας επεξεργασίας ιδιοτήτων για αυτό. Αυτό το πρόγραμμα εκμάθησης επιδεικνύει πόσο εύκολη είναι με το EMF η μετάβαση από έναν απλό ορισμό μοντέλου σε μια πλήρη λειτουργία επεξεργασίας για αυτό το μοντέλο.

Το μοντέλο θα δημιουργήσει δομές όπως αυτή στο UML (ανατρέξτε στο θέμα Επισκόπηση του Eclipse Modeling Framework για μια περιγραφή αυτού του μοντέλου):

Μοντέλο βιβλιοθήκης UML

Θα παρουσιαστεί ο τρόπος δημιουργίας ενός μοντέλου EMF μέσω μιας από δύο διαφορετικές προελεύσεις: ένα μοντέλο Rational Rose ή ένα σύνολο διεπαφών και κλάσεων Java με σημειώσεις.

Τα αποτυπώματα οθόνης βασίζονται στην έκδοση 3.3.0 RC4 του Eclipse SDK και στην έκδοση 2.3.0 RC3 του EMF.


Περιεχόμενα

Βήμα 0: Προϋποθέσεις
Βήμα 1: Εισαγωγή του μοντέλου από το Rose ή Ορισμός του μοντέλου με χρήση Java με σημειώσεις
Βήμα 2: Δημιουργία κώδικα μοντέλου EMF
Βήμα 3: Δημιουργία λειτουργίας επεξεργασίας για το μοντέλο
Βήμα 4: Εκτέλεση της δημιουργημένης λειτουργίας επεξεργασίας


 περιεχόμενα

Βήμα 0: Προϋποθέσεις

Το πακέτο EMF Runtime περιλαμβάνει τη γεννήτρια EMF και έναν αριθμό σχετικών πρόσθετων λειτουργιών. Μετά την εγκατάσταση αυτού του πακέτου, επαληθεύστε ότι είναι διαθέσιμο στο περιβάλλον Eclipse:

Περαιτέρω πρόσθετες λειτουργίες EMF δεν είναι απαραίτητες για αυτό το πρόγραμμα εκμάθησης. Η εμφάνιση ή όχι αυτών των πρόσθετων λειτουργιών εξαρτάται από τα πακέτα EMF που έχετε εγκαταστήσει.


 περιεχόμενα

Βήμα 1α: Εισαγωγή μοντέλου από το Rose

Το αρχείο Rose για τη βιβλιοθήκη μοντέλων βρίσκεται εδώ: library.mdl. Αποθηκεύστε το κάπου στον σταθμό εργασίας σας.

Δημιουργήστε ένα νέο έργο EMF στον χώρο εργασίας:


 περιεχόμενα

Βήμα 1β: Ορισμός του μοντέλου με χρήση Java με σημειώσεις

Αντί να κάνουμε εισαγωγή του μοντέλου από ένα διάγραμμα Rose, μπορούμε να ξεκινήσουμε με ένα σύνολο διεπαφών και κλάσεων Java που αναλογούν στις αντίστοιχες κλάσεις και είδη απαρίθμησης του μοντέλου βιβλιοθήκης. Ο κώδικας αυτός είναι ο ελάχιστος που απαιτείται για την παρουσίαση των επιθυμητών λειτουργιών. Με βάση αυτό τον κώδικα, θα κατασκευαστούν ένα μοντέλο Ecore και μια μοντέλο γεννήτριας τα οποία στη συνέχεια θα χρησιμοποιηθούν για τη δημιουργία του υπόλοιπου κώδικα. Στον κώδικα προστίθενται σημειώσεις με προσδιοριστικά "@model" σε σχόλια Javadoc, προκειμένου να οριστεί κάθε μη προεπιλεγμένη τιμή για τα γνωρίσματα και τις παραπομπές των αντικειμένων Ecore.

Ξεκινώντας από την έκδοση EMF 2.3, μπορείτε να ορίσετε τις διεπαφές Java με σημειώσεις χρησιμοποιώντας στοιχεία Generics και Enumerations της Java 5.0. Θα παρουσιάσουμε και τις δύο προσεγγίσεις στον κατάλληλο χρόνο. Προκειμένου να χρησιμοποιήσετε την Java 5.0, βεβαιωθείτε ότι η τιμή "Java/Μεταγλωττιστής/Επίπεδο συμβατότητας μεταγλωττιστή" του Eclipse έχει οριστεί σε "5.0" ή περισσότερο.


Java/Μεταγλωττιστής/Επίπεδο συμβατότητας μεταγλωττιστή


Ακολουθούν οι διεπαφές που περιγράφουν το μοντέλο βιβλιοθήκης:

Library.java (Java 1.4)
package org.eclipse.example.library;
import java.util.List;

/**
 * @model
 */
public interface Library
{
  /**
   * @model
   */
  String getName();

  /**
   * @model type="Writer" containment="true"
   */
  List getWriters();

  /**
   * @model type="Book" containment="true"
   */
  List getBooks();
}
Library.java (Java 5.0)
package org.eclipse.example.library;
import java.util.List;

/**
 * @model
 */
public interface Library
{
  /**
   * @model
   */
  String getName();

  /**
   * @model containment="true"
   */
  List<Writer> getWriters();

  /**
   * @model containment="true"
   */
  List<Book> getBooks();
}
 
Book.java
package org.eclipse.example.library;

/**
 * @model
 */
public interface Book
{
  /**
   * @model
   */
  String getTitle();

  /**
   * @model default="100"
   */
  int getPages();

  /**
   * @model
   */
  BookCategory getCategory();

  /**
   * @model opposite="books"
   */
  Writer getAuthor();
}
 
Writer.java (Java 1.4)
package org.eclipse.example.library;

/**
 * @model
 */
public interface Writer
{
  /**
   * @model
   */
  String getName();

  /**
   * @model type="Book" opposite="author"
   */
  java.util.List getBooks();
}
Writer.java (Java 5.0)
package org.eclipse.example.library;

/**
 * @model
 */
public interface Writer
{
  /**
   * @model
   */
  String getName();

  /**
   * @model opposite="author"
   */
  java.util.List<Book> getBooks();
}
 
BookCategory.java (Java 1.4)
package org.eclipse.example.library;

/**
 * @model
 */
public class BookCategory
{
  /**
   * @model name="Mystery"
   */
  public static final int MYSTERY = 0;

  /**
   * @model name="ScienceFiction"
   */
  public static final int SCIENCE_FICTION = 1;

  /**
   * @model name="Biography"
   */
  public static final int BIOGRAPHY = 2; }
BookCategory.java (Java 5.0)
package org.eclipse.example.library;

/**
 * @model
 */
public enum BookCategory
{
  /**
   * @model name="Mystery"
   */
  MYSTERY,

  /**
   * @model name="ScienceFiction"
   */
  SCIENCE_FICTION,

  /**
   * @model name="Biography"
   */
  BIOGRAPHY;
}

Δημιουργήστε ένα νέο κενό έργο EMF στο χώρο εργασίας:

Δημιουργήστε την πρώτη διεπαφή Java:

Δημιουργήστε τις άλλες δύο διεπαφές (Book.java και Writer.java) και την κλάση (BookCategory.java) με τον ίδιο τρόπο. Για να δημιουργήσετε την κλάση επιλέξτε "Δημιουργία/Κλάση" από το αναδυόμενο μενού, αντί για "Δημιουργία/Διεπαφή".

Δημιουργήστε το μοντέλο EMF:


 περιεχόμενα

Βήμα 2: Δημιουργία κώδικα μοντέλου EMF

Το μοντέλο γεννήτριας εμφανίζει ένα κεντρικό αντικείμενο, το οποίο αντιπροσωπεύει ολόκληρο το μοντέλο. Αυτό το αντικείμενο μοντέλου έχει θυγατρικά στοιχεία που αντιπροσωπεύουν τα πακέτα του, των οποίων τα θυγατρικά στοιχεία αντιπροσωπεύουν ταξινομητές (κλάσεις και είδη δεδομένων, συμπεριλαμβανομένων ειδών απαρίθμησης). Τα θυγατρικά στοιχεία των κλάσεων είναι γνωρίσματα κλάσεων, παραπομπές και λειτουργίες. Τα θυγατρικά στοιχεία των ειδών απαρίθμησης είναι λεκτικές μονάδες απαρίθμησης.

Στις περισσότερες περιπτώσεις, δεν χρειάζεται να τροποποιηθούν οι προεπιλεγμένες τιμές των ιδιοτήτων, αλλά αυτές οι επιλογές παρέχουν μεγάλο βαθμό ελέγχου του δημιουργημένου κώδικα. Μια επιλογή που αξίζει να επισημάνουμε είναι η δεύτερη που απεικονίζεται στην παραπάνω εικόνα, "Compliance Level" (Επίπεδο συμβατότητας). Αν επιλέξατε να εκμεταλλευτείτε τις νέες δομές που εισήγαγε η Java 5.0 σε διεπαφές Java με σημειώσεις, ή αν επιθυμείτε να δημιουργήστε κώδικα που να χρησιμοποιεί γενικά είδη, βεβαιωθείτε ότι αυτή η επιλογή έχει τιμή "5.0" ή περισσότερο. Η αρχική τιμή της είναι βασισμένη στην ιδιότητα επιπέδου συμβατότητας του μεταγλωττιστή, η οποία παρουσιάστηκε παραπάνω στο Βήμα 0.

Το μοντέλο γεννήτριας είναι επίσης το σημείο όπου μπορείτε να ξεκινήσετε τη δημιουργία κώδικα. Πατώντας με το δεξί κουμπί του ποντικιού σε ένα αντικείμενο του μοντέλου, μπορείτε να δημιουργήστε κώδικα για αυτό.

Μετά τη δημιουργία, οι διεπαφές κλάσεων και η κλάση απαρίθμησης θα έχουν δημιουργηθεί (αν το μοντέλο εισήχθη από το Rose) ή θα έχουν συμπληρωθεί (αν το μοντέλο ορίστηκε με τη χρήση Java με σημειώσεις), και θα έχουν δημιουργηθεί δύο νέες διεπαφές, μία για το ίδιο το πακέτο και μία για τη μέθοδο κατασκευής. Θα υπάρχουν επίσης δύο νέα πακέτα, με επιθήματα "impl" και "util", τα οποία περιέχουν υλοποιήσεις των διεπαφών και επιπρόσθετες κλάσεις βοηθήματος, και τα δύο είδη αρχείων δήλωσης για το μοντέλο πρόσθετης λειτουργίας: "plugin.xml" και "MANIFEST.MF".

Αν ορίσατε το μοντέλο χρησιμοποιώντας Java με σημειώσεις, μπορεί να δείτε μια προειδοποίηση στην προβολή Προβλήματα: "Η εισαγωγή java.util.List δεν χρησιμοποιείται ποτέ". Αυτή η προειδοποίηση είναι αναμενόμενη και δεν θα σας εμποδίσει να προχωρήσετε στο επόμενο βήμα.

Αν αλλάξετε το μοντέλο μπορείτε να το επαναδημιουργήσετε και οι αλλαγές θα συγχωνευτούν με όποιες πιθανές αλλαγές μέσω πληκτρολόγησης έγιναν στον κώδικα. Μπορείτε επίσης να δημιουργήσετε επιλεκτικά ένα υποσύνολο του κώδικα μοντέλου πατώντας με το δεξί κουμπί του ποντικιού σε ένα πακέτο, κλάση ή αντικείμενο απαρίθμησης και επιλέγοντας "Δημιουργία κώδικα μοντέλου" από το αναδυόμενο μενού.


 περιεχόμενα

Βήμα 3: Δημιουργία λειτουργίας επεξεργασίας για το μοντέλο

Μια πλήρως λειτουργική λειτουργία επεξεργασίας του Eclipse μπορεί επίσης να δημιουργηθεί για οποιοδήποτε μοντέλο. Ως προεπιλογή, διαχωρίζεται σε δύο πρόσθετες λειτουργίες: μια πρόσθετη λειτουργία "edit", η οποία περιλαμβάνει προσαρμογείς που παρέχουν μια δομημένη προβολή και εκτελούν τροποποιήσεις των αντικειμένων του μοντέλου με χρήση εντολών, και μια πρόσθετη λειτουργία "editor" η οποία παρέχει το περιβάλλον χρήστη για τη λειτουργία επεξεργασίας και τον οδηγό.

Γενικά, αν επιθυμείτε να δημιουργήσετε τις πρόσθετες λειτουργίες μοντέλου, τροποποίησης και λειτουργίας επεξεργασίας σε ένα και μόνο βήμα, μπορείτε να το κάνετε επιλέγοντας "Δημιουργία όλων" από το αναδυόμενο μενού.

Αυτή η επιλογή θα δημιουργήσει επίσης μια πρόσθετη λειτουργία tests, που περιέχει σκελετούς δοκιμής JUnit για τον έλεγχο των μεταβλητών λειτουργιών που έχουν οριστεί στο μοντέλο. Το μοντέλο αυτό δεν περιλαμβάνει καμία τέτοια λειτουργία, αλλά γενικά θα χρειαστεί να συμπληρώσετε εσείς τα κύρια τμήματα αυτών των δοκιμών. Η πρόσθετη λειτουργία tests περιλαμβάνει επίσης ένα απλό παράδειγμα κλάσης το οποίο παρουσιάζει τον τρόπο φόρτωσης και επικύρωσης ενός μοντέλου σε μια ανεξάρτητη εφαρμογή.

Ο κώδικας θα πρέπει να μεταγλωττίζεται αυτόματα κατά τη δημιουργία του, και θα πρέπει να αναμεταγλωττίζεται κάθε φορά που αλλάζει. Αν έχετε απενεργοποιήσει την αυτόματη δόμηση στις ιδιότητες του πάγκου εργασίας, μπορείτε να ξεκινήσετε τη διαδικασία μεταγλώττισης μη αυτόματα:


 περιεχόμενα

Βήμα 4: Εκτέλεση της δημιουργημένης λειτουργίας επεξεργασίας

Για να δοκιμάσετε τις νέες πρόσθετες λειτουργίες, θα πρέπει να εκκινήσετε μια δεύτερη χρήση του Eclipse. Οι πρόσθετες λειτουργίες θα εκτελεστούν σε αυτόν τον πάγκο εργασίας.

Ο οδηγός μοντέλου βιβλιοθήκης μπορεί πλέον να χρησιμοποιηθεί για τη δημιουργία μιας νέας χρήσης του μοντέλου.

Το κεντρικό αντικείμενο σε αυτή τη λειτουργία επεξεργασίας αντιστοιχεί στον πόρο My.library. Κάτω από αυτό βρίσκεται μια βιβλιοθήκη, το αντικείμενο που επιλέχτηκε ως αντικείμενο μοντέλου στον οδηγό.


περιεχόμενα