Tutorial 3: Code Reading and Editing
ASE WS 2023/24
Dieses Dokument ist kein eigenständiges Tutorial sondern unterstützt die Übung. Die grundlegenden Konzepte werden vorgestellt, hilfreiche Links erleichtern die selbständige Vertiefung.
Ziele:
- Ihr versteht, wie und wo Ihr Design-Patterns anwenden könnt.
- Ihr versteht das Decorator-Pattern und könnt es in Python sinnvoll anwenden.
- Ihr kennt Strategien, um Euch in fremden Code einzuarbeiten und diesen zum Laufen zu bringen.
- Ihr könnt Design-Entscheidungen auf Basis der Architekturprinzipien und SOLID-Prinzipien treffen.
Dieses Tutorial baut teilweise auf den Kenntnissen aus dem Linux-Tutorial auf.
Editor vs. IDE
(Raphael erzählt ein bisschen was)
Fremden Code Lesen und zum Laufen bringen
Kriterien beim Lesen von fremdem Code:
- Gibt es eine README-Datei o.ä. mit Hinweisen zur Installation?
- Wie ist die Verzeichnisstruktur?
- Welche Programmiersprachen werden verwendet?
- Welche Build-Systeme werden verwendet?
- Wo ist der Einstiegspunkt ins Programm?
- Wie sieht die Versionsgeschichte aus?
- …
Strategien:
- Ansatzpunkt finden (Code, von dem man weiß, was er tut) und dann von dort ausgehend die Call-Hierarchie hoch oder runter explorieren.
- Active reading: Notizen im Code machen, Code ggf. refactoren
- Logging hinzufügen, um Call-Hierarchie zu verstehen
Siehe auch: https://stackoverflow.blog/2022/08/15/how-to-interrogate-unfamiliar-code/
Vorbereitung: wir brauchen einen Möglichkeit, Java-Code zu kompilieren und auszuführen
- Option A: über eine IDE wie Visual Studio Code, Eclipse, IntelliJ
- Option B: auf der Kommandozeile unter Linux (stellt Raphael vor) ### Aufgaben
Löst zu zweit oder zu dritt (oder alleine) folgende Aufgaben
- Klont das Repository https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition/ lokal
- Checkt zuerst den Commit
8d10
aus. - Lest den Code und bringt ihn zum Laufen
- Checkt Commit
ba06
aus. - Lest den Code und bringt ihn zum Laufen
- Checkt den HEAD-Commit aus.
- Versucht, den Code zu Lesen und ihn zum Laufen zu bringen.
(Die letzte Aufgabe machen wir gemeinsam)
Design-Patterns anwenden, Design-Entscheidungen treffen
Aufgaben
- ladet aus GRIPS oder von git.ur.de die Datei
campus_management_example.py
herunter und öffnet sie in einem Editor. - in der Datei sind mehrere Fragen zu Design-Entscheidungen - diskutiert diese kurz zu zweit/dritt (wir sammeln dann die Meinungen)
- trefft Design-Entscheidungen
- erzeugt ein Repository in git.ur.de (unter der ASE_23WS-Gruppe mit dem Namen “01 Campus-Management $Vorname $Nachname”
- committet dort eine minimale Version Eurer Lösung bis Montag, 14 Uhr.
Aufgabe:
Read up on the classic 23 design patterns. Write a small Python application (text-only) that represents a building management system with the following features:
- Organize buildings, rooms, (building parts, hallways, stairways)
- Allow for authenticating against the system
- Allow for reporting a problem with any of the objects
- Get a list of problems for a given building / part / room / … if authorized
Use at least three design patterns here.