EMF-mallin luonti

Viimeksi päivitetty: 18. kesäkuuta 2007

Tässä opetusohjelmassa esitetään vaiheittainen kuvaus EMF-mallin luontiprosessista ja yksinkertaisen mallin muokkausohjelman luomisesta sitä varten. Opetusohjelma näyttää, kuinka helpoksi EMF tekee siirtymisen yksinkertaisesta mallin määrityksestä täysin toimivaan muokkausohjelmaan kyseisessä mallissa.

Malli, jonka luomme, näyttää tältä UML:ssä (katso Eclipse-mallinnuskehyksen yleiskuvaus -kohdasta mallin kuvaus):

Kirjaston UML-malli

Näytämme, miten EMF-malli voidaan luoda käyttämällä kahdesta eri lähteestä kumpaa vain: Rational Rose -mallia tai kommentein varustettujen Java-liittymien ja -luokkien joukkoa.

Näyttökuvat perustuvat Eclipse SDK:n versioon 3.3.0 RC4 ja EMF:n versioon 2.3.0 RC3.


Sisältö

Vaihe 0: Asennusvaatimukset
Vaihe 1: Tuo malli Rose-työkalusta tai määritä malli käyttämällä kommentein varustettua Javaa
Vaihe 2: Luo EMF-mallin koodi
Vaihe 3: Luo muokkausohjelma mallille
Vaihe 4: Aja luotu muokkausohjelma


 sisältö

Vaihe 0: Asennusvaatimukset

Ajonaikainen EMF-paketti sisältää EMF-luontitoiminnon ja joitakin liittyviä lisäosia. Tarkista paketin asennuksen jälkeen, että ne ovat käytettävissä Eclipse-ympäristössä:

Tätä opetusohjelmaa varten ei tarvita lisää EMF-kehyksen lisäosia. Ne voivat tulla tai olla tulematta näkyviin sen mukaan, minkä EMF-paketin olet asentanut.


 sisältö

Vaihe 1a: Tuo malli Rose-työkalusta

Rose-tiedosto kirjastomallille löytyy täältä: library.mdl. Tallenna se johonkin sijaintiin työasemassa.

Luo uusi EMF-projekti työtilassa:


 sisältö

Vaihe 1b: Määritä malli käyttämällä kommentein varustettua Javaa

Sen sijaan, että toisimme mallin Rose-kaaviosta, voimme aloittaa joukolla Java-liittymiä ja -luokkia, jotka vastaavat luokkia ja luettelointilajeja kirjastomallissa. Tämä koodi on ehdoton vähimmäisvaatimus haluttujen ominaisuuksien kuvaamiseen. Sen perusteella muodostetaan Ecore-malli ja luontimalli, jotka ohjaavat sen jälkeen jäljellä olevan koodin luontia. Koodi on varustettu @-mallitunnisteilla Javadoc-kommenteissa tarkoituksena määrittää muut kuin oletusarvon mukaiset arvot Ecore-objektien määritteille ja viitteille.

Versiosta EMF 2.3 alkaen kommentein varustetut Java-liittymät on voinut määrittää Java 5.0 -yleistyyppien ja -luettelointien avulla. Molempiin menetelmiin perehdytään myöhemmin. Jotta voi käyttää Java 5.0 -ympäristöä, varmista, että Eclipsen "Java/Kääntäjä/Kääntäjän yhteensopivuustaso" -kohdan arvona on vähintään "5.0".


Java/Kääntäjä/Kääntäjän yhteensopivuustaso


Kirjastomallia kuvaavat seuraavat liittymät:

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;
}

Luo uusi tyhjä EMF-projekti työtilassa:

Luo ensimmäinen Java-liittymä:

Luo kaksi muuta liittymää (Book.java ja Writer.java) ja luokka (BookCategory.java) samalla tavalla. Kun luot luokan, valitse ponnahdusvalikosta Uusi/Luokka sen sijaan, että valitsisit Uusi/Liittymä.

Luo EMF-malli:


 sisältö

Vaihe 2: Luo EMF-mallin koodi

Luontimalli näyttää pääobjektin, joka edustaa koko mallia. Tällä malliobjektilla on alielementtejä, jotka edustavat sen paketteja. Alielementtien alielementit puolestaan edustavat luokittelijoita (luokkia ja tietolajeja, myös luettelointilajeja). Luokkien alielementtejä ovat luokkien määritteet, viitteet ja toiminnot. Luettelointilajien alielementtejä ovat enum-literaalit.

