260 likes | 515 Views
Design Patterns. Entwurfsmuster. Themenübersicht. Jörg: Was sind Design-Patterns Philip: Aufbau eines Patterns, Klassen vs. Interface Vererbung Christian: Vererbung vs. Komposition Tammo: wie häufige Fehler vermieden werden, Nachteile von Patterns. Hintergrund.
E N D
Design Patterns Entwurfsmuster
Themenübersicht • Jörg: Was sind Design-Patterns • Philip: Aufbau eines Patterns, Klassen vs. Interface Vererbung • Christian: Vererbung vs. Komposition • Tammo: wie häufige Fehler vermieden werden, Nachteile von Patterns
Hintergrund • 1995 erstmals von Erich Gamma und anderen in dem Buch „Design Patterns“ publiziert • 23 verschiedene Patterns • Anwendung bei der OO-Programmierung
Was sind Design Patterns? • Muster zur Lösung wiederkehrender OO-Programmierprobleme • Hilfsmittel, um Programmcode zu verbessern • In einer nicht OO-Sprache wären Vererbung, Kapselung und Polymorphie Design Patterns
Was bieten Design Patterns? • Einheitliches Vokabular für Entwickler („Lass uns eine Strategie aus diesen Klassen machen“) • Hilfe, um existierende Softwaresysteme zu verstehen. Pattern verstanden System verstanden • Anfänger können von Expertenerfahrung profitieren
Was bieten Design Patterns? (2) • Erweiterung von bestehender Software einfacher • Leichte Änderbarkeit von Programmteilen • Aufwand für Refactoring wird minimiert • Design Patterns stellen Zielsetzungen für Refactoring dar
Wichtige Elemente • Name • signifikanter Name hilft, auf einem höheren Abstraktionsniveau zu arbeiten • Möglichst kurz und prägnant • Problembeschreibung • Schildert das Problem und seinen Kontext • Enthält Bedingungen zur Anwendung des Patterns • Kann auch die zu ersetzende unflexible Objektstruktur enthalten
Wichtige Elemente (2) • Lösung • Abstrakte Beschreibung der Lösung • Beschreibt Design-Elemente, ihre Zusammenhänge und Verantwortlichkeiten zur Lösung des Problems • Konsequenz • Erläutert Vorteile und Nachteile • Einflüsse auf Flexibilität und Erweiterbarkeit
Wichtige Begriffe zum Thema • Signatur einer Methode: Name, Parameter, Rückgabewert • Interface eines Objekts={Signaturen des Objekts} • Typ: Name eines Interfaces
Interfaces und Implementierung • Über Interfaces können Anfragen an das Objekt erfolgen • Interfaces sagen nichts über ihre konkrete Implementierung aus • Objekte mit gleichen Interfaces können zur Laufzeit ausgetauscht werden
Kleines Beispiel • Ansichten entkoppelt von Datensätzen (Observer)
1. Grundsatz Programmiere für ein Interface, NICHT für eine Implementierung!! Beispielsweise unterstützt von den Patterns:“Fabrik“ oder „Prototyp“
Klassen vs. Interface-Vererbung • Interface-Vererbung: • In Java realisiert bspw als Vererbung von abstrakten Klassen • Es werden nur Interfaces ohne Implementierung vererbt • Klassen-Vererbung: • Konkrete Implementierung der Interfaces wird mitvererbt
Vererbung vs. Komposition Bsp.: eine bereits implementierte Listen-Klasse soll um eine Stack-Klasse erweitert werden. Hier durch Vererbung: LIST Add() Remove() Problem: Einige Vererbte Operationen zeigen unerwartetes Verhalten. Was passiert, wenn der Stack-User statt Pop() Operation Remove() aufruft? Stack Push() Pop() Top()
Komposition statt Vererbung LIST Add() Remove() Stack Push() Pop() Top() LIST Add() Remove() Man spricht bei Komposition von „Blackbox-reuse“, wo die Unterklasse keine Kenntnis über die Interna der Oberklasse hat. Im Gegensatz dazu wird bei Vererbung von „Whitebox-reuse“ gesprochen Stack Push() Pop() Top()
Vererbung vs. Komposition • Vererbung • Einfach zu benutzen, da von Programmiersprache direkt unterstützt • Implementierung kann zur Laufzeit nicht verändert werden • Änderungen in der Oberklasse verändern automatisch die Unterklassen VORSICHT! • Zerstört Datenkapselung
Vererbung vs. Komposition • Komposition • Schwerer zu implementieren • Datenkapselung bleibt erhalten, da Objekte nur durch Interfaces angesprochen werden • Weniger Abhängigkeiten • Klassenhierarchie bleibt überschaubar
2. Grundsatz Ziehe Objektkomposition der Klassenvererbung vor
Häufige Fehler • Ein Objekt direkt aus einer Klasse erzeugen Lösung: Abstrakte Fabrik, Prototyp • Abhängigkeit von einer bestimmten Methode Lösung: Kommando • Abhängigkeit von Hard- /Software Lösung: Abstrakte Fabrik, Brücke • Abhängigkeit von Implementierungen Lösung: Abstrakte Fabrik, Stellvertreter
Häufige Fehler • Abhängigkeit von Algorithmen Lösung: Strategie, Besucher • Zusammenhängende Objekte Lösung: Fassade, Mediator • Unmöglichkeit Klassen zu ändern Lösung: Adapter, Dekorieren
Wie man ein Pattern auswählt • Überlege, wie DPs Designprobleme lösen können • Durchsuche die DPs nach passenden Anwendungsbereichen • Untersuche wie DPs interagieren
Patterns auswählen (2. Teil) • DPs nach Zweck sortieren • Vermeide die eben erklärten häufigen Fehler • Versuche ein zukünftiges Redesign zu erleichtern
Nachteile von Patterns • Lohnen sich nur, wenn Flexibilität und Erweiterbarkeit notwendig sind • Machen Programme komplexer • Oftmals umständliche Lösungen • Verlängern die Laufzeit • Sind ein Kostenfaktor