Im vorangegangenen Artikel haben wir begonnen zu prüfen Eclipse EMF. In diesem Artikel werden wir bauen eine Domain-Modell (persistente Daten-Modell) von einer kleinen Bibliothek Management-System.
Um zu beginnen, lasst uns ein neues Projekt schaffen:
- wählen Sie File --> New --> Project
- Dann, im sich öffnenden Fenster wählen Sie Eclipse Modeling Framework --> Empty EMF Project
Lassen Sie uns unser Projekt nennen testemf.
Dann, im Ordner model, verwenden Sie die rechte Maustaste,
und wählen Sie select New --> Other. Ein neues Fenster öffnet:
Hier, wählen Sie EcoreTools --> Ecore Diagram. Das Ziel ist, einen Domain-Modell mit dem UML-Klassendiagramm-Editor zu erstellen.
Erstellen der Ecore Diagramm ist ein netter Weg der Schaffung eines Ecore Modell, Instanz des Metamodells Ecore. Wir können also, verstehen dies als die Schaffung einer DSL (Domain Specific Language). Nennen wir unseren DSL als LibraryModel.
In den Diagrammen Editor, erstellen wir das bestimmt Klasse-Modell:
Um das zu tun, ziehen und fallen lassen wir Metamodell-Elemente aus der Palette, von denen wir auf Instanzen erstellen möchten. Zum Beispiel die Klasse Book (Instanz von EClass) erstellen wir ziehen Element E-Class aus der Palette, und nennen Sie es Book. Um Attribute ziehen wir EAttribute Element erstellen, und legen Sie es in der Klasse Attribute Bereich, und so weiter.
Wir auf Code aus unserem Diagramm erzeugen möchten, also müssen es vollständig sein. So müssen wir den Datentyp der einzelnen Attribute angeben.
Um die Relation (Assoziationen) zwischen den Klassen zu erstellen, müssen wir das Element EReference aus der Palette ziehen. Eine Relation ist, standardmäßig vom Typ one to many und ist schiffbar in diese Richtung, das ist nur die Seite "viele" ist referrable. In den Eigenschaften der Relation können wir ändern den Namen und die Kardinalität der Relation Attribut.
Wenn wir wollen eine Relation in beiden Richtungen schiffbar, müssen wir zwei Relationen schaffen und geben Sie ein als die entgegengesetzte Relation des anderen.
Mehr Informationen über editting Diagramme mit diesem Editor kann bezogen werden:
Mehr Informationen über UML (Unified Modeling Language) kann erhalten werden, zum Beispiel in: - Capítulo 2. Fundamentos do UML
Bei der Erstellung des Diagramms Ecore (LibraryModel.ecorediag), ein Ecore Modell (LibraryModel.ecore) wird automatisch mit den gleichen Informationen erstellt.
Von der ecore Modell, werden wir ein Modell für die Codegenerierung zu schaffen.
Mit der rechten Hand Maustaste über dem ecore Modell-Datei (LibraryModel.ecore), wir wählen New --> Other,
Dann, Wählen Sie EclipseModelingFramework --> EMF Generator Model:
Und wählen Sie das Modell Ecore Importeur:
Modell LibraryModel.genmodel wird dann erzeugt:
Von diesem Modell werden wir Java-Code entsprechend den Klassen zu generieren in der Anfangsphase Modell:
Das Projekt, dann wird mit den folgenden Dateien:
Drei Java-Pakete generiert wurden:
- LibraryModel - contains the Java interfaces corresponding to the classes in the model, and the Factory class that enables the creation of classes' instances.
- LibraryModel.impl - contains the classes that implement the interfaces.
- LibraryModel.util - contains the AdapterFactory.
Lasst uns an den generierten Code für die Klasse Author in unserem Modell aussehen:
- Author.java:
package LibraryModel;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
public interface Author extends EObject {
String getName();
void setName(String value);
String getSurname();
void setSurname(String value);
EList<Book> getBooks();
} // Author
- AuthorImpl.java:
package LibraryModel.impl;
import LibraryModel.Author;
import LibraryModel.Book;
import LibraryModel.LibraryModelPackage;
import java.util.Collection;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
...
public class AuthorImpl extends EObjectImpl implements Author {
protected static final String NAME_EDEFAULT = null;
protected String name = NAME_EDEFAULT;
protected static final String SURNAME_EDEFAULT = null;
protected String surname = SURNAME_EDEFAULT;
protected EList<Book> books;
protected AuthorImpl() {
super();
}
@Override
protected EClass eStaticClass() {
return LibraryModelPackage.Literals.AUTHOR;
}
public String getName() {
return name;
}
public void setName(String newName) {
String oldName = name;
name = newName;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, LibraryModelPackage.AUTHOR__NAME, oldName, name));
}
public String getSurname() {
return surname;
}
public void setSurname(String newSurname) {
String oldSurname = surname;
surname = newSurname;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, LibraryModelPackage.AUTHOR__SURNAME, oldSurname, surname));
}
public EList<Book> getBooks() {
if (books == null) {
books = new EObjectWithInverseResolvingEList.ManyInverse<Book>(Book.class, this, LibraryModelPackage.AUTHOR__BOOKS, LibraryModelPackage.BOOK__AUTHORS);
}
return books;
}
. . .
@Override
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (name: ");
result.append(name);
result.append(", surname: ");
result.append(surname);
result.append(')');
return result.toString();
}
} //AuthorImpl
Wir können erstellen die Dokumentation über die generierten Klassen mit Javadoc. Denn das, in dem Projekt-Menü wählen Sie die Option Generate Javadoc... :
Und, die Dokumentation generiert wird:
Im nächsten Artikel werden wir testen die generierten Klassen durch eine einfache Methode main()...
Keine Kommentare:
Kommentar veröffentlichen