Software Installation
•   Unzip the Eclipse distribution matching your OS
    Windows users: Use a location close to the root directory

•   Run the Eclipse executable

•   Choose File -> Import -> Existing projects into workspace

•   Select Archive file and choose workspace.zip from the USB
    stick
Domain-specific Languages
With
Eclipse Modeling
Jan Köhnlein, Karsten Thoms
Markus Völter, Sebastian Zarnekow
itemis AG
Karsten Thoms    Sebastian Zarnekow



                                 Jan Köhnlein
       Markus Voelter
Karsten Thoms    Sebastian Zarnekow



                                 Jan Köhnlein
       Markus Voelter
Domain-specific Language
        (DSL)
Domain-specific Language
         (DSL)

 a formal, processable language
targeting at a specific viewpoint
     or aspect of a system.
Example: JPA
@Entity
public class Customer implements Serializable {
  private Long id;
  private String name;
  private Address address;
  private Collection<Order> orders = new HashSet<Order>();
  private Set<PhoneNumber> phones = new HashSet<PhoneNumber>();

    public Customer() {}
    @Id
    public Long getId() {
      return id;
    }
    public void setId(Long id) {
      this.id = id;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public Address getAddress() {
      return address;
    }
    public void setAddress(Address address) {
      this.address = address;
    }
    @OneToMany
    public Collection<Order> getOrders() {
      return orders;
    }
    public void setOrders(Collection<Order> orders) {
      this.orders = orders;
    }
    @ManyToMany
    public Set<PhoneNumber> getPhones() {
      return phones;
    }
    public void setPhones(Set<PhoneNumber> phones) {
      this.phones = phones;
    }
}
@Entity
public class Customer implements Serializable {
  private Long id;
  private String name;
  private Address address;
  private Collection<Order> orders = new HashSet<Order>();
  private Set<PhoneNumber> phones = new HashSet<PhoneNumber>();

    public Customer() {}
    @Id
    public Long getId() {
      return id;
    }
    public void setId(Long id) {
      this.id = id;
    }
    public String getName() {
      return name;
    }                                                             entity Customer {
    public void setName(String name) {
      this.name = name;
                                                                      String name
    }                                                                 Address address
    public Address getAddress() {
      return address;                                                 Order* orders
    }
    public void setAddress(Address address) {
                                                                      PhoneNumber** phones
      this.address = address;                                     }
    }
    @OneToMany
    public Collection<Order> getOrders() {
      return orders;
    }
    public void setOrders(Collection<Order> orders) {
      this.orders = orders;
    }
    @ManyToMany
    public Set<PhoneNumber> getPhones() {
      return phones;
    }
    public void setPhones(Set<PhoneNumber> phones) {
      this.phones = phones;
    }
}
Abstraction
The right tool
           for
 the right job
MWE
Xpand
G
 ra
      m
       m
           ar
Reference




                    ar
 Model




                 m
                m
            ra
            G
Reference




                    ar
 Model




                 m
                m
            ra
            G
Reference




                           ar
 Model




                        m
                       m
                   ra
                   G
            DSL Workbench
Reference




                           ar
 Model




                        m
                       m
                   ra
                   G
            DSL Workbench


   Editor
Reference




                            ar
 Model




                          m
                        m
                     ra
                    G
            DSL Workbench


   Editor        Infrastucture
Reference




                            ar
 Model




                          m
                        m
                     ra
                    G
            DSL Workbench


   Editor        Infrastucture   Generator
Editor




         Generator
Editor




   AST

         Generator
Editor




            AST                  TeX Xpa
                               T ma  p
                             TeXeXpa p n nd
                                  m l
                                 p
                           Te m a p n ad
                             m pln lad te
                               pl ad te
                                  at te
                                    e

Generator
Editor




            AST                  TeX Xpa
                               T ma  p
                             TeXeXpa p n nd
                                  m l
                                 p
                           Te m a p n ad
                             m pln lad te
                               pl ad te
                                  at te
                                    e

Generator
Editor




                      AST                        TeX Xpa
                                               T ma  p
                                             TeXeXpa p n nd
                                                  m l
                                                 p
                                           Te m a p n ad
                                             m pln lad te
                                               pl ad te
                                                  at te
                                                    e

Generator




                   E
                 Ex xe
              Ex A c
                    r
            Ex Ae etcu uta
             Aecrtcuifata bl
            A rti uifata ctbl e
             rt fata ctb e
               ifa c b le
                  ct t le
Showtime
Generation Gap
    Pattern
      BaseClass
     baseMethod()
                          framework
                          manually written



AbstractGeneratedClass
generatedMethod()         generated



ConcreteCustomizedClass
overriddenMethod()
                          generated once
additionalMethod()        modified manually
Questions?

