# 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](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](https://git.uni-regensburg.de/ase23ws/ase23ws/-/blob/main/campus_management_example.py?ref_type=heads) 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.