Head First Design Patterns. FALLBEISPIEL: SimUDuck

Ähnliche Dokumente
Vorlesung. Techniken der Programmentwicklung. Zusatzmaterialien zu 3. Kapitel: Einsatz der erlernten Techniken: Abstrakte Klassen & Interfaces

Strategy & Decorator Pattern

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

a.k.a. Broker a.k.a. Vermittler , Sebastian Gäng, Moritz Moll, Design Pattern, HTWG Konstanz

Überblick FBC SNW Zusammenfassung. Entwurfsmuster. Eine Einführung. Botond Draskoczy. Marcus Vitruvius Pollio

Software Engineering. 10. Entwurfsmuster II. Franz-Josef Elmer, Universität Basel, HS 2015

Anwendung der Aspektorientierung: Design Patterns

Design Patterns. OO-GetTogether. Volker Michels

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Schnittstellen und. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Polymorphie. 15. Java Objektorientierung II

Entwurfsmuster in Java

Bekannte Lösungen für bekannte Probleme benutzen. Entwurf auf höherer Abstraktionsebene als bei Programmiersprachen

Polymorphie. 15. Java Objektorientierung II

Specifying Patterns for Dynamic Pattern Instance Recognition with UML 2.0 Sequence Diagrams. Lothar Wendehals. Universität Paderborn

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

14. Java Objektorientierung

Wie schreibe ich ein Powerbook

Die S.O.L.I.D-Prinzipien für C# Entwickler Thomas Claudius

SOLID für.net und JavaScript

22. Subtyping, Polymorphie und Vererbung

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Grundlagen der Programmierung in C Klassen

14. Java Objektorientierung

Design Patterns II. Der Design Muster Katalog. Prof. Dr. Nikolaus Wulff

Programmieren in Java

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Strategie. (Strategy. / Policy) Ein objektbasiertes Verhaltensmuster. Stephan Munkelt, Stefan Salzmann - 03IN

Programmieren I. Kapitel 8. Vererbung

Algorithmen und Datenstrukturen

Einführung in die Programmierung Wintersemester 2008/09

Entwurfsmuster. Tao Zhang Technische Universität München Lehrstuhl für Angewandete Softwaretechnik

Design Patterns. (Software-Architektur) Prof. Dr. Oliver Braun. Letzte Änderung: :12. Design Patterns 1/26

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Decorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer

10 Abstrakte Datentypen

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

13 Abstrakte Datentypen

Objekt-orientierte Programmierung

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Vererbung und Traits

