@ -34,3 +34,82 @@ Ein Handwerker und ein Künstler unterscheiden sich hauptsächlich darin
Könnten Sie vielleicht die Folien der letzten Vorlesung noch hochladen? Auf Moodle gibt es nur die Orga-Folien, nicht die über Handwerker und Künstler.
---
## SU 02 (31.10.2023) - Programmierparadigmen und Prinzipien der Programmierung
### Lernziel
**Seminarischer Unterricht:**
Programmierparadigmen:
- Imperativ:
- Schritt für Schritt, aus sich selbst nachvollziehbar
- Deklarativ:
- (Mathematische) Beschreibung des Problems
- Lösung ergibt sich automatisch
- Prozedural:
- Ergänzung der imperativen Programmierung durch Aufteilung des Codes in kleinere Teile
- Start immer in Hauptprozedur
- Fehlerzustände durch Rückgabewerte
- Objektorientiert:
- Objekte haben Beziehungen untereinander, auch Vererbung
- Klasse dient als eine Art Vorlage, um konkrete Objekte abzuleiten
- Polymorphie
- Funktional:
- Verfeinerung des deklarativen Paradigmas um Funktionen
- Funktionen können andere Funktionen aufrufen oder sogar während der Laufzeit generieren
- Funktionen werden als gleichwertiger Datentyp angesehen
- Eher für nebenläufige Prozesse geeignet
- Typisiert:
- Jede Variable hat einen Datentyp --> Kann auch durch IDE zugewiesen werden
- Codevervollständigung durch IDE, Kompiler kann Fehler vor der Ausführung des Programms erkennen
- Typenlos:
- Kein konkreter Datentyp für Variable
- Ermöglicht einfache Konvertierung von zum Beispiel String zu Integer
- Kompiler kann entsprechende Fehler nicht finden
Solid (Do) / Stupid (Don't):
- S → Separation of Concern
- O → Open/Closed
- L → Liskov Substitution Principle
- I → Interface Segregation Principle
- D → Dependency Inversion Principle
- S → Singleton
- T → Tight Coupling
- U → Untestability
- P → Premature Optimization
- I → Indescriptive Naming
- D → Duplication
Abkürzungen:
- KISS → Keep It Simple (and) Stupid
- FCoH → Favor Composition over Inheritance
- SLA → Single Layer of Abstraction
- YAGNI → You Ain't Gonna Need It
- IOC → Inversion of Control
- DI → Dependency Injection
**Praxisübung:**
- Einordnung von verschiedenen Programmiersprachen in die Paradigmen
- Einrichten der SSH-Verbindung
### Erkenntnis
Für das Gruppenprojekt kann ich aus dem Seminarischen Unterricht vor allem die Solid/Stupid-Inhalte mitnehmen und die Solids anwenden und Stupids vermeiden.
Aus dem Praxisteil kann ich mitnehmen, dass die SSH-Kommunikation von Git zu Gitlab aufwändiger einzurichten ist, aber allgemein als bevorzugte Methode angesehen wird, mit dem Gitlab-Server zu kommunizieren.
### Wiederholung
Das "i" in Stupid steht für "Indescriptive Naming". Das bedeutet, dass Variablennamen selbst schon die Funktion des Codeblocks erklären sollten. Kommentare sind eher zu vermeiden, da hektische änderungen des Codes (beispielsweise wenn die Deadline sehr nah ist) oft die Kommentare dann nicht mitändern und die Kommentare dann gar nicht mehr den eigentlichen Code beschreiben. Stattdessen sind Variablennamen sowie Funktionennamen so zu wählen, dass gar keine Kommentare nötig sind, um die Funktion des Codesegments zu verstehen.