Factory Method (Virtual Constructor)



Ähnliche Dokumente
OOP. Tagesprogramm. Software-Entwurfsmuster. Factory-Method. Prototype

Software-Entwurfsmuster

Zweck: sequentieller Zugriff auf Elemente eines Aggregats. mehrere Abarbeitungen des Aggregatinhalts

Zweck: sequentieller Zugriff auf Elemente eines Aggregats

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Ausnahmebehandlung in Java

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype

Client-Server-Beziehungen

Gebundene Typparameter

Objektorientierte Programmierung. Kapitel 12: Interfaces

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Typumwandlungen bei Referenztypen

Prinzipien Objektorientierter Programmierung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Vererbung & Schnittstellen in C#

Objektorientierte Programmierung

Einführung in die Programmierung

Der lokale und verteilte Fall

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Innere Klassen in Java

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Programmieren in Java

Einführung in die Java- Programmierung

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Kapitel 6. Vererbung

Objektorientierte Programmierung

Klassenbeziehungen & Vererbung

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Themen. Web Service - Clients. Kommunikation zw. Web Services

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

ObjectBridge Java Edition

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Objektorientierte Programmierung OOP

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

5. Abstrakte Klassen

Übungen zu Softwaretechnik

Objektorientierung: Klassen und Objekte

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Java: Vererbung. Teil 3: super()

Abschnitt 9: Schnittstellen: Interfaces

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Client-Server Beziehungen

Grundkonstrukte der Objektorientierung in Java, C# und C++

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Algorithmen und Datenstrukturen

Objektorientiertes JavaScript

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

4. AuD Tafelübung T-C3

Große Übung Praktische Informatik 1

3 Objektorientierte Konzepte in Java

Vorkurs C++ Programmierung

Vermittler (Mediator) Sabine Müller - Sven Richter - Jens Wagenbreth 03IN2-P-D

Applet Firewall und Freigabe der Objekte

OO Softwareentwicklung

Nathan Burgener. Design by Contract. Modul SWE

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

Folge 18 - Vererbung

Kapitel 4. Mehrfachvererbung. Beispiel 1: typische Diamant Struktur. Person. Hiwi

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Professionelle Seminare im Bereich MS-Office

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

WPF Steuerelemente Listbox, ComboBox, ListView,

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

3. Konzepte der objektorientierten Programmierung

Objektorientiertes Software-Engineering

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Guideline. Facebook Posting. mit advertzoom Version 2.3

Java Einführung Abstrakte Klassen und Interfaces

OSEK-OS. Oliver Botschkowski. PG AutoLab Seminarwochenende Oktober AutoLab

Abschnitt 12: Strukturierung von Java-Programmen: Packages

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Javakurs zu Informatik I. Henning Heitkötter

7 Rechnen mit Polynomen

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Testen mit JUnit. Motivation

Java RMI Remote Method Invocation

Design Patterns 2. Model-View-Controller in der Praxis

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Einführung in die Java- Programmierung

Java Kurs für Anfänger Einheit 5 Methoden

Software Engineering Klassendiagramme Einführung

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Eine eigene Seite auf Facebook-Fanseiten einbinden und mit einem Tab verbinden.

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Scala kann auch faul sein

C# im Vergleich zu Java

Transkript:

Factory Method (Virtual Constructor) Zweck: Definition einer Schnittstelle für Objekterzeugung Anwendungsgebiete: Klasse neuer Objekte bei Objekterzeugung unbekannt Unterklassen sollen Klasse neuer Objekte bestimmen Klassen delegieren Verantwortlichkeiten an Unterklassen (Wissen um Unterklasse soll lokal bleiben) Objektorientierte Programmierung, Software-Entwurfsmuster 1

