- Ursprung in der Architektur → Entwurf von Dächern
- Hauptsächlich in objektorientierter Programmierung
Pro:
- Lösung ist erprobt → Man kann davon ausgehen dass sie funktioniert
- Vor- und Nachteile sind im Vorfeld bekannt
- Dokumentation von Code, erleichtert Diskussionen über Code
Con:
- Man muss sie erst lernen → Hohe Einstiegshürde
- Im Code schwer identifizierbar
Gang of Four unterschied zwischen folgenden Typen:
*Erzeugungsmuster:*
- Fabrikmethode
- Fabrik erzeugt neue Codeelemente
- Abstrakte Fabrik
- Objekte als Input, neue Objekte mit neuer Funktion als Output
- Singleton
- Es gibt nur eine Kopie des Objekts, auf die alle zugreifen
- Multiton
- Anzahl der erzeugten Objekte wird kontrolliert, Begrenzung von Resourcen
*Strukturmuster*
- Adapter
- Adaptiert eine Schnittstelle einer Klasse in eine andere
- Nachrüstungsschnittstelle
- Adapter, der fehlende Infos ergänzt
- Wird evtl benötigt wenn alter Code mit neuem Code kombiniert wird
- Brücke
- Entkoppelt Abstraktion und Implementation
- Dekorierer
- Zusätzliche Funktionalität wird während er Laufzeit hinzugefügt
- Fassade
- Erzeugt vereinfachte Schnittstelle einer anderen Schnittstelle
- Fliegengewicht
- Funktionalität, die von vielen Objekten genutzt wird wird in Extraobjekt ausgelagert
*Verhaltensmuster*
- Accumulator
- Sammelt Daten
- Beobachter
- Wird registriert, um bestimmte Ereignisse zu beobachten und darauf zu reagieren
- Iterator
- Zugriff auf Elemente eines aggregierten Objekts → Array, Liste etc.
- Kommando
- Zusammenfassung con Daten und Methoden im Objekt
- Nullobjekt
- Vorgabewert für ein Objekt ohne Inhalt, ist aber gültig
- Strategie
- Zur Laufzeit wird eines der Kommandos ausgewählt
→*IDEs*
- "Integrated Development Environment"
- Kombiniert Codeeditor, Compiler, Debugger etc.
- Ursprung:
- Bohrer und Holzbretter zur "Programmierung" von Webstühlen
- Erster elektronischer Computer durch Konrad Zuse → "Soft"ware weil mit weichem Bleistift und Radiergummi
- Computer können Code selbstständig in Bytecode übersetzen
- Entwicklung von IDEs
- Funktionen:
- Syntax Highlighting
- Codevervollständigung
- Navigation im Code
- Compile-Parameter
- Automatische Formatierung
- Automatisierte Refactorings
- Verändern keine Funktionalität des Codes
- Zum Beispiel Variablen umbenennen für bessere Lesbarkeit und Verständnis des Codes
- Geht je nach IDE auch über mehrere Dateien hinweg
- Debugging
**Praxisübung:**
- Wiederholung von Entwurfsmustern und den Akronymen Solid/Stupid
- Installation der Eclipse-IDE
- Debug-Übungen
### Erkenntnis
Für das Gruppenprojekt kann ich aus dem Seminarischen Unterricht hauptsächlich mitnehmen, dass IDEs viel Arbeit durch Codevervollständigung, Debugging etc. abnehmen und erleichtern.
Aus dem Praxisteil kann ich die Anwendung des Debuggers mitnehmen. Vor allem die Möglichkeit, bewusst in Funktionen hineinzuspringen war mir neu.
### Wiederholung
Das Entwurfsmuster "Nachrüstungsschnittstelle" kann man im Prinzip als eine Art fortgeschrittenen Adapter betrachten. Während ein normaler Adapter nur gleiche Parameter miteinander verbinden kann, kann die Nachrüstungsschnittstelle auch Code adaptieren wenn die Parameter unterschiedlich sind. Das Problem taucht in der Regel dann auf, wenn man neuen Code mit altem Code benutzen möchte und dieser neue Code Parameter benötigt die der alte Code einfach nicht bereitstellt. Die Nachrüstungsschnittstelle kann dann diese fehlenden Parameter selbst ausfüllen und damit den neuen Code mit dem alten kompatibel machen.
### Kritik
Entwurfsmuster sind schwer vorstellbar, da keine konkreten Beispiele gegeben waren. Man kann sich zwar vorstellen was beispielsweise eine abstrakte Fabrik macht, hat aber keine Ahnung wie man das konkret anwenden soll. Ich denke, Codebeispiele würden hier vielleicht eher helfen als verwirren.