class Mitarbeiter {...} class AussendienstMitarbeiter extends Mitarbeiter {...} class InnendienstMitarbeiter extends Mitarbeiter {...

Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008

Vorkurs Informatik WiSe 15/16

Software-Architektur. Design Patterns. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Objektorientierte Programmierung

Programmieren 2 Java Überblick

Programmieren 1 09 Vererbung und Polymorphie

Verhaltensmuster. Entwurfsmuster - Design Patterns. HAW Hamburg Fakultät Technik und Informatik Department Informations- und Elektrotechnik

Entwurfsmuster Martin Fesser 00IN

Informatik I Eprog HS12

Factory Patterns und deren Auswirkung auf die Softwarearchitektur in der Praxis

Informatik II Übung 6 Gruppe 7

7. Zusammenfassung (1)

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

3. Entwurfsmuster zur Entkopplung von Modulen. Übersicht zu Entwurfsmustern

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Praktikum. SEP: Java-Programmierung WS 2018/19. Modularisierung. Thomas Lemberger und Martin Spießl

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Einführung in die Programmiersprache Java II

Teil 2.2: Lernen formaler Sprachen: Hypothesenräume

PHP OOP, Design Patterns und UML. Marco Skulschus

Corporate Digital Learning, How to Get It Right. Learning Café

Ersetzbarkeit und Verhalten

Zusammenfassung. Mit bjam und ein paar Zeilen in einem Jamroot oder Jamfile lässt sich das Kompilieren und Linken einfach automatisieren

Can I use an older device with a new GSD file? It is always the best to use the latest GSD file since this is downward compatible to older versions.

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Das Interface-Konzept am Beispiel der Sprache Java

Objektorientierte Programmierung OOP

Logik für Informatiker Logic for computer scientists

Abschnitt 10: Datenstrukturen

FAHRZEUGENTWICKLUNG IM AUTOMOBILBAU FROM HANSER FACHBUCHVERLAG DOWNLOAD EBOOK : FAHRZEUGENTWICKLUNG IM AUTOMOBILBAU FROM HANSER FACHBUCHVERLAG PDF

Vererbung und Polymorphie

Feature-Komposition auf Bytecode-Ebene

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Objektorientiertes JavaScript

Client-Server-Beziehungen

Software Design Patterns Zusammensetzung. Daniel Gerber

Programmieren in Java -Eingangstest-

Software Reuse Sommer Schritt 1: Rechtschreibung, Grammatik, Wortschatz, Semantik Schritt 2: Vertiefung

Level 1 German, 2012

Einstieg in die Informatik mit Java

Software Entwicklung 1

Modellgetriebene Entwicklungsprozesse in der Praxis - eine Bestandsaufnahme. Tillmann Schall, anaptecs GmbH

Informatik II, SS 2014

Einstieg in die Informatik mit Java

Klassen, Entitäten, Generalisierung, Information Expert Bla bla bla bla

PS Software Engineering WS 2018/19

D-BAUG Informatik I. Exercise session: week 1 HS 2018

Design Patterns. 3. Juni 2015

Vererbung, Polymorphie

Warum? Wie? Algorithm Tests Diverses. Unit Tests. Datamining und Sequenzanalyse. Kai Dührkop, Markus Fleischauer

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Schnittstellen, Vererbung & Polymorphismus für Fortgeschrittene

Transkript:

Head First Design Patterns FALLBEISPIEL: SimUDuck 1

SimUDuck Fallbeispiel aus Head First Design Patterns [1] SimUDuck: Simulationsspiel wo verschiedenen Entenarten (Stockente, Rotschopfente, Schnatterente ) in einem Teich herumschwimmen und Quak- Geräusche von sich geben. Spiel soll erweitert werden [1] Eric Freeman et al.: Head First Design Patterns, O'Reilly, 2004 2

Momentanes Design Duck klassische OO-Technik Eine abstrakte Enten-Basisklasse Weitere Entenklassen leiten ab +swim() abstract MallardDuck RedheadDuck Weitere Entenklassen 3

Java code SimUDuck_initial 4

Neue Anforderung Enten sollen auch fliegen können Lösungsvorschläge? MallardDuck Duck +swim() RedheadDuck Duck +swim() MallardDuck RedheadDuck Weitere Entenklassen 5

Problem Nicht alle Enten können fliegen! Durch die Anpassung in der Superklasse wurde Verhalten hinzugefügt, welches nicht für alle Subklassen sinnvoll ist. 6

Lösungsvorschläge? (1) Wir könnten unsere Methode fly() ebenso wie die Methode display() auf abstrakt setzen. Konsequenzen: Alle Klassen, die von Ente ableiten müssen eine eigene Implementierung von fly() bereitstellen. Enten die nicht fliegen können, bieten in diesem Fall einfach ein leere Implementierung von fliegen() an... Duck +swim() MallardDuck RedheadDuck RubberDuck empty implementation 7

Lösungsvorschläge? (2) Wir könnten unsere Methode fly() in RubberDuck überschreiben: Leere Implementierung. Weiteres Problem: Nicht alle Enten können quaken Quietsch! Bin stumm :-( 8

Konsequenz Viele überschreibende Methoden mit leerer Implementierung. verdächtig! Falsches Design! Ebenso verdächtig: Viele Subklassen wo Methoden jeweils die gleiche Implementierung haben. zb. 3 Entenarten quaken, 2 quietschen, 2 sind stumm. Weiters: Vielleicht möchte man wissen, ob eine Ente fliegen kann oder nicht (zb. Zusätzliches Symbol, Kontextmenu, ). Man bräuchte zusätzlich ein canfly() das false zurück gibt, wenn fly() leer ist. 9

Neuer Vorschlag: Interfaces fliegen() und quaken() herausziehen und daraus zwei Interfaces machen <<Interface>> IQuackable <<Interface>> IFlyable Duck +swim() MallardDuck RedheadDuck RubberDuck DecoyDuck 10

Java code SimUDuck_if 11

Konsequenzen Code Duplikation Jede Entenklasse muss ihr Flug- und Quackverhalten separat implementieren. Sehr viel arbeit wenn zb. am Flugverhalten etwas geändert werden muss Fehleranfällig Vererbung ist also irgendwie nicht die richtige Antwort auf unser Problem. 12

The one constant in software development CHANGE No matter how well you design an application, over time an application must grow and change or it will die. Designprinzip: Identifiziere jene Aspekte, die sich häufig ändern und trenne sie von jenen, die gleich bleiben. 13

Was ändert sich bei uns? Enten Grundverhalten Flugverhalten Quakverhalten 14

Mögliche Implementierung Flugverhalten Quakverhalten <<Interface>> IFlyBehavior <<Interface>> IQuackBehavior FlyWithWings Flyless Squeak Quack MuteQuack 15

Noch 2 verwendete Designprinzipien Designprinzip: Programmiere gegen ein Interface anstatt gegen eine konkrete Implementierung. Designprinzip: Bevorzuge Komposition (has-a) gegenüber Vererbung (is-a). 16

SimUDuck Architektur <<Interface>> IQuackBehavior Duck 1 #quackbehavior #flybehavior #Duck(in flybehavior, in quackbehavior) +performfly() +performquack() +swim() * * Squeak Quack MuteQuack <<Interface>> IFlyBehavior MallardDuck RedheadDuck RubberDuck DecoyDuck 1 +MallardDuck() +RedheadDuck() +RubberDuck() +DecoyDuck() FlyWithWings Flyless 17

Weitere Vorteile Neue Verhalten hinzufügbar, ohne bestehende Klassen ändern zu müssen Code reuse Die Behaviour-Klassen könnten von anderen Klassen (nicht Enten) wiederverwendet werden. Verhalten zur Laufzeit änderbar durch dynamische Bindung IQuackBehaviour Squeak Quack MuteQuack 18

Lessons Learned Drei Designprinzipien Auslagern, was sich ändert. Programmiere gegen ein Interface (Supertyp) anstatt gegen eine konkrete Implementierung. Bevorzuge HAS-A (Komposition) gegenüber IS-A (Vererbung). Ein Design Pattern: Strategy 19

Design Pattern: Strategy Struktur: abstract Context #strategy Strategy +methodusingstrategy() * 0..1 +algorithminterface() could also be an interface strategy.algorithminterface() ConcreteStrategyA ConcreteStrategyB ConcreteStrategyC +algorithminterface() +algorithminterface() +algorithminterface() Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it. [GOF] 20

Design Pattern: Strategy Java Code: see StrategyPattern Important Do not stick to the names in the UML diagram. Change class and method names according to your application. 21

Design Pattern: Strategy Beteiligte Klassen: Strategy Definiert ein gemeinsames Interface für alle unterstützten Algorithmen. ConcreteStrategy: Konkrete Implementierung eines Algorithmus. Context (Client): Verwaltet eine Referenz mit statischem Typ Strategy 22

Design Pattern: Strategy Anwendbarkeit Viele Klassen unterscheiden sich nur in bestimmten Verhaltensweisen Unterschiedliche Varianten eines bestimmten Algorithmus (z.b. Zeit- vs. Speicherverbrauch) Vermeidet komplexe Datenstrukturen, die für einen Algorithmus benötigt werden, offenlegen zu müssen. 23

Design Pattern: Strategy Konsequenzen (Vor-/Nachteile) Vermeidet Codeduplikation Switch Statements oder if-else-if Ketten werden vermieden das Verhalten kann zur Laufzeit geändert werden die Implementierung wird vor Clients versteckt Unterschiedliche Strategien brauchen uu. Unterschiedliche Parameter Erhöhte Anzahl von Objekten (für Verbesserung sh. Flyweight Pattern) 24