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

Τελευταία ενημέρωση: 31 Μαΐου 2006

Αυτό το πρόγραμμα εκμάθησης αποτελεί την συνέχεια της ενότητας Δημιουργία μοντέλου EMF, στην οποία δημιουργείτε ένα απλό μοντέλο βιβλιοθήκης. Σε εκείνο το πρόγραμμα εκμάθησης παρουσιάσαμε τον τρόπο δημιουργίας ενός μοντέλου EMF από μοντέλο Rose ή από ένα σύνολο αρχείων διεπαφών Java. Σε αυτό το πρόγραμμα εκμάθησης, θα γίνει μια παρουσίαση του τρόπου δημιουργίας ενός μοντέλου EMF που επεκτείνει ένα υπάρχον μοντέλο.

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

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

Θα επεκτείνουμε αυτό το μοντέλο βιβλιοθήκης δημιουργώντας ένα νέο πακέτο που ονομάζεται schoollibrary. Αυτό το πακέτο περιλαμβάνει τρεις κλάσεις, δύο από τις οποίες επεκτείνουν κλάσεις στο μοντέλο βιβλιοθήκης:

Μοντέλο UML Schoollibrary

Αυτό το πρόγραμμα εκμάθησης θα παρουσιάσει βήμα προς βήμα τη δημιουργία ενός μοντέλου EMF για το πακέτο schoollibrary, χρησιμοποιώντας το μοντέλο βιβλιοθήκης που έχετε ήδη δημιουργήσει. Όπως και στο προηγούμενο πρόγραμμα εκμάθησης, θα παρουσιάσουμε τη δημιουργία αυτού του νέου μοντέλου από ένα μοντέλο Rose και από ένα σύνολο διεπαφών Java.

Τα αποτυπώματα οθόνης βασίζονται στην έκδοση 3.2.0 RC6 του Eclipse SDK και στην έκδοση 2.2.0 RC6a του EMF.


Περιεχόμενα

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


 περιεχόμενα

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

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

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


 περιεχόμενα

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

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

Όταν γίνεται κοινή χρήση πακέτων ανάμεσα σε διάφορα μοντέλα, θα πρέπει να τοποθετούμε κάθε πακέτο στο δικό του αρχείο .cat και απλά να προσθέτουμε παραπομπές για κάθε πακέτο σε ένα αρχείο .mdl. Για τους σκοπούς αυτού του προγράμματος εκμάθησης, αντιγράψαμε και επεκτείναμε το πακέτο library στο ίδιο αρχείο μοντέλου. Η γεννήτρια συμπεριφέρεται ακριβώς με τον ίδιο τρόπο, είτε το αρχείο .mdl περιέχει τα ίδια τα πακέτα είτε περιέχει παραπομπές σε εξωτερικά αρχεία .cat.

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


 περιεχόμενα

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

Ακολουθούν οι διεπαφές Java με σημειώσεις για το πακέτο schoollibrary. Μπορούμε να δημιουργήσουμε το μοντέλο EMF από αυτά τα αρχεία διεπαφών, αντί από ένα μοντέλο Rose.

SchoolLibrary.java 
package org.eclipse.example.schoollibrary;
import org.eclipse.example.library.Library;

/**
 * @model
 */
public interface SchoolLibrary extends Library
{
  /**
   * @model
   */
  String getLocation();
}
Asset.java 
package org.eclipse.example.schoollibrary;

/**
 * @model
 */
public interface Asset
{
  /**
   * @model
   */
  float getValue();
}
SchoolBook.java 
package org.eclipse.example.schoollibrary;
import org.eclipse.example.library.Book;

/**
 * @model
 */
public interface SchoolBook extends Book, Asset
{
}

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

Προσθέστε μια εξάρτηση πρόσθετης λειτουργίας στο υπάρχον έργο βιβλιοθήκης:

Θα μπορούσατε να δημιουργήσετε και να πληκτρολογήσετε τις διεπαφές όπως στο προηγούμενο πρόγραμμα εκμάθησης, αλλά αυτή τη φορά θα παρουσιάσουμε τον τρόπο εισαγωγής τους από το συμπιεσμένο αρχείο schoollibrary.zip. Αποθηκεύστε αυτό το αρχείο κάπου στον σταθμό εργασίας σας ή σε κάποιο κενό έργο στον πάγκο εργασίας σας.

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


 περιεχόμενα

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

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

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


 περιεχόμενα

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

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

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

Το κεντρικό αντικείμενο σε αυτή τη λειτουργία επεξεργασίας αντιστοιχεί στον πόρο My.schoollibrary. Σημειώστε ότι το θυγατρικό αντικείμενο είναι όντως μια σχολική βιβλιοθήκη.

Τερματίστε τη δεύτερη χρήση του Eclipse, επιστρέφοντας στον αρχικό πάγκο εργασίας ανάπτυξης.


 περιεχόμενα

Βήμα 4: Τροποποίηση της λειτουργίας επεξεργασίας

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

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

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

  Δημιουργία κώδικα μοντέλου Δημιουργία κώδικα τροποποίησης Δημιουργία κώδικα λειτουργίας επεξεργασίας Δημιουργία κώδικα δοκιμών
