Die Unified Modeling Language ist der akzeptierte Standard, um objektorientierte Programme grafisch zu modellieren. Mit dem KDE-Tool Umbrello lassen sich die verschiedenen Diagrammformen bequem entwickeln und in Codefragmente verwandeln.
Das freie GUI-Werkzeug Umbrello[1] hilft Software-Entwicklern dabei, Programmabläufe und -architekturen in der Unified Modeling Language (UML,[2]) mit Diagrammen zu beschreiben. Vor allem während der Analyse- und Designphase zu Beginn eines Projekts tragen die bildlichen Darstellungen dazu bei, dass sich alle an der Planung und Realisierung beteiligten Personen auf einen gemeinsamen Nenner einigen.
Passend zu seinen Aufgaben zeigt sich, dass Ehrlichkeit eine der großen Qualitäten von Umbrello ist. Es enthält eine gute Dokumentation, unter anderem in Deutsch. Sie weist explizit darauf hin, dass es sich bei dem Tool nicht um einen magischen Codegenerator handelt, der die Zeichnungen in fertige Programme verwandelt. Wohl aber kann es aus Klassendiagrammen Sourcemodule für Java, C++ und PHP erzeugen. Sie enthalten einen veränderbaren Standardkommentar und eine Klasse inklusive der in Umbrello spezifizierten Variablen und Methodenrümpfe samt Aufrufparameter.
Vielfältige Darstellung
Umbrello unterstützt zudem Sequenzdiagramme für chronologische Abläufe, Zustandsdiagramme (siehe Abbildung 1) für State Machines, Aktivitätsdiagramme, Anwendungsfalldiagramme (Abbildung 2) sowie Kollaborationsdiagramme, die das Zusammenspiel der Programmkomponenten zeigen. Wer vor der Aufgabe steht, ein Programm gemäß dem UML-Standard grafisch darstellen zu müssen, sollte dafür auch die entsprechenden Spezifikation[4] der OMG (Object Management Group,[3]) ergänzend zu Rate ziehen.
In Umbrello kann der Entwickler die Bestandteile eines Diagramms GUI-typisch im Arbeitsbereich platzieren, und zwar bequem über grafische Symbole einer Werkzeugleiste sowie Klicken und Ziehen. Leider weist die Aktualisierung des Arbeitsbereichs zumindest in der Kombination Umbrello, KDE 3.0.0 und QT 3.0.3 Mängel auf: Immer wieder bleiben Schmutzlinien im Diagramm sichtbar, die erst beim nächsten vollständigen Refresh verschwinden.
Die Baumansicht im linken Teil des Fensters (siehe Abbildung 3) zeigt die bisher erstellten Diagramme und Elemente. Unterhalb der obersten Ebene der Sichten – der Anwendungsfall-Sicht und der logischen Sicht – erscheinen die zugehörigen Diagramme und Elemente auf einer Hierarchiestufe in alphabetischer Reihenfolge.
Das bedeutet, dass Umbrello die Anwendungsfälle, Akteure und Klassen nicht jenen Diagrammen unterordnet, in denen sie verwendet werden. Vielmehr sind sie eigenständige Strukturkomponenten, die durch einen im System einmaligen Namen ausgewiesen sind.

Abbildung 1: UML-Zustandsdiagramme beschreiben Objekte in verschiedenen Zuständen sowie die Ereignisse, die einen Zustandsübergang auslösen.

Abbildung 2: Im Anwendungsfalldiagramm beschreibt UML die Beziehungen und Abhängigkeiten verschiedener Szenarien (Use Cases) und der Akteure. Es beschreibt, was zu tun ist, aber nicht, wie es geschieht.
Ordner schaffen Übersicht im Klassenbaum
Vermutlich soll das verhindern, dass Klassen, die in mehreren Diagrammen vorkommen, mehrfach Platz im Strukturbaum belegen. Bei größeren Projekten dürfte der Verlust der Information, welches Element in welchem Diagramm zum Einsatz kommt, und die fehlende Struktur allerdings irritieren. Denkbar für spätere Umbrello-Versionen wäre zum Beispiel ein Ansichtenmenü, über das der Anwender zwischen der jetzigen alphabetischen Sortierung und einer künftigen Diagramm-Element-Hierarchie wählt. Die neue Variante könnte auch verwaiste Elemente, die nirgendwo verwendet werden, weiterhin auf der Diagrammebene anzeigen, um auf die Waisen aufmerksam zu machen.
Um in der Baumansicht für mehr Übersicht zu sorgen, darf der Anwender zusätzliche Ordner einfügen (übers Kontextmenü von »Logische Sicht«). Solche Verzweigungen der Baumansicht wirken sich jedoch nicht auf die Verzeichnisstruktur unterhalb des Umbrello-Zielpfades aus, in die das Tool den automatisch erzeugten Quellcode speichert. Gehören Module in ein bestimmtes Unterverzeichnis, muss man den Verzeichnisnamen im Eigenschaftendialog der Klassen als Paketname angeben.
Ein Element kann mindestens auf drei Weisen entstehen: durch Anklicken eines Symbols der rechten Werkzeugleiste und Klicken im Arbeitsbereich, durch die Funktion »Neu« im Popup-Menü (rechte Maustaste im Arbeitsbereich) oder über das Kontextmenü im Strukturbaum. Ein vorhandenes Element lässt sich, sofern es zum Diagramm passt, komfortabel durch Klicken und Ziehen von der Baumansicht in den Arbeitsbereich des Diagramms übertragen. Zusätzlich gibt es den Menüpunkt »Quelltext | Klassen-Assistent«. Über das Quelltext-Menü importiert der Entwickler auch vorhandene C++-Header und spart sich damit das manuelle Anlegen der Klassen.
Namen lassen sich im Eigenschaftendialog – aktiviert durch einen Doppelklick auf ein Element – oder durch einen Einfachklick auf eine Komponente der Baumansicht ändern. Im zweiten Fall mutiert der Name der Strukturkomponente zum Eingabefeld.
Den Eingabemodus wieder verlassen, um in den Zeigemodus zurückzukehren, erweist sich als erstaunlich knifflig. Zu erwarten wäre, dass jeder Mausklick außerhalb des Textfelds den Editiermodus beendet. Tatsächlich muss man die Änderung mit der [Return]-Taste bestätigen oder per [Escape] abbrechen. Ein Klick in das Dokumentationsfenster oder ein Doppelklick auf eine andere Strukturkomponente schließt die Eingabe ebenfalls ab. In diesen Fällen verwirft Umbrello die Änderungen.
Apropos Dokumentationsfenster: Umbrello bietet Erklärungen in einem kleinen statischen Fenster an. Es zeigt den Kommentar des aktuell ausgewählten Elements. Beschreibungen erstellt und ändert man direkt im Dokumentationsfenster oder über den Eigenschaftendialog. Sofern in den Umbrello-Einstellungen zur Quelltexterzeugung die Option »Dokumentations-Kommentare« aktiv ist, erscheint der Text zu einer Klasse auch im generierten Sourcecode.

