Software Automation with Eclipse Modeling

Post on 15-Jan-2015

1,761 views 0 download

Tags:

description

Slides for my talk at http://www.itemis.de/itemis-ag/veranstaltungen/2009/language=de/taps=646/27333/innovative-softwareentwicklung-modellbasiert-agil-und-nutzerzentriert

transcript

Software Automation with Eclipse Modeling

Peter Friese, itemis@peterfriese

@xtext(c) 2009 Peter Friese. Distributed under the EDL V1.0 - http://www.eclipse.org/org/documents/edl-v10.php

More info: http://www.peterfriese.de / http://www.itemis.com

Some Typical Situations in

Software Development

Boring code

Accidental complexity

Wrong level of abstraction

Anatomy of Modern Software

Software artifact

Anatomy of Modern Software

Libraries

Frameworksmanually written code

Anatomy of Modern Software

schematic code (manually written)

Libraries

Frameworks

manually written code

The Result?

More and more code to write

More and more code to write

More and more code to write

Problems

Problems

Problems

Can we solve them with models?

Yes, we can!

schematic code (generated)

Libraries

Frameworks

manually written code

Model

Generator

Code Generation Helps

MDSD

Metamodel

Model

<<instanceof>>

Generator

Modelgeneratedcode

Platform

manually written code

MDSD with UML

UML

Metamodel

Model

<<instanceof>>

Generator

Modelgeneratedcode

Platform

manually written code

Demo

@SuppressWarnings("serial")@Entity@Table(name = "CUSTOMER_INFO")public class CustomerInfo implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idSeq") @SequenceGenerator(name = "idSeq", sequenceName = "CUST_SEQ", allocationSize = 1) @Column(name = "CUST_ID", nullable = false) private String customerId;

public void setCustomerId(String customerId) { this.customerId = customerId; }

public String getCustomerId() { return customerId; }

@Column(name = "EMAIL", nullable = false, length = 128) private String emailAddress;

public String getEmailAddress() { return emailAddress; }

public void setEmailAddress(String emailAddress) { String oldValue = emailAddress; this.emailAddress = emailAddress; firePropertyChangedEvent("emailAddress", oldValue, this.emailAddress); }

@SuppressWarnings("serial")@Entity@Table(name = "CUSTOMER_INFO")public class CustomerInfo implements Serializable {

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idSeq") @SequenceGenerator(name = "idSeq", sequenceName = "CUST_SEQ", allocationSize = 1) @Column(name = "CUST_ID", nullable = false) private String customerId;

public void setCustomerId(String customerId) { this.customerId = customerId; }

public String getCustomerId() { return customerId; }

@Column(name = "EMAIL", nullable = false, length = 128) private String emailAddress;

public String getEmailAddress() { return emailAddress; }

public void setEmailAddress(String emailAddress) { String oldValue = emailAddress; this.emailAddress = emailAddress; firePropertyChangedEvent("emailAddress", oldValue, this.emailAddress); }

entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128)}

Bean(POJO) DAO

entity CustomerInfo (id=CUST_ID, sequenceName=CUST_SEQ) { String emailAddress (notNull, length = 128)}

Concentrate on Essentials

Higher Efficiency

Better Maintainability

http://www.flickr.com/photos/flyforfun/2638180406/

No More Boring Code

Some

Users

Deutsche Börse Systems AG

Deutsche Börse Systems AG

APG Affichage

APG Affichage

Fraunhofer IWES

Fraunhofer IWES

BMW Car IT

BMW Car IT

Twitter: @xtexthttp://www.xtext.org