uOttawaUniversity of Ottawa 
- Canadas University
list of dots

Model-Oriented Programming - Umple.org

Umple is a modeling tool and programming language family to enable what we call Model-Oriented Programming. It adds abstractions such as Associations, Attributes and State Machines derived from UML to object-oriented programming languages such as Java, PHP and Ruby. Umple can also be used to create UML class diagrams textually.

Umple is an open source project, so details will evolve. However, it is ready to be used for real systems. In fact the Umple compiler itself was written in Umple. Any Java or PHP project could use Umple. We have found the resulting code to be more readable and have many fewer lines. This is because Umple means you can avoid having to code a lot of 'boilerplate' code that would be needed to implement associations and attributes, a system based on Umple should also be less bug-prone.

Umple has also been found to help students learn UML faster in the classroom.

 

Resources

Want to try Umple out? Click on UmpleOnline to experiment with the language and generate either Java or PHP code (works directly in the browser).

To explore Umple, browse the user manual

New to Umple? Read the tutorial powerpoint presentation on Umple to obtain an overview.

Want to contribute or learn Umple in more depth? Go to the Google Code site where we are maintaining Umple as an open source project.

The Google code site hosts our Wiki, which has examples, tutorials and documentation.

Of key interest in the Wiki is a list of presentations and other tutorials about Umple

If you are a researcher or want to learn about Umple at a deep level, a list of peer reviewed papers and these can be found in our list of Umple publications.

Prof Lethbridge regularly blogs about Umple

There is a Google group (mailing list) you can join to be notified about Umple news.

The trunk of the Umple code tree is here.

Umple uses CruiseControl for automatic building. Here is the current build status.

Umple development uses test driven development. Here is the report of testing of the latest build.

Umple's current bug tracking system is here.

 

Example

Umple is a set of extensions to existing object-oriented languages (currently PHP and Java) that provides a concrete syntax for UML abstractions like associations as well as certain software patterns.

Umple's objective is to simplify software by incorporating modeling concepts and software patterns.

The following example shows how to declare attributes and associations in the first steps on modeling a system using Umple. Other examples can be found here.

class Student {}

class CourseSection {}

class Registration 
{
  String grade;
  * -- 1 Student;
  * -- 1 CourseSection;
}
      

The class diagram to reflect the Umple code above is shown below.

Origin of the name Umple

The word 'Umple' is a play on words, meaning 'Simple', 'UML Programming Language' and 'Ample'. Let us expand on these concepts a little:

Simple: Umple is intended to be simple from the programmer's perspective because, a) there is less code to write, and b) there are fewer degrees of freedom than either Java or UML. Code that is eliminated includes boilerplate code for adding, deleting and modifying links of associations, as well as constructors and methods for accessing attributes. In all these cases, and many others, Umple provides sensible default implementations.

UML Programming Language: Umple adds key features of UML to its target languages. Namely, the addition of association constructs and the simplification of attribute declarations.

Ample: Despite the restrictions imposed by the deliberate simplicity of Umple, it is intended to have sufficient power to program the functional layer of most kinds of systems.