Artikel - UML-Sequenzdiagramm für das Laden von XML-Daten

Logo

OO Tannenbaum.

Ist es nicht jedes Jahr dasselbe ?! Die Vorfreude auf Weihnachten und das Planen des Böllerfestes sind oftmals sehr viel schöner, spannender und angenehmer, als sich am Ende tatsächlich mit Gänsebraten, Gästen und Kühlbeuteln auf der Stirn herumzuschlagen. Auch beim Software-Entwurf ist man sich nach erfolgreicher Akquisition und geköpften Sektflaschen ganz sicher: Diese Anwendung wird noch stabiler, noch schneller, noch zuverlässiger, kurzum: perfecto. Dumm nur, dass der Kunde am Ende doch keinen Tannenbaum mit Kerzen, sondern eine Fichte mit Lichterkette sehen will. So ist das mit der Bescherung. Aber wir konnten die Aventszeit geniessen, so war es ja nicht. UML ist, wenn das erste Lichtlein brennt. Wer mit dem Gedanken spielt, seine Anwendung mit der Unified Modeling Language (UML) zu entwerfen, benötigt neben einem UML CASE Tool (z.B. ArgoUML | Poseidon for UML ) oder einem Zeichenprogramm, welches UML-Diagramme unterstützt (z.B. SmartDraw), eigentlich nur noch eine griffige Notationsübersicht oder ein gutes Buch. Wenn ich es mir recht überlege, reichen eigentlich auch Bleistift und Makulatur. Auf geht's.

Das Sequenzdiagramm

Neben den Klassen-Diagrammen dürften vor allem die Sequenzdiagramme für ActionScript-Programmierer sehr hilfreich sein. Mit einem Sequenzdiagramm lässt sich die Kommunikation zwischen Objekten als zeitliche Abfolge darstellen, im folgenden Beispiel etwa der Nachrichtenfluss zwischen einem MovieClip-Objekt und einem XML-Objekt. Das Diagramm stellt dabei einen Ablauf dar, den Sie schon oft in ActionScript umgesetzt haben (s. Skript ganz unten) und der damit bestens zum Herantasten geeignet ist.

Sequence Diagramm mit onData() und onLoad()

(selbiges Diagramm in der Entwicklungs-Umgebung von Gentleware Poseidon for UML 1.5)

Zum Ablauf: Am Anfang gab es nur Feuer, Wasser und einen MovieClip (die Hauptzeitleiste), der ganz oben steht. Dieses MovieClip-Objekt erzeugt ein neues XML-Objekt xmlObj (synchrone Objektkonstruktion). Die load()-Methode des XML-Objekts xmlObj wird aufgerufen (synchrone Nachricht an xmlObj). Das XML-Objekt wird benachrichtigt, wenn Daten geladen sind (asynchrone Selbstdelegation - asynchron deshalb, weil unbestimmt ist, wann dieses Ereignis eintritt, der Aufruf des Event-Handlers passiert damit nicht synchron zur normalen Skriptabarbeitung). Das XML-Objekt wird benachrichtigt, wenn das geladene XML-Dokument vollständig geparst wurde (synchrone Selbstdelegation - synchron deshalb, weil dieses Ereignis direkt an das Ende das Parsing-Prozesses gekoppelt ist). Im onLoad() Event-Handler wird doSomething() auf der Hauptzeitleiste aufgerufen (asynchrone Anwort an das MovieClip-Objekt - asynchron deshalb, weil es für die Hauptzeitleiste unbestimmt ist, wann der Blitz einschlägt.)

Nun, unter normalen Arbeitsbedingungen brauchen Sie sich keine Gedanken über den onData() Event-Handler machen, weswegen man obiges Sequenzdiagramm für unsere Zwecke durchaus auf folgenden Ablauf stutzen kann.

Sequence Diagramm nur mit onLoad()

Beachten Sie, dass das die Nachricht (der Stimulus) 'XML geparst' jetzt als asynchron (und nicht wie oben als synchron) gehandelt wird. Die Lebenslinie des XML-Objekts endet mit einem Kreuz, d.h. das Objekt wird nach Ausführung der Funktion doSomething() gelöscht.

Das Skript

Das Skript, welches die Abfolge aus dem obigen Sequenzdiagramm realisiert.

/////////////////////////////////////////////////
// ActionScript Beispiel zum UML-Sequenzdiagramm
this.doSomething = function() {
	trace("Hurra, ich hab eine Antwort bekommen.");
	trace(this.xmlObj);
	delete this.xmlObj;
};
this.xmlObj = new XML();
this.xmlObj.onData = function(daten) {
	trace("Daten geladen");
	this.parseXML(daten);
	this.onLoad();
};
this.xmlObj.onLoad = function() {
	trace("XML geparst");
	_root.doSomething();
};
trace("Hauptzeitleiste schickt Nachricht an xmlObj.");
this.xmlObj.load("daten.xml");

Meldungen im Ausgabefenster

Die Meldungen im Ausgabefenster der Flash MX IDE.

Hauptzeitleiste schickt Nachricht an xmlObj.
Daten geladen
XML geparst
Hurra, ich hab eine Antwort bekommen.
<xml><daten>Hallo</daten></xml>

Downloads und Links

Das ZIP-File enthält die verwendete XML und Flash-Datei.

Andere Sequenzdiagramm-Beispiele mit mehreren Objekten (Poseidon).