Vortrag zur Diplomarbeit von Carsten Stocklöw Fachbereich Biologie und Informatik Johann Wolfgang Goethe - Universität 1/39
Überblick Einleitung UML Stand der Technik Konzept Implementierung Demonstration Fazit 2/39
Einleitung Software wird zunehmend komplexer Es ist schwierig, den Überblick zu behalten Problem: Programmiersprachen sind als Sprachen linear orientiert Sind graphische Darstellungen besser geeignet zur Visualisierung von vernetzten Zusammenhängen wie Vererbungshierachien? 3/39
Einleitung Möglichkeiten zur graphischen Darstellung Änderung in der graphischen Darstellung führt zu veränderten Sourcecode Darstellung der vernetzten Strukturen Zielsprache: C++ Kernfrage: Können graphisch orientierte Tools die Programmierarbeit wesentlich beschleunigen? 4/39
Einleitung Reverse Engineering Extrahieren der Konstruktionselemente aus Sourcecode Forward Engineering Erstellen von Sourcecode anhand von Konstruktionselementen Roundtrip Engineering = Reverse Engineering + Veränderungen + Forward Engineering 5/39
Einleitung Refaktorisierung (Refactoring) Umbenennen Attribute kapseln Methoden extrahieren Schnittstelle extrahieren Subklasse extrahieren Variable für Ausdruck anlegen... 6/39
UML Unified Modelling Language Notation zur Visualisierung, Dokumentation, Konstruktion und Spezifikation von Software-Systemen Aktuelle Version: 1.5 Version 2.0 für Ende 2004 vorgesehen 7/39
UML UML Diagramme Struktur Verhalten Klassen Komponenten Objekte Aktivitäten Zustand Verteilung Packet Kompositionsstruktur Anwendungsfall Interaktion Interaktionsübersicht Sequenz Kommunikation Timing 8/39
UML - Klassendiagramm cd Klassen Window Haus size 1 Zimmer + size: Area = (100,100) # visibility: Boolean = true + defaultsize: Area Auto hat 4 Reifen + draw() Anbieter Schnittstelle Nutzer Button List Tree Anbieter Schnittstelle Nutzer 9/39
UML - Anwendungsfalldiagramm uc Online-Shop Online-Shop Produkt suchen Produkt versenden «include» Sachbearbeiter Kunde Produkt bestellen Bestellung bearbeiten Produkte verwalten Lagerist Mitarbeiter 10/39
Stand der Technik Betrachtete Programme: ClassBuilder 2.4 Alpha 1.7 Enterprise Architect 4.0 build 729 Jumli 1.4 Metamill v3.1 (build 556) ObjectDomain R3 (build 292) objectif 4.7 Rational Rose Enterprise Edition (2003.06.00.436.0) Select Component Factory 5.0 UMLStudio 7.1 (Build 746) WithClass 2000 Enterprise 6.0 11/39
Stand der Technik Gemeinsamkeiten: Unterstützung von UML Konstruktionselemente werden zusätzlich in einer Baumstruktur dargestellt Beziehungen werden durch Ziehen einer Linie erstellt 12/39
Stand der Technik Beispiel: Enterprise Architect 13/39
Stand der Technik Einschränkungen: Teilweise werden Methodenkörper nicht verarbeitet Nicht alle Beziehungen zwischen Klassen werden erkannt Fehler (z.b.: umbenennen resultiert in einem neuen Element) Klassen werden in separate Dateien ausgelagert Kommentare im Sourcecode werden nicht übernommen Sourcecode wird verändert 14/39
Stand der Technik Beispiel: Metamill // METHOD=mm:5120f0c8-ed84-11d8-8843-fd458635e3a5 void AddParent(CDataContainer* cont); // METHOD=mm:5120f0ca-ed84-11d8-8843-fd458635e3a5 void AddEnum(CDataEnum* item); // METHOD=mm:5120f0cc-ed84-11d8-8843-fd458635e3a5 void AddVariable(CDataVariable* var); // METHOD=mm:5120f0ce-ed84-11d8-8843-fd458635e3a5 void AddTypeReference(CDataVariable* data); 15/39
Stand der Technik Beispiel: WithClass 2000 struct stfilepos { CDataFile* File; long Line; long Col; }; Þ class stfilepos { CDataFile* File; long Line; long Col; CDataFile* File; public: }; 16/39
Konzept UML ist sehr vielseitig aber: viele Elemente können nicht in Sourcecode übersetzt aus Sourcecode gewonnen werden Þ automatisches Erstellen nicht möglich 17/39
Konzept Verschiedene Sichten mit unterschiedlichem Detailgrad Parallele Darstellung von Sourcecode und Graphik Design-Sicht 18/39
Fazit Beispiel: SourceCode to Flowchart 19/39
Konzept Methoden: Programmablaufpläne sort Start i = 1 2 sonst return i = 1; Button draw() 20/39
Konzept Klassen Symbole Button Window + draw() + draw() Button Window Methoden-Aufrufe Kontextdiagramm draw() draw() 21/39
Konzept Module und Komponenten Anhaltspunkte: Paket Model Unterverzeichnisse Klasse A Namensräume Klasse B Logische Aufteilung Subsystem Spezifikation Realisierung 22/39
Implementierung - Parser 1972: C 1980: C mit Klassen (ab 1983: C++) Probleme: Vorverarbeitung (Präprozessor) Eigene Datentypen C++ enthält C (Altlasten: Trigraph:??< Þ { ) Alternative Darstellungen ( <% Þ { ) 23/39
Implementierung - Parser Erstellung des Ableitungsbaums Problem: Konflikte in Grammatik Beispiel: dangling else Parsergenerator Bison meldet über 60 shift/reduce-konflikte und über 700 reduce/reduce-konflikte Prototypische Umsetzung verzichtet auf Erstellung des Ableitungsbaums 24/39
Implementierung - Layout Automatisches Layout Graphenalgorithmen Knoten: Klassen & Pakete Kanten: Beziehungen (Generalisierung, Aggregation,..) 25/39
Implementierung - Layout Ästhetikkriterien für automatisches Layout: Überschneidungen von Kanten Abstand zwischen Knoten Abstand zwischen Kanten bzw. zwischen Knoten und Kanten Länge der Kanten Anzahl der Kantenknicke Größe und Form des Diagramms Darstellung der Vererbungshierarchie 26/39
Implementierung - Layout Ästhetikkriterien für automatisches Layout: Überschneidungen von Kanten Abstand zwischen Knoten Abstand zwischen Kanten bzw. zwischen Knoten und Kanten Länge der Kanten Anzahl der Kantenknicke Größe und Form des Diagramms Darstellung der Vererbungshierarchie 27/39
Implementierung - Layout Ästhetikkriterien für automatisches Layout: Überschneidungen von Kanten Abstand zwischen Knoten Abstand zwischen Kanten bzw. zwischen Knoten und Kanten Länge der Kanten Anzahl der Kantenknicke Größe und Form des Diagramms Darstellung der Vererbungshierarchie 28/39
Implementierung - Layout Ästhetikkriterien für automatisches Layout: Überschneidungen von Kanten Abstand zwischen Knoten Abstand zwischen Kanten bzw. zwischen Knoten und Kanten Länge der Kanten Anzahl der Kantenknicke Größe und Form des Diagramms Darstellung der Vererbungshierarchie 29/39
Implementierung - Layout Ästhetikkriterien für automatisches Layout: Überschneidungen von Kanten Abstand zwischen Knoten Abstand zwischen Kanten bzw. zwischen Knoten und Kanten Länge der Kanten Anzahl der Kantenknicke Größe und Form des Diagramms Darstellung der Vererbungshierarchie 30/39
Implementierung - Layout Ästhetikkriterien für automatisches Layout: Überschneidungen von Kanten Abstand zwischen Knoten Abstand zwischen Kanten bzw. zwischen Knoten und Kanten Länge der Kanten Anzahl der Kantenknicke Größe und Form des Diagramms Darstellung der Vererbungshierarchie 31/39
Implementierung - Layout Ästhetikkriterien für automatisches Layout: Überschneidungen von Kanten Abstand zwischen Knoten Abstand zwischen Kanten bzw. zwischen Knoten und Kanten Länge der Kanten Anzahl der Kantenknicke Größe und Form des Diagramms Darstellung der Vererbungshierarchie 32/39
Implementierung - Layout Ansätze für Layoutalgorithmen: Der Topology-Shape-Metrics Ansatz Der Hierarchische Ansatz Der Sichtbarkeits Ansatz Der Vergrößerungs Ansatz Der Gerichtete-Kräfte Ansatz Der Divide and Conquer Ansatz 33/39
Implementierung - Layout Der Hierarchische Ansatz: Gerichtete azyklische Graphen Schritt 1: Ebenen-Zuweisung (layer assignment) Þ 34/39
Implementierung - Layout Der Hierarchische Ansatz: Gerichtete azyklische Graphen Schritt 2: Kreuzungs-Reduktion (crossing reduction) Þ 35/39
Implementierung - Layout Der Hierarchische Ansatz: Gerichtete azyklische Graphen Schritt 3: X-Koordinaten (x-coordinate assignment) Þ 36/39
Präsentation 37/39
Fazit Getestete Programme nützlich für: Design neuer Komponenten Dokumentation vorhandener Komponenten Sinnvoll: Erweiterung von Texteditoren um graphische Elemente Gleichzeitige Darstellung von Text und Graphik Bearbeitung im Text und in Graphik abwechselnd 38/39
Vielen Dank für Ihre Aufmerksamkeit 39/39