Useimmissa tapauksissa ominaisuuksien oletusarvoja ei tarvitse muuttaa, mutta nämä asetukset voivat auttaa hallitsemaan tehokkaasti luotavaa koodia. Yksi mainitsemisen arvoinen asetus on yllä olevassa kuvassa toisena oleva Yhteensopivuustaso. Jos haluat käyttää kommentein varustettujen Java-liittymien uusia rakenteita, jotka on esitelty versiossa Java 5.0, tai jos haluat luoda koodia, joka hyödyntää yleistyyppejä, varmista, että asetuksena on vähintään versio 5.0. Sen alkuarvo perustuu kääntäjän yhteensopivuustasoon, joka kuvattiin edellä vaiheessa 0.

Luontimalli on myös paikka, jossa voit aloittaa koodin luonnin. Voit luoda koodin mallille napsauttamalla objektia mallissa hiiren kakkospainikkeella.

Luonnin jälkeen luokkaliittymät ja enum-luokat on luotu (jos malli tuotiin Rose-työkalusta) tai tehty loppuun (jos malli määritettiin käyttämällä kommentein varustettua Javaa) ja uusi liittymien pari on luotu paketille itselleen ja factorylle. Lisäksi on saatu kaksi uutta pakettia, joiden loppuliitteenä on impl ja util. Ne sisältävät liittymien ja lisäapuohjelmaluokkien toteutukset sekä molemmanlajiset manifest-tiedostot mallin lisäosalle: plugin.xml ja MANIFEST.MF.

Jos määritit mallin käyttämällä kommentein varustettua Javaa, Ongelmat-näkymässä voi näkyä varoitus, jonka mukaan tuonnin java.util.List-luetteloa ei ole koskaan käytetty. Tämä varoitus on odotettu eikä estä sinua jatkamasta seuraavaan vaiheeseen.

Jos muutat mallia, voit luoda sen uudelleen. Muutokset yhdistetään kaikkiin käsin tehtyihin muunnoksiin, jotka koodiin on voitu tehdä. Voit myös luoda valikoivasti mallikoodin alijoukon napsauttamalla hiiren kakkospainikkella pakettia, luokkaa tai enum-objektia ja valitsemalla ponnahdusvalikosta Luo mallin koodi.


 sisältö

Vaihe 3: Luo muokkausohjelma mallille

Täysin toimiva Eclipse-muokkausohjelma voidaan luoda mille tahansa mallille. Oletusarvon mukaan se jakautuu kahteen lisäosaan: muokkaus-lisäosa sisältää sovittimet, jotka toimittavat rakenteisen näkymän ja ajavat malliobjektien komentoperustaiset muokkaustoiminnot, ja muokkausohjelma-lisäosa toimittaa käyttölittymän muokkausohjelmaa ja ohjattua toimintoa varten.

Jos haluat luoda mallin sekä muokkauksen ja muokkausohjelman lisäosat yhdessä vaiheessa, voit yleensä tehdä niin valitsemalla ponnahdusvalikosta Luo kaikki.

Tämä luo myös testauksen lisäosan, joka sisältää JUnit-testauksen rungot mallissa määritettyjen muuttuvien ominaisuuksien ja toimintojen käyttämiseen. Tämä malli ei sisällä niitä, mutta yleisesti sinun on täytettävä näiden testien rungot itse. Nämä testauksen lisäosat sisältävät lisäksi yksinkertaisen esimerkkiluokan, joka näyttää, miten voit ladata ja tarkistaa mallin itsenäisessä sovelluksessa.

Koodi pitäisi kääntää automaattisesti, kun se luodaan, ja se pitäisi kääntää uudelleen aina muutoksen jälkeen. Jos olet poistanut käytöstä automaattisen muodostamisen työympäristön asetuksissa, voit aloittaa kääntämisen manuaalisesti:


 sisältö

Vaihe 4: Aja luotu muokkausohjelma

Uusien lisäosien testaamiseksi on aloitettava Eclipsen toinen ilmentymä. Lisäosat ajetaan tässä työympäristössä.

Ohjattua kirjastomallin toimintoa voidaan nyt käyttää mallin uuden ilmentymän luontiin.

Tämän muokkausohjelman pääobjekti vastaa My.library-resurssia. Sen kohdalla on yksi kirjasto, objekti, joka valittiin malliobjektiksi ohjatussa toiminnossa.


sisältö