UML-Diagrammen
(2)In einer Reihe von Artikeln in der If Fase werden nützliche Elemente von LaTeX vorgestellt, die erprobt sind und bei der täglichen Arbeit der Informatiklehrerin eingesetzt werden.
In den bisher vorgelegten sechs Teilen der Artikelserie – Ausgaben 0 … 5: rhinodidactics.de/Archiv – wurden Hinweise zur Installation, grundlegenden Arbeitsweisen, Quellen zu Dokumentationen, die Arbeit mit KOMAscript, Hinweise auf PSTricks und als stärker inhaltsbezogene Elemente die Erstellung von Arbeitsblättern, Struktogrammen, Automatengrafen und einigen Elementen von UML thematisiert. In dieser Ausgabe beschäftigen wir uns mit einer weiteren Möglchkeit zur Erstellung von Diagrammen der Unified Modeling Language (UML).
Dazu wird ein relativ junges Paket zum Einsatz gebracht, das mit Hilfe von MetaPost einfache Programmierschnittstellen für folgende Diagrammtypen zur Verfügung stellt -- MetaUML:
Wir verwenden hier Beispiele, die in den Materialien des Autors vorgestellt und dokumentiert werden. Die Realisierung ist an dem Gegenstandsbereich orientiert, so dass sich für die Erstellung eine objektorientierte Schreibweise geradezu anbietet.
% % input metauml; beginfig(1); Class.A("Point") ("+x: int", "+y: int") (); Class.B("Circle") ("radius: int") ("+getRadius(): int", "+setRadius(r: int):void"); A.nw = (0,0); B.n = A.s - (0,45); Class_draw.A; Class_draw.B; drawRelation(aggregationUni)(A.s -- B.n); endfig; end
Der angegebene Quellcode erzeugt das Klassendiagramm aus der
Abbildung. Dabei wird deutlich, dass die Schreibweise recht intuitiv ist
und eine [halb-] automatische Generierung aus Quellcode sich geradezu
anbietet. Der Autor dieses Artikels hat ein einfaches Pythonprogramm
geschrieben, das mit dem Standardparser pyclbr
aus
Python-Quellcode Klassendiagramme erstellt.
Als weiteres Beispiel dokumentieren wir im Folgenden einen Anwendungsfall.
Quellcode für das Anwendungsfalldiagramm:
% % input metauml; beginfig(1); Actor.user("User"); Actor.db("Database"); Usecase.dbquery("Query database"); Usecase.auth("Authentification"); Usecase.authA("Authentification by", "username, password"); Usecase.authB("Authentification by", "smartcard"); auth.w = user.human.e + (30,0); dbquery.s = auth.n + (0,30); db.human.w = dbquery.e + (30,0); authB.left - authA.right = 30; authB.midy = authA.midy; .5[authB.w, authA.e] = (auth.midx, auth.bottom - 50); drawObjects(user, auth, dbquery, db, authA, authB); clink(inheritance)(authA, auth); ... endfig; end
Der MetaPost-Quellcode stellt nicht das Ende, sondern den Anfang der
Kette der Arbeiten dar. Um *.mp-Dateien, die programmierte Grafiken
repräsentieren, in andere Formate umzuwandeln, ist als erstes
mptopdf
zu erwähnen. Damit werden aus dem MetaPost-Format
PDF-Dateien erstellt. Das Werkzeug mptopdf
ist Bestandteil
üblicher tetex-Distributionen und sollte damit auf jedem LaTeX-System
standardmäßig installiert sein. Der Aufruf mptopdf
usecase.mp
generiert eine oder mehrere PDF-Dateien, da eine
*.mp-Quelle mehrere Abbildungen enthalten kann.
Die Werkzeuge für die Umwandlung der PDF-Datei nach *.svg setzen
Elemente voraus, die kein Bestandteil von LaTeX sind: pstoedit
skconvert gzip
Im Folgenden wird die Aufrufreihenfolge angegeben,
mit der aus der PDF-Datei, die oben erstellt wurde, eine *.svg-Datei
erzeugt wird.
% % pstoedit -page 1 -dt -psarg "-r9600x9600" -f sk usecase-1.pdf usecase.sk skconvert usecase.sk usecase.svg gzip -S z --best usecase.svg
Für die weitere Arbeit mit diesem Paket sei neben dem Manual auf die folgenden Quellen verwiesen: