Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering
Gerade bei kniffligen Fragen zu UML Diagrammen empfiehlt sich oft ein Blick in die aktuelle UML Spezifikation. Ihr findet sie unter:
Ganz oben auf die aktuelle Version klicken (z.B. Version 2.4.1, August 2011). Auf der nächsten Seite dann “Superstructure specification, PDF” auswählen.
Im frühen Stadium der Softwareentwicklung sind die Sichtbarkeiten von Funktionen und Attributen der Klassen noch nicht relevant. Es handelt sich um Implementierungsdetails, die erst in einem späteren Stadium wichtig werden. In der Musterlösung finden sich trotzdem als zum Beispiel “private”, “protected” oder “public” deklarierte Attribute und/oder Funktionen.
Leider lässt Visual Paradigm den Benutzer diese Details im Gegensatz zu andern nicht ausblenden, sodass sie trotz ihrer Irrelevanz Einzug in die Musterlösungen gefunden haben.
Laut der UML-Spezifikation existiert in Modellierungssicht kein Unterschied zwischen einer Self-Message (also einer Nachricht von einer Instanz einer Klasse an sich selbst z.B. ein Methodenaufruf) und einer Rekursiven-Message (eine Methode führt sich während ihrer Abarbeitung erneut selbst auf).
Visual Paradigm, die Vorlesung sowie das in der Vorlesung empfohlene Buch “UML@WORK” unterscheiden jedoch bei der Modellierung zwischen Self- und Recursive-Messages.
Die rekusive Nachricht resultiert in einem, zu dem Lebensbalken der aufrufenden Instanz, parallelen Lebensbalken. Dieser endet, wenn auch die Rekursion endet. In “UML@Work” wird hier ausserdem noch zwischen “synchron” und “asynchron” unterschieden. Im asynchronen Fall ändert sich an der Notation nichts, da die aufrufende Instanz nicht auf den Return-Wert der rekusiv aufgerufenen Funktion wartet. Im synchronen Fall wird ein gestrichelter Pfeil (wie bei einem “normalen” Return) wieder zurück auf den ursprünglichen Lebensbalken gezeichnet. Das ist jedoch mit Visual Paradigm nicht möglich.
Die Self-Message wird in Visual Paradigm durch einen “einfachen” Pfeil dargestellt dessen Ursprung und Ziel dieselbe Instanz ist. In der Vorlesung wird die Self-Message als asynchrone Rekusive Nachricht dargestellt.
Beides ist möglich, bedeutet aber etwas anderes:
1.) Auf einen Fork Node darf im Prinzip erst mal nur ein Pfeil Zeigen, du kannst also vorher eine Raute setzen um Controlflows zusammenzuführen.
2.) Wenn du ein einen Fork Node mehrere Pfeile reinführst, machst du daraus einen Fork Node und Join Node gleichzeitig. In der Spezifikation der OMG heißt es wörtlich “Join node and fork node used together, sharing the same symbol”
Siehe folgende URL: http://www.omg.org/cgi-bin/doc?ptc/2003-08-02
Im pdf Document auf Seite 334 ganz unten ist das passende Beispiel.