Editor explorieren
Ich habe heute in der Firma DRAW-THE-WORLD angefangen. Mein Arbeitsplatz ist gleich am Fenster mit phantastischer Aussicht auf die Stadt. Wunderbar! Ich bin gerade daran meine sieben Sachen auszupacken und mir einen Schluck wohlriechenden Kaffee zu gönnen, da steht meine Teamleiterin vor mir. Sie verkündet: Erster Auftrag! DRAW-THE-WORLD hat einen Zeichnungseditor mit dem Namen JDraw von einer anderen Firma übernommen. Ihre Aufgabe ist es diesen Editor weiterentwickeln. Sie haben bis zur Teamsitzung Zeit die Struktur der übernommenen Software dem Entwicklerteam vorzustellen. Gut. Die Teamsitzung ist um 14.00. Jetzt ist 09.30. Huch!
Keine Panik. Ruhe bewahren. Ich chate kurz rum, eine Kollegin gibt mir folgende Tipps: Wieviel! Du musst wissen mit wie vielen Zeilen Code, Klassen, Interfaces du es zu tun hast, verschaff dir die Kennzahlen. Dann versuche möglichst schnell eine Übersicht zu erhalten. Beginne mit einem UML Klassendiagramm. Wenn du einen ersten Wurf der beteiligten Klassen hast, überprüfe die Vollständigkeit mit einem Sequenzdiagramm. Nimme dir z.B. das Starten des Systems vor. Beginne bei der main
Methode. Wenn du das hast, beginne mit kleinen Code-Veränderungen, starte das System. Verhält es sich so wie du dir das vorstellst? Installiere auf jeden Fall so etwas wie SonarLint, du willst wissen, ob die Code Qualität im Argen ist. Hey - und viel Glück! Wann sehen wir uns wieder einmal?
Ich mache mir einen Plan. Die folgenden Themen will ich nun durcharbeiten:
Kennzahlen
Zählen. Das ist wie ein Fingerabdruck der Software. Es ist gut, wenn ich den Abdruck kennen. Das ist der erste Schritt des Kennenlernens.
- Anzahl Interfaces, Klassen: Abstrakt und Konkret
- Total Zeilen Code, Anzahl pro Klasse, Interfaces
- Feature Envy?
- Zu grosse Klassen?
- Anzahl Zeilen in Methoden
- Gibt es Methoden mit mehr als 25 Zeilen?
- Mögliche Begründung?
- Anzahl der Parameter
- Gibt es Methodendeklarationen mit mehr als 3 Parameter?
- Mögliche Begründung?
- Wie viel Kommentar gibt es? Sinnvoll eingesetzt?
Visualisieren
Überblick gewinnen. Wie schaut die Struktur aus? Gerade mit einem UML Werkzeug beginnen, dann können die Diagramme auch gleich für die Präsentationen verwendet werden. Halt: Ich könnte IntelliJ verwenden - da kann ich mir die Klassen generieren lassen. Hmmm... im generierten Diagramm sind aber viele Details drin, bleibt das übersichtlich? Wenn ich Schritt für Schritt durch die Software gehe, dann kann ich gleich den Code lesen. Das bringt mir viel mehr.
Tipp: Immer die Import-Statements beachten, die sagen alles über Abhängigkeiten.
Experimentieren
Da ich GIT verwende mache ich mir zuerst einen Branch in meinem Editor-Projekt, ich nenne den gerade explore
. Das gibt mir die Freiheit zu experimentieren und den Code zu verändern. Später kann ich wieder auf den main
Branch zurück und die Experimente verwerfen.
Code Hygiene und Refactorings
SonarLint in meiner IDE installieren. Zeit SonarLint etwas als kritisch an?
Finde ich Stellen, die man noch schöner schreiben könnte? Die kann man gerade korrigieren, ich bin ja auf meinem explore
Branch.
Mein Fazit: Je besser ich den Editor kenne, desto leichter werden mir die Ausbauschritte des Editors fallen. Es lohnt sich also in dieses Kennenlernen zu investieren! Aber jetzt los! Bald ist 14.00!
Tasks fürs Teammeeting
- Generell: Ich schaue mir nur die Interfaces und Klassen aus JDraw an.
- Kennzahlen ermitteln (nicht mehr als 15' investieren, es müssen nicht alle Fragen beantwortet werden)
- Welche Bausteine (Interfaces, abstrakte Klassen und konkrete Klassen) enthält das Package
framework
?- Bevor ich nachschaue - was erwartet mich und warum?
- Welche Bausteine enthält das Package
std
?- Wie kann diese Beobachtung erklärt werden?
- Wie sind die Abhängigkeiten der beiden Packages
framework
undstd
? - Startup des Systems (schon gemacht - führt uns zu
DrawContext
, siehe unten, Diagramme) - Interface
DrawContext
- Welche Klasse repräsentiert den konkreten Kontext?
- Was sieht die entsprechende Klassenhierarchie aus?
- Was ist Zuständigkeit eines DrawContext's?
- Wieviele Instanzen gibt es? Wie kann ich das ermitteln?
- Und wenn ich ein neues Fenster öffne (Menu Window -> New Window)?
- Ablauf neues Fenster öffnen zeigen (Sequendiagramm)
-
DrawContext
und seine Umgebung- Klassendiagramm vom
DrawContext
und den von ihm verwendeten Bausteinen zeichnen
- Klassendiagramm vom
- Was passiert, wenn die Benutzer*in mit der Maus auf die Zeichenfläche drückt (MouseDown) und dann eine Figur zeichnet (mit MouseDragged)? Ich visualisiere diesen Ablauf mit einem Sequenzdiagramm.
- Demo, im Code zeigen
- Neuer Menu Punkt hinzufügen. Soll, wenn gedrückt, Hallo! zur Konsole ausgeben
- Ein zweites Rechteck in der Toolliste einfügen
- Fenstergrösse verändern
Bemerkung: Die Notizen, Diagramme, etc. können in diesem Projekt abgelegt werden. GIT commit und push nicht vergessen.
Nachbereitung
In der PL, Kapitel 1, werden drei Prinzipien erwähnt:
- Ermittle die veränderlichen Teile der Applikation und trenne diese von den unveränderlichen.
- Sicher nicht einfach zu finden - wird das im Editor gemacht?
- Programmiere gegen Schnittstellen und nicht gegen Implementierungen. Wird das eingehalten?
- Komposition wird der Vererbung vorgezogen. Finde ich dieses Prinzip in der Editor-Software?
Diagramme
Abhängigkeiten von JDraw Main-Klasse

Szenario Start des Systems (nicht vollständig)