Μοντέλο <M> MANIFEST.MF
build.properties
plugin.properties
plugin.xml
<M>Plugin.java *
...και τα αρχεία για κάθε πακέτο
MANIFEST.MF
build.properties
plugin.properties
plugin.xml
<M>EditPlugin.java
...και τα αρχεία για κάθε πακέτο
MANIFEST.MF
build.properties
plugin.properties
plugin.xml
<M>EditorPlugin.java
<M>EditorAdvisor.java *
...και τα αρχεία για κάθε πακέτο
MANIFEST.MF
build.properties
plugin.properties
plugin.xml
<M>AllTests.java
...και τα αρχεία για κάθε πακέτο
Πακέτο <P> <P>Package.java
<P>PackageImpl.java
<P>Factory.java
<P>FactoryImpl.java
<P>Switch.java
<P>AdaptorFactory.java
<P>ResourceImpl.java *
<P>ResourceFactoryImpl.java *
<P>Validator.java *
<P>XMLProcessor.java *
...και τα αρχεία για κάθε κλάση και απαρίθμηση
   και για το μοντέλο
<P>ItemProviderAdaptorFactory.java
...και τα αρχεία για κάθε κλάση
   και για το μοντέλο
<P>Editor.java
<P>ModelWizard.java
<P>ActionBarContributor.java
...και τα αρχεία για το μοντέλο
<P>Tests.java
<P>Example.java
...και τα αρχεία για κάθε κλάση
   και για το μοντέλο
Κλάση <C> <C>.java
<C>Impl.java
...και τα αρχεία για το πακέτο
<C>ItemProvider.java
...και τα αρχεία για το πακέτο
  <C>Test.java
...και τα αρχεία για το πακέτο
Απαρίθμηση <E> <E>.java
...και τα αρχεία για το πακέτο
     

* Αυτά τα αρχεία δεν δημιουργούνται από προεπιλογή.

Τώρα, μπορούμε να δοκιμάσουμε την αλλαγή μας.

Ας υποθέσουμε ότι το πρόθημα School Library δεν σας αρέσει και θέλετε να το αλλάξετε. Ο μόνος τρόπος για να γίνει αυτό είναι με την τροποποίηση του κώδικα, αλλά αυτό είναι εύκολο.

Όπως περιγράφεται στο θέμα Επισκόπηση του EMF.Edit, το EMF.Edit χρησιμοποιεί παροχείς στοιχείων για να καθορίσει, μεταξύ άλλων, ποια ετικέτα θα εμφανίζεται για κάθε είδος αντικειμένου. Συγκεκριμένα, αυτό γίνεται με τη μέθοδο getText(), την οποία θα πρέπει να αλλάξετε.

Αλλάξαμε την υλοποίηση του getText() από την αρχική του μορφή. Η ιδιότητα λειτουργίας ετικέτας στην κλάση SchoolLibrary του μοντέλου γεννήτριας δεν επιδρά πλέον στον δημιουργημένο κώδικα. Αυτό οφείλεται στο ότι αφαιρέσαμε το προσδιοριστικό Javadoc @generated, αποτρέποντας με αυτόν τον τρόπο την αντικατάσταση της μεθόδου κατά τη δημιουργία κώδικα.

Ας υποθέσουμε τώρα ότι δεν έχετε ακόμα αποφασίσει αν η λειτουργία επεξεργασίας θα πρέπει να εμφανίζει την τιμή του γνωρίσματος θέσης ή του γνωρίσματος ονόματος. Θέλετε να μπορείτε να την αλλάξετε μέσω του μοντέλου γεννήτριας αργότερα. Ωστόσο, δεν θέλετε να εμφανίζεται το πρόθημα "School Library". Ουσιαστικά, θα θέλατε να κρατήσετε τη δημιουργημένη υλοποίηση διαθέσιμη ώστε να χρησιμοποιηθεί από μια δική σας μέθοδο που αφαιρεί το πρόθημα από οτιδήποτε επιστρέφει. Η νέα μέθοδος πρέπει να ονομάζεται getText(), άρα η δημιουργημένη μέθοδος πρέπει να μετονομαστεί.

Ευτυχώς, η γεννήτρια κώδικα EMF υποστηρίζει αυτή τη λειτουργία: όταν μια μέθοδος που πρόκειται να δημιουργηθεί θα προκαλούσε διένεξη με μια μέθοδο που δεν έχει προσδιοριστικό @generated, αναζητά μια μέθοδο με το ίδιο όνομα και επίθημα "Gen". Αν η μέθοδος υπάρχει και έχει το προσδιοριστικό "@generated", η υλοποίηση θα δημιουργηθεί σε αυτήν την μέθοδο.

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


 περιεχόμενα

Παράρτημα: Ένας εναλλακτικός τρόπος δημιουργίας του μοντέλου

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

Αν ξεκινήσετε με το μοντέλο Rose, η διαδικασία είναι ίδια με αυτή που περιγράφηκε παραπάνω, με διαφορά ότι και τα δύο πακέτα επιλέγονται για δημιουργία κώδικα.

Αν ξεκινήσετε με τις διεπαφές Java με σημειώσεις, και τα δύο πακέτα εισάγονται σε ένα κενό έργο EMF πριν τη δημιουργία του κώδικα.

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

Υπάρχουν τρία είδη θυγατρικών στοιχείων διαθέσιμα, ενώ στο προηγούμενο πρόγραμμα εκμάθησης υπήρχαν μόνο δύο. Συγκεκριμένα, συμπεριλαμβάνεται το "School Book", το οποίο προέρχεται από το πακέτο schoollibrary. Προηγουμένως, η γεννήτρια κώδικα δεν γνώριζε την ύπαρξή του καθώς δημιουργούσε τον παροχέα στοιχείων για το στοιχείο Library. Τώρα, καθώς τα δύο πακέτα δημιουργήθηκαν ταυτόχρονα το βασικό πακέτο γνωρίζει τα πάντα για το πακέτο που το επεκτείνει.


περιεχόμενα