   find out more at
 http://www.xtext.org

Domain Specific Languages With Eclipse Modeling

  • 1.
    Software Installation • Unzip the Eclipse distribution matching your OS Windows users: Use a location close to the root directory • Run the Eclipse executable • Choose File -> Import -> Existing projects into workspace • Select Archive file and choose workspace.zip from the USB stick
  • 2.
    Domain-specific Languages With Eclipse Modeling JanKöhnlein, Karsten Thoms Markus Völter, Sebastian Zarnekow itemis AG
  • 4.
    Karsten Thoms Sebastian Zarnekow Jan Köhnlein Markus Voelter
  • 5.
    Karsten Thoms Sebastian Zarnekow Jan Köhnlein Markus Voelter
  • 6.
  • 7.
    Domain-specific Language (DSL) a formal, processable language targeting at a specific viewpoint or aspect of a system.
  • 8.
  • 9.
    @Entity public class Customerimplements Serializable { private Long id; private String name; private Address address; private Collection<Order> orders = new HashSet<Order>(); private Set<PhoneNumber> phones = new HashSet<PhoneNumber>(); public Customer() {} @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @OneToMany public Collection<Order> getOrders() { return orders; } public void setOrders(Collection<Order> orders) { this.orders = orders; } @ManyToMany public Set<PhoneNumber> getPhones() { return phones; } public void setPhones(Set<PhoneNumber> phones) { this.phones = phones; } }
  • 10.
    @Entity public class Customerimplements Serializable { private Long id; private String name; private Address address; private Collection<Order> orders = new HashSet<Order>(); private Set<PhoneNumber> phones = new HashSet<PhoneNumber>(); public Customer() {} @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } entity Customer { public void setName(String name) { this.name = name; String name } Address address public Address getAddress() { return address; Order* orders } public void setAddress(Address address) { PhoneNumber** phones this.address = address; } } @OneToMany public Collection<Order> getOrders() { return orders; } public void setOrders(Collection<Order> orders) { this.orders = orders; } @ManyToMany public Set<PhoneNumber> getPhones() { return phones; } public void setPhones(Set<PhoneNumber> phones) { this.phones = phones; } }
  • 11.
  • 12.
    The right tool for the right job
  • 13.
  • 15.
    G ra m m ar
  • 16.
    Reference ar Model m m ra G
  • 17.
    Reference ar Model m m ra G
  • 18.
    Reference ar Model m m ra G DSL Workbench
  • 19.
    Reference ar Model m m ra G DSL Workbench Editor
  • 20.
    Reference ar Model m m ra G DSL Workbench Editor Infrastucture
  • 21.
    Reference ar Model m m ra G DSL Workbench Editor Infrastucture Generator
  • 22.
    Editor Generator
  • 23.
    Editor AST Generator
  • 24.
    Editor AST TeX Xpa T ma p TeXeXpa p n nd m l p Te m a p n ad m pln lad te pl ad te at te e Generator
  • 25.
    Editor AST TeX Xpa T ma p TeXeXpa p n nd m l p Te m a p n ad m pln lad te pl ad te at te e Generator
  • 26.
    Editor AST TeX Xpa T ma p TeXeXpa p n nd m l p Te m a p n ad m pln lad te pl ad te at te e Generator E Ex xe Ex A c r Ex Ae etcu uta Aecrtcuifata bl A rti uifata ctbl e rt fata ctb e ifa c b le ct t le
  • 27.
  • 28.
    Generation Gap Pattern BaseClass baseMethod() framework manually written AbstractGeneratedClass generatedMethod() generated ConcreteCustomizedClass overriddenMethod() generated once additionalMethod() modified manually
  • 29.
    Questions? find out more at http://www.xtext.org

Editor's Notes

  • #9 st&amp;#xFC;ckweise durchgehen
  • #10 Java schlecht im Abstrahieren von Struktur, Redundanz Code-Generierung definiert Platform-Mapping (Architekt) Referenz aus anderen DSLs, Wartbarkeit
  • #11 Java schlecht im Abstrahieren von Struktur, Redundanz Code-Generierung definiert Platform-Mapping (Architekt) Referenz aus anderen DSLs, Wartbarkeit
  • #12 Java schlecht im Abstrahieren von Struktur, Redundanz Code-Generierung definiert Platform-Mapping (Architekt) Referenz aus anderen DSLs, Wartbarkeit
  • #13 Raise level of abstraction, Avoids redundancy Separation of concerns, Reuse of domain concepts Higher expressiveness, Ubiquitous language
  • #15 Die DSL f&amp;#xFC;r DSLs, Eclipse-basiert Define textual DSLs easily, Ready-to-use tool-chain, Easy but flexible customizing and tweaking, Durable foundation with Java Eclipse EMF, Strong community