Exploring a Model-Oriented and Executable Syntax for UML Attributes
SERA 2013 (August 7, 2013 in Prague, Czech Republic)
Omar Badreddin, Andrew Forward, Timothy C. Lethbridge1 University of [email protected] / [email protected] [email protected] / [email protected]@site.uottawa.cahttp://umple.org
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
1
Overview• Model Oriented Programming• Umple Overview• Attributes in Practice• Umple Attribute Syntax• Attribute Code Generation
2
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
The philosophy of Model-Oriented Programming (MOP)
MOP
3
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Embed Models In Code
4
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Unify programs and models
5
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Supports Modeller and Programmer workflows
Model-First Incremental Re-Engineering
6
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Text Diagram Duality
7
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Reduce Need to Round-Trip
8
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Easily Integrate with Text-Based Tooling
9
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
A MOP technology and language family
Umple
10
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Why call it Umple?
UML Programming LanguageAmpleSimple
11
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
What does Umple support?• Modeling abstractions
• Associations, Attributes, State machines (both simple and composite), model based tracing, and simple debugging.
• Supported languages• Java, C++, Ruby, PhP
• Integration support• XMI for model exchange, Ecore, textUML, Yuml,
GraphViz, SQL
12
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Attributes In PracticeGoogle Code:• fizzbuzz• ExcelLibrary• Ndependencyinjection• Java Bug Reporting SourceForge:• jEdit• FreemakerFreecode:• Java Financial Library
• 1831 variables• 620 static• 1211 instance
• 469 classes
13
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Variable Distribution
14
Static (Class) Variables
Member (Object) Variables
E.g. avoiding magic numbers and state symbols (i.e. LEFT_NODE, RIGHT_NODE)
Mostly counts, names and booleans (51%)
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
A lot of other object types
Attribute Identification
15
About 33% had attribute-like methods implementations
Surprising that 35% had no external access at all
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Attribute Code Generation
16
Over half were simple boiler-plate implementations
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Observations• Many simple set and get methods
• Drastic reduction in boiler-plate code
• Few truly immutable attributes• Few attributes set in constructor• Immutability needed for proper hash code (Java)
• Attribute multiplicities typically ‘one’• Basic multiplicity (0..1, 1, 0..*) available for attributes
17
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Umple Attributesclass Student{ // defaults to String studentNumber; String grade; Integer entryAverage;}
18
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Umple Data Types
Umple treats the following attribute types as specialString (always the default if unspecified)IntegerDoubleBooleanDate, Time
• Code generation from the above will generate suitable types in the underlying language (Java, PHP, etc.)
• Umple classes can be used as types, but consider associations instead 19
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Initializing Attributesclass Student{ // Initial value set to “Unknown”, // not required in class constructor name = "Unknown";
// Initialized, but can also be reset defaulted type = “FullTime”; // Name initialized to null in // constructor lazy program;}
20
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Immutable Attributesclass Student{ // Cannot be changed after set in constructor immutable idNumber;
// Can be set once, right after construction, // and is immutable after that // Useful for frameworks where objects are // created without initializing values lazy immutable barcode;}
21
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Derived Attributesclass Rectangle{ Integer l; Integer w; // Derived Attributes Integer perimeter = { 2*getL() + 2*getW() } Integer area = { getL() * getW() }}
22
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Additional Attribute Optionsclass Student{ // Umple assigns the next // available number autounique id; // Creates a constant value const Integer MAX_NUM_COURSES = 8;}
class Address{ // An address has many lines String[] lines;}
23
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Attribute Code Generation (1)
class Rectangle{ name = "Rectangle";
Integer length;
Integer width; Integer area = {getLenth() * getWidth()} }
24
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Attribute Code Generation (2)// line 2 "model.ump"public class Rectangle{ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface umplesourcefile{int[] line();String[] file();int[] javaline();int[] length();}
//------------------------ // MEMBER VARIABLES //------------------------
//Rectangle Attributes private String name; private int length; private int width;
//------------------------ // CONSTRUCTOR //------------------------
public Rectangle(int aLength, int aWidth) { name = "Rectangle"; length = aLength; width = aWidth; }
//------------------------ // INTERFACE //------------------------
public boolean setName(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public boolean setLength(int aLength) { boolean wasSet = false; length = aLength; wasSet = true; return wasSet; }
public boolean setWidth(int aWidth) { boolean wasSet = false; width = aWidth; wasSet = true; return wasSet; }
public String getName() { return name; }
public int getLength() { return length; }
public int getWidth() { return width; }
@umplesourcefile(line={7},file={"model.ump"},javaline={79},length={2}) public int getArea() { return getLenth() * getWidth(); }
public void delete() {}
public String toString() { String outputString = ""; return super.toString() + "["+ "name" + ":" + getName()+ "," + "length" + ":" + getLength()+ "," + "width" + ":" + getWidth()+ "," + "area" + ":" + getArea()+ "]" + outputString; }}
25
Constructor based on attributes missing an initial value
Set method returns a boolean (was it “set” or not)
Simple get method
Derived methods do not have internal members
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
http://try.umple.org
Try It Yourself
26
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Summary
27
Umple features can be created and viewed diagrammatically or textually
Umple extends a base language in a minimally invasive way
Intermediate generated code should not be edited
=
Modeling is programming and vice versa
No round-trip engineering required
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
Getting involved• Open source project: https://code.google.com/p/umple/• Teaching
• Use Umple to introduce UML and MDE.• Umplification
• Incrementally replace boilerplate code with modeling abstractions
• Lightweight Modeling and Analysis• Visualize Umple source as UML diagrams to analyze it
• Model driven development• Generate code in one of the supported base languages
Comments and feedback: [email protected] 28
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
More information
• Publications on Umple:
https://code.google.com/p/umple/wiki/Publications
• The User Manual:
http://cruise.eecs.uottawa.ca/umple/GettingStarted.html
• Umple Home page: http://cruise.eecs.uottawa.ca/umple/
• Download Umple:
http://cruise.eecs.uottawa.ca/umpleonline/download_eclipse
_umple_plugin.html
• Report an issue:
https://code.google.com/p/umple/issues/entry
29
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes
30
Expl
orin
g a
Mod
el-O
rient
ed a
nd E
xecu
tabl
e Sy
ntax
for U
ML
Attrib
utes