Exploring a Model-Oriented and Executable Syntax for UML Attributes SERA 2013SERA 2013 (August 7, 2013 in Prague, Czech Republic) Omar Badreddin, Andrew Forward, Timothy C. Lethbridge1 University of Ottawa / / Exploring a Model-Oriented and Executable Syntax for UML Attributes 1
Overview Model Oriented Programming Umple Overview Attributes in Practice Umple Attribute Syntax Attribute Code Generation 2 Exploring a Model-Oriented and Executable Syntax for UML Attributes
The philosophy of Model-Oriented Programming (MOP) MOP 3 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Embed Models In Code 4 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Unify programs and models 5 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Supports Modeller and Programmer workflows Model-FirstIncremental Re- Engineering 6 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Text Diagram Duality 7 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Reduce Need to Round-Trip 8 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Easily Integrate with Text-Based Tooling 9 Exploring a Model-Oriented and Executable Syntax for UML Attributes
A MOP technology and language family Umple 10 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Why call it Umple? UML Programming Language Ample Simple 11 Exploring a Model-Oriented and Executable Syntax for UML Attributes
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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Attributes In Practice Google Code: fizzbuzz ExcelLibrary Ndependencyinjection Java Bug Reporting SourceForge: jEdit Freemaker Freecode: Java Financial Library 1831 variables 620 static 1211 instance 469 classes 13 Exploring a Model-Oriented and Executable Syntax for UML Attributes
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%) Exploring a Model-Oriented and Executable Syntax for UML Attributes 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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Attribute Code Generation 16 Over half were simple boiler- plate implementations Exploring a Model-Oriented and Executable Syntax for UML Attributes
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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Umple Attributes class Student { // defaults to String studentNumber; String grade; Integer entryAverage; } 18 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Umple Data Types Umple treats the following attribute types as special String (always the default if unspecified) Integer Double Boolean Date, 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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Initializing Attributes class 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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Immutable Attributes class 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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Derived Attributes class Rectangle { Integer l; Integer w; // Derived Attributes Integer perimeter = { 2*getL() + 2*getW() } Integer area = { getL() * getW() } } 22 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Additional Attribute Options class 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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Attribute Code Generation (1) class Rectangle { name = "Rectangle"; Integer length; Integer width; Integer area = {getLenth() * getWidth()} } 24 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Attribute Code Generation (2) // line 2 "model.ump" public class Rectangle 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; 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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Try It Yourself 26 Exploring a Model-Oriented and Executable Syntax for UML Attributes
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 Exploring a Model-Oriented and Executable Syntax for UML Attributes
Getting involved Open source project: 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: 28 Exploring a Model-Oriented and Executable Syntax for UML Attributes
More information Publications on Umple: The User Manual: Umple Home page: Download Umple: e_plugin.html e_plugin.html Report an issue: 29 Exploring a Model-Oriented and Executable Syntax for UML Attributes
30 Exploring a Model-Oriented and Executable Syntax for UML Attributes