Abbildung 3: Das Umbrello-Fenster ist in mehrere Bereiche eingeteilt: links die Baumansicht, in der Mitte das jeweils aktive UML-Diagramm und rechts die Symbolleiste.
Künstlerische Verbindungen
Die Kunst bei der Modellierung eines komplexen Programmierprojekts besteht unter anderem auch darin, die Beziehungen zwischen den beteiligten Komponenten möglichst stimmig und dem Klärungsbedarf entsprechend zu ermitteln und darzustellen. Folglich enthält die Werkzeugleiste je nach Diagrammart vorwiegend Symbole für Verbindungen (Assoziationen).
Ein Beispiel ist die so genannte Verallgemeinerung: In einem Klassendiagramm weist ein durchgezogener Strich mit einer leeren Pfeilspitze von der Subklasse hin zu ihrer Basisklasse. Diese Vererbungsbeziehung übernimmt Umbrello in der jeweiligen sprachspezifischen Notation in den Sourcecode. Die Beziehung eines Ganzen zu einem Teil (Aggregation) findet sich in den Quellen zur Klasse des Ganzen als private Variable vom Typ des Teils.
Eine nette Eigenheit der grafischen Assoziationen in Umbrello offenbart sich bei einem Doppelklick auf eine Linie: Entgegen der üblichen Konvention erscheint nicht der Eigenschaftendialog. Vielmehr erhält die Linie eine weitere Markierung, an der man sie durch Klicken und Ziehen abknicken kann (siehe Abbildung 4). Leider scheint die vorliegende Umbrello-Version solche geknickten Linien nicht korrekt abzuspeichern, denn beim nächsten Neustart erscheint die ursprünglich rechtwinklige Assoziation beharrlich als Gerade.
Umbrello ermittelt Anfangs- und Endpunkt einer Assoziation abhängig von der Anzahl der Verbindungen selbst. Aus diesem Grund ist eine Linie nicht über ihre Endpunkte entlang der Kante des Zielelements verschiebbar. Ob dieses Verhalten in jedem Fall wünschenswert ist, darf man bezweifeln. Nach der ungewollten Begradigung der geknickten Linie führte es zumindest im Testbeispiel dazu, dass Umbrello zwei Assoziationen plötzlich über Kreuz darstellte (siehe Abbildung 3).
Für spätere Versionen dürfte die Forderung nach einer Undo-Funktion laut werden. Hilfreich wäre auch eine elementspezifische Anleitung nach einem Klick auf den Hilfe-Button im Eigenschaftendialog – derzeit erscheint immer die Inhaltsseite des Handbuchs.

Abbildung 4: Um die Assoziationslinien übersichtlicher anzuordnen, kann Umbrello die Striche abknicken lassen. Der Anwender muss dazu die Linie per Doppelklick teilen.
Modelltausch
Die OMG definiert mit XMI (XML Metadata Interchange) auch ein Austauschformat für UML-Modellierungsdaten, in dem Umbrello Diagramme speichert. Der Versuch, eine von Umbrello abgelegte XMI-Datei in das Entwicklungswerkzeug Oracle JDeveloper 9i zu importieren, brach aber mit der Meldung »Unable to Parse XMI File« ab.
Doch bei all den hier gar nicht beschriebenen Funktionen der elementabhängigen Popup-Menüs, den Einstellungen zu steuernden Startoptionen, den von der Diagrammart abhängigen Details und den Plausibilitätsprüfungen bei der Verknüpfung von Elementen klingt die Versionsnummer 1.1 eher nach bescheidenem Understatement.
Fazit
Zugegeben: Bis Umbrello zu einem Profi-Werkzeug herangereift ist, bleibt für das Entwicklungsteam noch einiges zu tun. Auch einige Instabilitäten (eingefrorene Fenster, ein Absturz) trüben das Bild. Dennoch kann man Entwicklern, die sich mit UML vertraut machen und ein kleines bis mittleres Programmierprojekt grafisch darstellen möchten, bereits jetzt die Version 1.1.1 wärmstens empfehlen. (fjl)
|
Infos |
|---|
|
[1] Umbrello: [http://uml.sf.net/] [2] Unified Modeling Language, UML: [http://www.uml.org/] [3] Object Management Group, OMG: [http://www.omg.org/] [4] UML-Spezifikation: [http://www.omg.org/technology/documents/formal/uml.htm] |
|
Die |
|---|
|
|







