1 / 25

Design Patterns

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.

kosey
Download Presentation

Design Patterns

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Design Patterns Entwurfsmuster

  2. 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

  3. Hintergrund • 1995 erstmals von Erich Gamma und anderen in dem Buch „Design Patterns“ publiziert • 23 verschiedene Patterns • Anwendung bei der OO-Programmierung

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. Wichtige Begriffe zum Thema • Signatur einer Methode: Name, Parameter, Rückgabewert • Interface eines Objekts={Signaturen des Objekts} • Typ: Name eines Interfaces

  10. 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

  11. Kleines Beispiel • Ansichten entkoppelt von Datensätzen (Observer)

  12. 1. Grundsatz Programmiere für ein Interface, NICHT für eine Implementierung!! Beispielsweise unterstützt von den Patterns:“Fabrik“ oder „Prototyp“

  13. 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

  14. 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()

  15. 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()

  16. 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

  17. Vererbung vs. Komposition • Komposition • Schwerer zu implementieren • Datenkapselung bleibt erhalten, da Objekte nur durch Interfaces angesprochen werden • Weniger Abhängigkeiten • Klassenhierarchie bleibt überschaubar

  18. 2. Grundsatz Ziehe Objektkomposition der Klassenvererbung vor

  19. Insgesamt 23 Patterns

  20. Klassifikation

  21. 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

  22. 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

  23. Wie man ein Pattern auswählt • Überlege, wie DPs Designprobleme lösen können • Durchsuche die DPs nach passenden Anwendungsbereichen • Untersuche wie DPs interagieren

  24. Patterns auswählen (2. Teil) • DPs nach Zweck sortieren • Vermeide die eben erklärten häufigen Fehler • Versuche ein zukünftiges Redesign zu erleichtern

  25. 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

More Related