Zweck: sequentieller Zugriff auf Elemente eines Aggregats

Ähnliche Dokumente
185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Software-Entwurfsmuster

OOP. Tagesprogramm. Software-Entwurfsmuster. Factory-Method. Prototype

Factory Method (Virtual Constructor)

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

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

Algorithmen und Datenstrukturen

1 Abstrakte Klassen, finale Klassen und Interfaces

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

Das Ersetzbarkeitsprinzip

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

14 Abstrakte Klassen, finale Klassen, Interfaces

Informatik II Übung 06. Benjamin Hepp 5 April 2017

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

12 Abstrakte Klassen, finale Klassen und Interfaces

OOSE 8 Entwurfsmuster (Hörsaalübung)

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

II.4.5 Generische Datentypen - 1 -

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

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

::Zweck. Sicherstellung, dass nur eine Instanz einer bestimmten Klasse existiert

Faustregeln zu Zusicherungen

Paket umfaßt alle Dateien bzw. Klassen im selben Ordner. Kürzer durch Import-Deklaration (am Dateianfang)

Ersetzbarkeit und Verhalten

Das Ersetzbarkeitsprinzip

Konzepte der Programmiersprachen

Entwurfsmuster (Design Patterns)

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Arten von Klassen-Beziehungen

Programmieren in Java

Arten des universellen Polymorphismus

Theorie zu Übung 8 Implementierung in Java

Algorithmen und Datenstrukturen

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

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Einstieg in die Informatik mit Java

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Gebundene Typparameter

Ein Entwurfsmuster der GoF. vorgestellt von. Sigrid Weil 16. Januar 2008

Programmieren in Java

Objektorientierte und Funktionale Programmierung SS 2014

Client-Server-Beziehungen

Objektorientierte Konzepte

Kovariante Probleme Beispiel (1)

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Abschnitt 14: Schnittstellen: Interfaces

OOP Fragenausarbeitung

Einführung in die Systemprogrammierung

Einstieg in die Informatik mit Java

Einführung in die Programmierung mit C++

ALP II Dynamische Datenmengen

Repetitorium Informatik (Java)

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Beispiel für überladene Methode

ADT: Verkettete Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Kapitel 4: Klassen und Unterklassen

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Objektorientierte Programmierung. Kapitel 14: Interfaces

Arten von Klassen-Beziehungen

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

Programmiermethodik 3. Klausur Lösung

Entwurfsprinzip. Entwurfsprinzip

Programmieren in Java

4. Vererbung Die Klasse Object. Die Klasse Object

Die Klasse Vertiefung

3. Entwurfsmuster zur Entkopplung von Modulen

Tag 8 Repetitorium Informatik (Java)

Implementieren von Klassen

Programmieren 2 Java Überblick

Typumwandlungen bei Referenztypen

Programmieren 1 09 Vererbung und Polymorphie

Info B VL 11: Innere Klassen/Collections

Einstieg in die Informatik mit Java

Info B VL 14: Java Collections/Reflections

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Kapitel 8. Generische Klassen

Inner Class. 1 public class OuterClass { 2 private int var; 3 public class InnerClass { 4 void methoda() {}; 5 } 6 public void methodb() {}; 7 }

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Einstieg in die Informatik mit Java

Einführung in die Programmierung

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Objektorientierte Programmierung Studiengang Medieninformatik

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

Objektorientierte Programmierung

Java für Bauingenieure

Einstieg in die Informatik mit Java

Programmieren I. Kapitel 8. Vererbung

Transkript:

Iterator (Cursor) Zweck: sequentieller Zugriff auf Elemente eines Aggregats Anwendungsgebiete: Zugriff auf Aggregatinhalt innere Darstellung bleibt gekapselt mehrere Abarbeitungen des Aggregatinhalts einheitliche Schnittstelle für Abarbeitung verschiedener Aggregatstrukturen (polymorphe Iterationen) Objektorientierte Programmierung, Software-Entwurfsmuster 1

Iterator: Struktur Aggregate Iterator iterator() next() hasnext() ConcreteAggregate ConcreteIterator iterator() next() hasnext() Objektorientierte Programmierung, Software-Entwurfsmuster 2

Iterator: Eigenschaften unterstützen unterschiedliche Arten der Abarbeitung von Aggregaten (mehrere Iteratorklassen pro Aggregatklasse) vereinfachen Schnittstelle von Aggregate mehrere gleichzeitige Abarbeitungen möglich Objektorientierte Programmierung, Software-Entwurfsmuster 3

Iterator: Implementierungshinweise externe Iteratoren flexibler, aber weniger einfach extern: Anwender holt nächstes Element (siehe Beispiele) intern: Iterator wendet Operation auf alle Elemente an interne Iteratoren besser wenn Beziehungen zwischen Elementen bei Abarbeitung zu berücksichtigen sind Algorithmus zum Durchwandern des Aggregats in Aggregat oder Iterator definiert (innere Klassen für beides) Aggregatänderungen während der Abarbeitung berücksichtigen (robuster Iterator) auch auf leeren Aggregaten brauchbar Objektorientierte Programmierung, Software-Entwurfsmuster 4

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 5

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 6

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

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 8

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 9

Prototype Zweck: Prototyp-Objekt spezifiziert Art eines neuen Objekts Objekterzeugung durch Kopieren des Prototyps Anwendungsgebiete: Klasse des neuen Objekts erst zur Laufzeit bekannt Creator-Hierarchie parallel zu Product-Hierarchie (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 10

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

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 12

Prototype: Implementierungshinweise clone in Java für flache Kopien in Object vordefiniert (verwendbar 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 13

Singleton Zweck: Klasse hat nur eine Instanz und erlaubt globalen Zugriff Anwendungsgebiete: es soll genau eine global zugreifbare Instanz geben Klasse soll erweiterbar sein und Ersetzbarkeit garantieren Struktur: Klasse Singleton mit statischer Methode instance (gibt einzige Instanz zurück) Objektorientierte Programmierung, Software-Entwurfsmuster 14

Singleton: Eigenschaften erlaubt kontrollierten Zugriff auf einzige Instanz vermeidet unnötige Namen im System (keine globale Variable) unterstützt Vererbung leicht änderbar, wenn mehrere Instanzen benötigt Klasse hat dennoch Kontrolle über Anzahl der Instanzen flexibler als statische Methoden Objektorientierte Programmierung, Software-Entwurfsmuster 15

Singleton: Beispiel (1) einfache Lösung: class Singleton { private static Singleton singleton = null; protected Singleton() { public static Singleton instance() { if (singleton == null) singleton = new Singleton(); return singleton; Lösung für mehrere alternative Implementierungen ungeeignet Objektorientierte Programmierung, Software-Entwurfsmuster 16

Singleton: Beispiel (2) class Singleton { private static Singleton singleton = null; public static int kind = 0; protected Singleton() {... public static Singleton instance() { if (singleton == null) switch (kind) { case 1: singleton = new SingletonA(); break case 2: singleton = new SingletonB(); break default: singleton = new Singleton(); return singleton; class SingletonA extends Singleton { SingletonA() {... class SingletonB extends Singleton { SingletonB() {... Objektorientierte Programmierung, Software-Entwurfsmuster 17

Singleton: Beispiel (3) class Singleton { protected static Singleton singleton = null; protected Singleton() {... public static Singleton instance() { if (singleton == null) singleton = new Singleton(); return singleton; class SingletonA extends Singleton { protected SingletonA() {... public static Singleton instance() { if (singleton == null) singleton = new SingletonA(); return singleton; Objektorientierte Programmierung, Software-Entwurfsmuster 18