Factory Method: Beispiel 1 abstract class Document {... class Text extends Document {...... // classes Picture, Video,... abstract class DocCreator { abstract Document create(); class TextCreator extends DocCreator { Document create() { return new Text();... // classes PictureCreator, VideoCreator,... class NewDocManager { private DocCreator c =...; public void set (DocCreator c) { this.c = c; public Document newdoc() { return c.create(); Objektorientierte Programmierung, Software-Entwurfsmuster 2

Factory Method: Struktur Creator Product factorymethod() anoperation() ConcreteProduct ConcreteCreator factorymethod() Objektorientierte Programmierung, Software-Entwurfsmuster 3

Factory Method: Eigenschaften Anknüpfungspunkte (hooks) für Unterklassen flexibel Entwicklung von Unterklassen vereinfacht verknüpfen parallele Klassenhierarchien (Creator-Hierachie mit Product-Hierarchie) Beispiel: generierefutter vom Typ Futter in Tier (abstr.) erzeugt in Rind neue Instanz von Gras und in Tiger neue Instanz von Fleisch oft große Anzahl an Unterklassen nötig Objektorientierte Programmierung, Software-Entwurfsmuster 4

Factory Method: Beispiel 2 Anwendung einer Factory Method für lazy initialization abstract class Creator { private Product product = null; protected abstract Product createproduct(); public Product getproduct() { if (product == null) product = createproduct(); return product; ConcreteProduct kann in Java nicht als Typparameter angegeben werden (da nach new kein Typparameter erlaubt) Objektorientierte Programmierung, Software-Entwurfsmuster 5

Prototype Zweck: Prototyp-Objekt spezifiziert Art eines neuen Objekts Objekterzeugung durch Kopieren des Prototyps Anwendungsgebiete: Klasse des neuen Objekts erst zur Laufzeit bekannt Creator-Klassenhierarchie parallel zu Product-Klassenhierarchie (also Factory Method) soll vermieden werden jede Instanz hat einen von wenigen Zuständen Kopieren des Prototyps im gewünschten Zustand einfacher als Konstruktoraufruf Objektorientierte Programmierung, Software-Entwurfsmuster 6

Prototype: Struktur Client prototype Prototype operation() clone() ConcretePrototype1 clone() ConcretePrototype2 clone() Objektorientierte Programmierung, Software-Entwurfsmuster 7

Prototype: Eigenschaften verstecken Product-Klassen vor Anwendern geänderte Product-Klassen beeinflussen Anwender nicht Prototypmenge dynamisch änderbar (Klassenstrukt. nicht) Prototypen dynamisch änderbar (Klassen nicht) in hochdynamischen Systemen: Verhalten durch Objektkomposition statt Klassendefinition festlegbar vermeiden große Anzahl an Unterklassen erlauben dynamische Konfiguration von Programmen auch in Sprachen wie C++ Objektorientierte Programmierung, Software-Entwurfsmuster 8

Prototype: Implementierungshinweise clone in Java für flache Kopien in Object vordefiniert (wenn Cloneable implementiert) Erzeugen tiefer Kopien schwierig zyklische Strukturen Prototyp-Manager zur Verwaltung der Prototypen clone hat keine (geeigneten) Parameter daher oft Initialisierungsmethoden nötig von dynamischen Sprachen direkt unterstützt Objektorientierte Programmierung, Software-Entwurfsmuster 9

Decorator (Wrapper) Zweck: gibt Objekten dynamisch neue Verantwortlichkeiten Alternative zur Vererbung Anwendungsgebiete: dynamisches Hinzufügen von Verantwortlichkeiten ohne Beeinflussung anderer Objekte Verantwortlichkeiten, die wieder entzogen werden können wenn Erweiterung durch Vererbung unpraktisch (Vermeidung vieler Unterklassen; Vererbung unmöglich) Objektorientierte Programmierung, Software-Entwurfsmuster 10

Decorator: Beispiel interface Window { void show (String text); class WindowImpl implements Window { public void show (String text) {... abstract class WinDecorator implements Window { protected Window win; public void show (String text) { win.show(text); class ScrollBar extends WinDecorator { public ScrollBar (Window w) { win = w;... Window mywindow = new WindowImpl; // no scroll bar mywindow = new ScrollBar(myWindow); // add scroll bar Objektorientierte Programmierung, Software-Entwurfsmuster 11

Decorator: Struktur Component operation() ConcreteComponent Decorator component operation() operation() ConcreteDecoratorA operation() addedstate ConcreteDecoratorB operation() addedbehavior() Objektorientierte Programmierung, Software-Entwurfsmuster 12

Decorator: Eigenschaften mehr Flexibilität als statische Vererbung Verantwortlichkeiten dynamisch dazu oder weg vermeidet Klassen, die weit oben in der Klassenhierarchie mit Eigenschaften überladen sind Instanzen von Decorator haben andere Identität als Instanzen von ConcreteComponent nicht auf Objektidentität verlassen oft viele kleine Objekte einfach konfigurierbar, aber schwer wartbar Objektorientierte Programmierung, Software-Entwurfsmuster 13

Decorator: Implementierungshinweise abstrakte Klasse Decorator nicht nötig, aber sinnvoll Component so klein wie möglich halten gut geeignet zur Erweiterung der Oberfläche schlecht geeignet für inhaltliche Erweiterungen auch schlecht geeignet für umfangreiche Objekte Objektorientierte Programmierung, Software-Entwurfsmuster 14

Proxy (Surrogate) Zweck: Platzhalter für Objekt, kontrolliert Zugriffe zahlreiche Anwendungsgebiete: Remote Proxy kontaktiert Objekt in anderem Namensraum Virtual Proxy erzeugt Objekt bei Bedarf Protection Proxy kontrolliert Objektzugriffe Smart Reference ersetzt einfache Zeiger, z. B. für Mitzählen von Referenzen (reference counting) Laden persistenter Objekte beim ersten Zugriff Verhindern mehrerer gleichzeitiger Zugriffe Objektorientierte Programmierung, Software-Entwurfsmuster 15

Proxy: Beispiel interface Something { void dosomething(); class ExpensiveSomething implements Something { public void dosomething() {... class VirtualSomething implements Something { private ExpensiveSomething real = null; public void dosomething() { if (real == null) real = new ExpensiveSomething(); real.dosomething(); Objektorientierte Programmierung, Software-Entwurfsmuster 16

Proxy: Struktur Subject request() RealSubject realsubject Proxy request() request() Objektorientierte Programmierung, Software-Entwurfsmuster 17

Proxy: Implementierungshinweise Proxy verwaltet Referenz auf RealSubject ersetzt eigentliches Objekt (Ersetzbarkeit) kontrolliert Zugriffe auf eigentliches Objekt weitere Verantwortlichkeiten von Art abhängig mehrere Proxies können verkettet sein manchmal kennt Proxy nur Subject Darstellung nicht existierender Objekte selbe Struktur wie Decorator möglich, aber anderer Zweck Objektorientierte Programmierung, Software-Entwurfsmuster 18