Template Pattern Richard Göbel.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Klassen - Verkettete Liste -
Konzepte objektorientierter Systeme
Einführung in die Programmierung Zusammenfassung
Threads Richard Göbel.
Spielbäume Richard Göbel.
Binäre Bäume Richard Göbel.
Java: Reversi Spielbrett
Sortieren mit Binären Bäumen
Suchbäume Richard Göbel.
Java: Objektorientierte Programmierung
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
Sortierverfahren Richard Göbel.
FH-Hof Künstliche Intelligenz - Suchbäume Richard Göbel.
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Indirekte Adressierung
Motivation Richard Göbel.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
Strategy Pattern Richard Göbel.
FH-Hof Optimierungsverfahren für kombinatorische Probleme Richard Göbel.
Java: Referenzen und Zeichenketten
Baumstrukturen Richard Göbel.
FH-Hof Java Packages Richard Göbel. FH-Hof Das Modulkonzept für Java Packages dienen zur Strukturierung größerer Java- Programme Ein Package kann: eigene.
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Abstrakte Klassen.
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Einführung in die OOP in Java
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Abstrakter Datentyp in C++ I - Klasse -
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
Entwurfsmuster – Iterator
Software Design Patterns Creational Patterns Structural Patterns Behavioral Patterns –Behavioral Class Patterns Interpreter Template Method Pattern –Behavioral.
Command Pattern Karola Schäuble,
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Gaußscher Algorithmus
DVG Klassen und Objekte
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Struktogramme IF-ELSE FOR – Schleife
Rekursion Richard Göbel.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
FH-Hof Java2D - Grundlagen Richard Göbel. FH-Hof Java2D - Funktionen Java2D unterstützt: das Zeichnen von Grafiken die Darstellung von Texten die Darstellung.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
FH-Hof Adapter & Facade Pattern Richard Göbel. FH-Hof Motivation Gegeben ist eine Klasse mit vorhandenen Methoden Gefordert ist eine Klasse, die ein bestimmtes.
FH-Hof Singleton Pattern Richard Göbel. FH-Hof Motivation Bestimmte Klassen sollen nur ein Objekt haben Nur ein Fabrikobjekt für eine Fabrikklasse Zentraler.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Grundkonzepte Java - Klassendefinition
Klassendefinitionen in Java
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
2.4 Rekursion Klassifikation und Beispiele
EPROG Tutorium #5 Philipp Effenberger
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Einführung in die Programmierung mit Java
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Venusspiegel und Marsschild
Der Abschluss einer Schlange
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Template Pattern Richard Göbel

Motivation Gegeben ist ein allgemeiner Algorithmus Anwendungen des Algorithmus unterscheiden sich an einigen Stellen in verschiedenen Details An diesen Stellen sollen unterschiedliche Methoden aufgerufen werden

Abstrakte Oberklasse mit Ansatz Abstrakte Oberklasse mit abstrakten Methodendeklarationen für die variablen Teile des Algorithmus einer vollständigen Definition mit dem Algorithmus Der Algorithmus ruft die abstrakten Methoden der Oberklasse auf In der Unterklasse werden die abstrakten Methodendeklarationen implementiert.

Abstrakter Ansatz … op1() op2() AbstractClass op1() op2() … algorithmTemplate() … op1() op2() ConcreteClass op1() op2() …

Beispiel: Lösung kombinatorischer Probleme Gegeben Ein Startzustand Operationen erzeugen Folgezustände Finde eine Sequenz von Operationen die einen Zielzustand erreichen Best First Search Schätze den Abstand von Zuständen zu dem Ziel Wähle den Knoten mit dem geringsten Abstand zum Ziel und erzeuge alle Folgezustände Überprüfe ob bereits ein Zielzustand erreicht wurde

Schiebepuzzle 1 2 3 4 5 6 7 8

Bewerte den Abstand zum Ziel Zähle die falsch plazierten Steine 1 2 3 4 5 6 7 8 Falsch plazierte Steine: 3

Suchbaum mit Bewertung 3 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 4 2 4 4 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 3 3

Algorithmus public abstract class BestFirstSearch { private ArrayList<Node> processedNodes; private ArrayList<Node> unprocessedNodes; private ArrayList<Node> goalNodes; public BestFirstSearch(Node startNode, ArrayList<Node> goalNodes) { unprocessedNodes = new ArrayList<Node>(); processedNodes = new ArrayList<Node>(); unprocessedNodes.add(startNode); this.goalNodes = goalNodes; } …

Algorithmus public abstract class BestFirstSearch { … abstract Node bestNode(); public Node search() { while (true) { Node best = bestNode(); if (goalNodes.contains(best)) return best; unprocessedNodes.remove(best); processedNodes.add(best); unprocessedNodes.addAll(best.getChildNodes()); }

Interface Node interface Node { double getEstDist (); ArrayList<Node> getChildNodes(); Node getParentNode(); }

Unterklasse für Best First Search public class BFSGetBest extends BestFirstSearch { public Node bestNode() { Node best = unprocessedNodes.get(0); for(int i=1; i<unprocessedNodes.size(); i++) { if (best. getEstDist() < unprocessedNodes.get(i).getEstDist()) best = unprocessedNodes.get(i); } return best;

Abgeleitete Duplikate finden In einigen Aufgabenstellung können die Nachfolgerknoten einen Vorgänger enthalten Ermögliche in diesen Fällen das Aussortieren bereits vorhandener Knoten

Abstrakte Oberklasse - Duplikate public Node search() { while (true) { Node best = bestNode(); if (goalNodes.contains(best)) return best; unprocessedNodes.remove(best); processedNodes.add(best); ArrayList <Node> nodes = best.getChildNodes(); nodes remDups(nodes); unprocessedNodes.addAll(nodes); } public ArrayList <Node> remDups(ArrayList<Node> nodes) { return nodes;

Unterklasse - Duplikate public ArrayList<Node> remDups(ArrayList<Node> nodes) { ArrayList<Node> result = new ArrayList<Node>(); for (Node n : nodes) { if ( ! processedNodes.contains(n) && ! unprocessedNodes.contains(n)) result.add(n); } return nodes;

Diskussion Eigene Methoden in einen Algorithmus einbringen Für abstrakte Methoden müssen eigene Methoden definiert werden Vorhandene Methoden ("Hook") können durch eigene Methode ersetzt werden Welches Pattern wurde hier noch verwendet? Vervollständigen Sie das Suchverfahren An welchen Stellen verwenden Sie Templates für die Java Library?