Java für Fortgeschrittene Proseminar im Sommersemester 2009 Design Patterns: Schöner Programmieren mit Design Tips

Größe: px
Ab Seite anzeigen:

Download "Java für Fortgeschrittene Proseminar im Sommersemester 2009 Design Patterns: Schöner Programmieren mit Design Tips"

Transkript

1 Java für Fortgeschrittene Proseminar im Sommersemester 2009 Design Patterns: Schöner Programmieren mit Design Tips Richard Kaufhold Technische Universität München Zusammenfassung Diese Ausarbeitung vermittelt einige grundlegende Entwurfsmuster, die sich in der objektorientierten Programmierung bewährt haben. Es werden Basiskonzepte der Design Patterns an anschaulichen Beispielen erklärt. 1

2 Inhaltsverzeichnis 1 Einleitung 3 2 Design Patterns Creational Patterns Abstract Factory Singleton Structural Patterns Decorator Facade Behavioral Patterns Observer Demoprojekt 15 4 Schluss 16 2

3 1 Einleitung In unserer globalisierten Welt, in der sich Softwareentwickler behaupten müssen, ist der Leistungsdruck immer mehr angestiegen. Die time to market für die Softwareanwendungen ist in den vergangenen Jahren immer geringer geworden. Außerdem erwarten die Kunden von den Anwendungen, die sie einsetzen, immer mehr und eine immer ausgeklügeltere Funktionalität. Deshalb können es sich Anwendungsentwickler heute nicht mehr leisten das Rad bei jeder Anwendung neu zu entwickeln. Aus diesen Gründen haben sich Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides vor mehr als 14 Jahren zusammengetan, um wiederkehrende Muster in der objektorientierten Softwareentwicklung zu sammeln und ihnen einen Namen zu geben. Das aus dieser Sammlung entstandene Werk, das oft auch als das Buch der GoF (Gang of Four) bezeichnet wird, ist zu dem Standardwerk der Design Patterns geworden. Heutzutage sind Design Patterns aus der Softwareentwicklung nicht mehr wegzudenken. Sie stellen einen einheitlichen Wortschatz bereit, den jeder Entwickler für objektorientierte Software beherrschen sollte. In der Entwicklung neuer Software sollten sich Softwarearchitekten schon frühzeitig über eine klare Struktur des zu entwerfenden Programms im klaren sein. Vorteilhaft ist es dabei, wenn sie erkannte Muster in einer sehr frühen Projektphase beim Namen nennen. Es erleichtert anderen Programmierern, die in späteren Projektphasen dazu kommen, die Software zu verstehen. Java erfüllt durch seine strikte objektorientierte Architektur die besten Voraussetzungen Design Patterns gewinnbringend einzusetzten. Deshalb werde ich in meiner Ausarbeitung einige dieser Konzepte, anhand von Java Beispielen, vorstellen. 2 Design Patterns Im Folgenden werde ich einen Katalog von verschiedenen Design Patterns und deren Verwendung vorstellen. Diese Sammlung ist bei weitem nicht vollständig, da es den Rahmen dieser Ausarbeitung sprengen würde. Deshalb möchte ich das Buch Design Patterns Elements of Reusable Object-Oriented Software ([1]) für ein tiefergehendes Studium des Themas empfehlen. In diesem Buch werden die in Abbildung 1 dargestellten Patterns vorgestellt. Diese 23 Patterns bilden eine solide Grundlage, wenn man als Software Architekt Design Patterns sinnvoll einsetzten will. Wie der Abbildung zu entnehmen ist, lassen sich die Design Patterns in drei Kategorien unterteilen: Creational Patterns, Structural Patterns und Behavioral Patterns, die alle einem bestimmten Bereich des Objekt Lebenszykluses gewidmet sind. Zum Beginn jedes Kapitels werde ich genauer erklären, was es mit dem jeweiligen Bereich auf sich hat. 3

4 Purpose Creational Structural Behavioral Scope Class Factory Method Adapter(class) Interpreter Template Method Abstract Factory Builder Prototype Singleton Adapter(object) Bridge Composite Decorator Facade Flyweight Proxy Abbildung 1: Design Pattern Übersicht Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor 2.1 Creational Patterns Am Anfang des Objekt Lebenszyklus benötigt ein Objek Platz im Hauptspeicher und seine interne Datenstruktur muss initialisiert werden. Mit diesem Schritt befassen sich die Creational Patterns. Sie spezifizieren wie der Erstellungsprozess neuer Objekte gestaltet werden kann. Das bedeutet sie machen die resultierende Software unabhängig von der Art wie die einzelnen Instanzen erzeugt, zusammengesetzt und repräsentiert werden. Durch diese Abstraktion erzeugt man ein größeres Maß an Unabhängigkeit zwischen den Objekten, aus denen eine Anwendung zusammengesetzt ist. So müssen, beim Austausch einer einzelnen Klasse, nicht mehr alle mit ihr in Verbindung stehenden Klassen geändert werden, sondern nur noch die zentrale, erzeugende Instanz Abstract Factory Das wohl am häufigsten dafür verwendete Pattern ist die Abstract Factory. Sie erzeugt eine Gruppe zusammengehöriger Objekte ohne ihre konkrete Implementierung festzulegen. In Abbildung 2 ist die Struktur eines Factory Patterns dargestellt. Der Client hat hierbei nur Zugriff auf die Abstract Factory und die abstrakten Produkte. Er kommuniziert ausschließlich über die Interfaces dieser Klassen. Die Klasse Abstract Factory legt für jedes abstrakte Produkt die Signatur der Methode zum Erzeugen einer neuen Instanz fest. Es liegt nun bei der konkreten Factory, ein passendes Objekt der mit ihr verbundenen Produktlinie zu erzeugen. Auf diese Weise ist es zum Beispiel möglich Software an verschiedene Basissysteme anzupassen. Um die Arbeitsweise des Factory Patterns besser zu verstehen, möchte ich das folgende Beispiel betrachten. Es handelt sich um ein einfaches Konsolenspiel, bei dem es das Ziel ist das Ende eines Labyrinths zu erreichen. Die Objekte, mit denen wir es dabei zu tun haben, sind Game, Maze, Room, Wall, Door und 4

5 Abbildung 2: Factory Pattern 5

6 Abbildung 3: Maze Game Player. Diagramm 3 stellt die Zusammenhänge der Komponenten da. Das Spiel ist dafür verantwortlich am Spiel teilnehmende Benutzer anzulegen und sie in den Räumen des Labyrinths zu verteilen. Die Klasse Maze erzeugt ein Labyrinth und legt den Zielraum fest. Sobald ein Nutzer den Zielraum erreicht hat, wird er als Sieger aus dem Spiel entfernt und die anderen Spielteilnehmer können noch weiter versuchen das Ziel zu erreichen. Um den Schwierigkeitsgrad etwas zu erhöhen, bekommt der Spieler jedes Mal, wenn er gegen eine Wand oder eine geschlossene Türe läuft, einen Schlag. Wurde er zu oft getroffen, ist das Spiel für ihn zu Ende und er hat verloren. Die Spieler kommen immer der Reihe nach dran und können maximal eine Aktion ausführen, wie zum Beispiel das Öffnen oder Schließen einer Tür oder das Hindurchgehen. In einer einfachen Implementierung wird die Maze Klasse des Labyrinths mit dem new Operator anlegt. 1 r1=new Room( ) ; 2 r2=new Room( ) ; d1=new Door ( ) ; 5 d2=new Door ( ) ; Auf diese Art erhalten wir ein einfaches Labyrinth. Das Problem dabei ist aber, 6

7 Abbildung 4: Abstract Game Factory dass das Labyrinth nur durch das neu compilieren des Source Codes geändert werden kann. Wir können so zum Beispiel nachträglich keine anderen Türen einbauen, die unterschiedliche Aktionen unterstützen. Besser wäre es doch dieses Anlegen der Objekte aus dem Source Code der Maze Class auszulagern, so dass wir die Möglichkeit erhalten die erstellten Komponenten später zu tauschen. Dazu definieren wir uns eine abstrakte Klasse. Diese spezifiziert die Methoden, die nötig sind, um alle Game Componenten zu erstellen. Abbildung 4 stellt diese abstrakte Klasse dar. Die Default Game Factory erzeugt die Basis Konfiguration mit den Standardklassen. Die Action Mod Factory tauscht die Game und die Door Komponente aus. Dabei wird die Game Klasse um einen Befehl zum Schlagen anderer Spieler erweitert und die Türen werden in einer zufälligen Position, d.h. geöffnet bzw. geschlossen, initialisiert. Um den Übergang zum Factory Pattern abzuschließen, müssen wir jetzt alle new Befehle durch Aufrufe der passenden Factory Methode ersetzten. 1 AbstractFactory f a c t o r y ; 2 r1=f a c t o r y. createroom ( ) ; 3 r2=f a c t o r y. createroom ( ) ; d1=f a c t o r y. createdoor ( ) ; 6 d2=f a c t o r y. createdoor ( ) ; Damit ein Game Objekt erstellt werden kann, muss die verwendete Factory 7

8 festgelegt werden. Wie das genau umgesetzt wird, werde ich im nächsten Kapitel zeigen Singleton Bei der Erklärung des Factory Patterns bin ich nicht darauf eingegangen, wie es den einzelnen Spielkomponenten ermöglicht wird, auf die Factory zuzugreifen. Dafür gibt es verschiedene Ansatzweisen. Eine davon ist es, sie den Komponenten als Parameter zu ihrem Konstruktor zu übergeben. Diese Vorgehensweise hat aber mehrere Schwächen. Wenn wir die Klassen auf diese Art aufbauen, müssen wir in jeder Komponente die Factory speichern obwohl wir sie im Normalfall nach der Initialisierung nicht mehr benötigen. Wir könnten die Factory auch als Attribut der Initialisierungsmethode übergeben. Dadurch verlieren wir aber wieder Dynamik, da dann die Maze nach Abschluss der Initialisierung keine weiteren Komponenten mehr erzeugen kann. Sie ist also nicht im Stande sich dynamisch zu vergrößern. Ich möchte nun das passende Design Pattern vorstellen, das die vollständige Dynamik des Systems bewahrt und es gleichzeitig davon befreit in allen Klassen die Factory zu speichern. Das Singleton Pattern erfüllt genau diese benötigten Anforderungen. Die allgemeine Struktur des Singleton Patterns ist in Abbildung 5 dargestellt. Wenn wir dieses Pattern nun auf unsere Factory anwenden, müssen wir die Abstract Factory um ein statisches Attribut vom Typ AbstractGameFactory erweitern. Außerdem brauchen wir noch eine ebenfalls statische Zugriffsmethode die sicherstellt, dass das Singleton, wenn nötig, erstellt wird. Außerdem wollen wir uns es freistellen eine beliebige, von AbstractGameFactory abgeleitete Klasse als Singelton einzusetzen. Dafür definieren wir uns noch eine statische Methode loadfactory(string name):boolean, welche die Klasse mit dem full qualified Name als Singleton Instanz lädt. Diese Methode muss in jedem Fall ausgeführt werden. Nach dem Ladevorgang ist das Singleton gesperrt, damit es zu keinen Inkonsistenzen durch ein späteres Auswechseln des Singletons kommen kann. Dazu muss noch gesagt werden, dass ein Singleton immer nur in Verbindung mit dem verwendeten Classloader einzigartig ist. Verschiedene Classloader würden mit der von mir vorgeschlagenen Version unterschiedliche Instanzen des Singletons erzeugen. Abbildung zeigt die Implementierung des Singletons. 1 / /.. 2 p u b l i c a b s t r a c t c l a s s AbstractGameFactory { 3 s t a t i c AbstractGameFactory i n s t a n c e=n u l l ; 4 5 p u b l i c s t a t i c f i n a l S t r i n g d e f a u l t F a c t o r y=defaultgamefactory. c l a s s. getcanonicalname ( ) ; 6 7 p u b l i c s t a t i c AbstractGameFactory i n s t a n c e ( ) { 8 r eturn i n s t a n c e ; 9 } 10 8

9 Abbildung 5: Singleton Pattern 11 p u b l i c s t a t i c boolean loadfactory ( S t r i n g classname ) { 12 i f ( i n s t a n c e==n u l l ) { 13 try { 14 Class f a c t o r y C l a s s = Class. forname ( classname ) ; 15 i f ( f a c t o r y C l a s s!= n u l l ) { 16 i n s t a n c e= ( AbstractGameFactory ) f a c t o r y C l a s s. newinstance ( ) ; 17 return true ; 18 } 19 } catch ( Exception i e ) {} 20 } 21 r eturn f a l s e ; 22 } 23 / / } Wer das Singleton Pattern aus anderen Programmiersprachen kennt, könnte versucht sein es lazy zu erstellen. Die aus anderen Programmiersprachen bekannten Versionen des Singleton Patterns für eine faule Initialisierung sind aber auf Grund von JVM Features und Features in der Programmiersprache falsch. Sollten sie versucht sein Lazy Initialization einzusetzen, muss die statische Methode zum Holen der Instanz synchronisiert sein. Es gibt, meines Wissens nach, keine andere Möglichkeit. Genauere Informationen, warum es nicht ohne weiteres möglich ist lazy loading in Java im Singleton Pattern zu implementieren, kann in When is a Singleton not a Singleton? [2] nachgelesen werden. 9

10 Abbildung 6: Decorator Pattern 2.2 Structural Patterns Nachdem wir uns mit dem Erstellungsprozess befasst haben, können wir uns dem eigentlichen strukturellen Aufbau mehrerer Objekte widmen. Die Structural Patterns befassen sich damit wie Klassen und Objekte zusammengesetzt sind, um größere Funktionsblöcke zu formen. Ein einfaches Beispiel hierfür ist die Vererbung in objektorientierten Sprachen. Die Vererbung ist jedoch nur ein sehr statisches Konstrukt, dass zu monolithischen Systemen führt, die nur schwer an neue Anforderungen angepasst werden können Decorator Das Prinzip, Objekte ineinander zu verschachteln, kann auch dazu verwendet werden den Objekten erweiterte Funktionalitäten hinzuzufügen. Es wird oft eingesetzt, wenn ein Objekt modelliert wird, das aus einigen Bestandteilen zusammen gesetzt ist. Die Zusammensetzung der Teile kann jedoch erst während der Ausführung des Programms bestimmt werden. Zum Beispiel ein belegtes Brötchen, besteht aus dem Bötchen und ein paar Sorten von Belag, die jedoch beliebig kombiniert werden können. Wenn man ein Programm schreibt, das den Preis berechnen soll, wird einem schnell klar, dass es sehr viele verschiedene belegte Brötchen geben kann. Man kann natürlich, die Bestandteile als Attribute betrachten und die Preisberechnung mit Hilfe der Abfragen bewerkstelligen. 10

11 1 p u b l i c c l a s s BelegteSemmel { 2 p r i v a t e boolean semmel ; 3 p r i v a t e boolean kaese ; 4 p r i v a t e boolean wurst ; 5 p r i v a t e boolean s a l a t ; 6 / / p u b l i c i n t b e r e c h n e P r e i s ( ) { 9 i n t p r e i s =0; 10 i f ( semmel ) p r e i s +=25; 11 i f ( kaese ) p r e i s +=50; 12 i f ( wurst ) p r e i s +=30; 13 i f ( s a l a t ) p r e i s +=15; 14 r eturn p r e i s ; 15 } p u b l i c void setsemmel ( boolean semmel ) { 18 t h i s. semmel=semmel ; 19 } p u b l i c boolean issemmel ( ) { 22 r eturn semmel ; 23 } 24 / /... 1 p u b l i c c l a s s NaiveDecoratorClient { 2 p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { 3 BelegteSemmel kaesesemmel = new BelegteSemmel ( ) ; 4 kaesesemmel. setsemmel ( true ) ; 5 kaesesemmel. setkaese ( true ) ; 6 kaesesemmel. s e t S a l a t ( f a l s e ) ; 7 kaesesemmel. setwurst ( f a l s e ) ; 8 System. out. p r i n t l n ( Die Kaesesemmel k o s t e t : + kaesesemmel. b e r e c h n e P r e i s ( ) ) ; 9 } 10 } Noch sieht es ziemlich einfach aus. Was ist aber, wenn es mehr Sorten des Belages geben würde oder verschiedene Brötchen. Das Programm würde so sehr schnell unübersichtlich und schwer wartbar werden. Und nicht nur die Klasse BelegteSemmel, sondern auch die des Clients, weil man all die Attribute richtig setzen müsste. Einige Fälle, wie das Bestellen der doppelten Menge an Käse, werden gar nicht abgedeckt. Eine andere Herangehensweise an das Problem bietet das Decorator Pattern. 11

12 Abbildung 7: Semmel Decorator Betrachten wir Abbildung 7. Es wird mit der Klasse Zutat eine Abstraktion der Objekte gemacht, welche auch die öffentliche Schnittstelle ist. Das Objekt die Semmel, als Grundzutat, wird in unserem Fall, als zu dekorierendes spezifiziert. Da Designer Patterns keine strikte Vorgaben sind, kann die Klasse Semmel auch abstrakt definiert werden und weitere Unterklassen besitzen, wenn man mehr als ein Brötchen modellieren muss. Die anderen Zutaten werden als Unterklassen des ZutatenDekorators aufgefasst, weil sie einer Semmel weitere Funktionalität hinzufügen. Welche in unserem Beispiel die Erweiterung der Preisberechnung auf beliebig viele Zutaten ist. Die Dekoratoren müssen dabei aber genauso Zutaten sein, damit es für den Client nur eine zentrale Schnittstelle gibt. Dieser muss dann die Zutaten nur richtig verschachteln. Mit dieser 12

13 Implementierung ist es möglich eine beliebige Auswahl und Mengen an Zutaten hinzuzufügen. Außerdem reicht es, wenn wir einer Produktlinie eine neue Zutat hinzufügen einen neuen Dekorator anzulegen. Wir ersparen uns damit das Ändern der Semmel Klasse Facade Das Facade Pattern ist sehr wichtig, wenn es darum geht, Funktionsmodule klar voneinander abzugrenzen. Durch die Abgrenzung gewinnt man Flexibilität in der Auswahl der verwendeten Module. Ein über eine Facade abgegrenztes Modul kann leicht durch ein anderes ersetzt werden, das ein gleich- oder höherwertiges Interface anbietet. Die Klasse, die das Facade Muster implementiert, ist dafür zuständig alle Objekte zu erstellen und zu verbinden, die sie für die von ihr bereit gestellten Funktionalitäten benötigt. Es gibt die innere Struktur, die hinter der Facade liegt, im Allgemeinen nicht nach außen hin preis. Abbildung 8: Facade Pattern In Abbildung 8 wird dargestellt wie sich die Einführung einer Facade in eine Anwendung auswirken kann. Die linke Abbildung zeigt das System ohne eine Facade. Zu erkennen ist, dass die Verbindung zwischen den Objekten sehr chaotisch stattfindet. Ein auf diese Weise strukturiertes System braucht im allgemeinen mehr Speicher und ist sehr monolithisch. Es ist nicht einfach möglich einzelne Klassen auszutauschen, da alle verbundenen Objekte auf Seiteneffekte hin überprüft werden müssen. Die rechte Hälfte der Abbildung 8 zeigt die, durch 13

14 Anwendung des Facade Patterns klar abgegrenzten Bereiche. Dadurch wird es erleichtert Objekte hinter der Facade auszuwechseln, ohne daß Objekte dadurch beeinflusst würden. Beispielsweise könnte man in einer graphischen Anwendung, die Netzwerkverbindungen nutzt, vier Systeme extrahieren, die nur über Facades kommunizieren. Die vier Bereiche sind: Netzwerkkommunikation, User Interface, Persistenzebene und das Datenmodel. Das Datenmodell würde dabei die zentrale Schaltstelle darstellen, auf die alle Systeme zugreifen. Diese Abgrenzung macht Sinn, da über das Userinterface meist keine direkte Kontrolle über die offenen Datenverbindungen des Netzwerkkontrollers benötigt werden, bzw. es keine Relevanz für das Datenmodell hat, ob die Daten über das Netzwerk eingespielt werden oder aus einer Datei auf der Festplatte stammen. 2.3 Behavioral Patterns Im Kontrast zu Structural Patterns liegt der Schwerpunkt von Behavioral Patterns auf der Kommunikation zwischen verschiedenen Objekten. Sie stellen wiederkehrende Muster im Kontrollfluss von Objekten dar. Durch ihre Verwendung wird es den Programmierern erleichtert, komplexe Zusammenhänge in einer Applikation zu verstehen. Die Behavioral Patterns lassen sich in Class- und Objektpatterns unterteilen. Class Patterns benützen Vererbung, um Teilaufgaben an abgeleitete Klassen zu delegieren. Die Objekt Patterns setzen auf die Komposition von Objekten und sind dadurch dynamischer. In meiner Ausarbeitung möchte ich mir das Object Behavioral Pattern Observer genauer ansehen Observer Das Observer Pattern ermöglicht eine One-to-Many Kommunikation zwischen Objekten zu etablieren. Diese Verbindung ist nicht statisch aufgebaut. Sie kann jederzeit während der Laufzeit angepasst werden. Die Objekte, die miteinander kooperieren möchten, müssen sich dabei über ein Thema (Subject) verständigen. Bei diesem Subject müssen sich alle beteiligten Objekte registrieren. Die Registrierung findet in Abbildung 9 über die Methoden attach bzw. detach statt. Die Klasse Subject hält eine Liste mit registrierten Observern vor. Nachdem auf dem Subject die notify Methode aufgerufen wurde, ruft es bei allen registrierten Observern die update Methode auf. Um das Pattern besser zu verstehen, möchte ich es an einem praktischen Beispiel erklären. Dazu betrachten wir den Entwurf eines intelligenten Kühlschranks. Der Kühlschrank führt dabei Protokoll über alle Entnahmen und Zugänge von Lebensmitteln und zeigt eine Liste der vorhandenen Lebensmittel auf einem Frontdisplay an. Ein Ansatz das System zu entwerfen, wäre das Display fest in den Kühlschrank zu verdrahten. Dieser Weg hat aber das Problem, dass ich ausschließlich Kühlschränke mit Displays verkaufen könnte. Wenn aber ein Kunde einen Kühlschrank möchte, der dazu in der Lage ist automatisch Inhalte nachzubestel- 14

15 Abbildung 9: Observer Pattern len, oder er von außerhalb seines Hauses aus den Inhalt seines Kühlschrankes überprüfen möchte, braucht er das Display nicht. Durch den höheren Preis des Kühlschranks würde er sich gegebenenfalls für ein billigeres Konkurrenzprodukt entscheiden. Das Ziel ist eine modularere Lösung, so dass möglichst viel der Software in allen Kühlschränken verwendet werden kann. Das Observer Pattern bietet gerade diese Flexibilität. Es ermöglicht uns, dass sich dynamisch viele Objekte für die Veränderungen der im Kühlschrank enthaltenen Waren registrieren können. Abbildung 10 stellt die mit Hilfe des Observer Pattens entwickelte Struktur da. Wie sie sehen besteht keine Komposition zwischen RefrigeratorDisplay und dem Refrigerator selbst. Ein Display wäre so theoretisch auch dazu in der Lage, den Inhalt von mehreren Kühlschränken anzuzeigen. 3 Demoprojekt Die Idee meines Demoprojekts war es, eine Applikation zum kooperativen Editieren von Dokumenten zu entwickeln. Dabei sollte je nach Mime Type der Datei ein passendes Plugin zum Anzeigen und Editieren des Dokumentes ausgewählt werden. Die Plugin Komponente implementiert gleichzeitig die Server Funktionalität, so dass jeder Client auch als Server für Dokumente in Erscheinung treten kann. Die Benutzer Authentifizierung erfolgt durch ein zertifikat gestütztes System, die Autorisierung durch den Server. Durch Verwendung von 15

16 Abbildung 10: Refrigerator unterschiedlichen Netzwerkkonnektoren wird dem Benutzer ermöglicht sich mit dem Server zu verbinden bzw. nach anderen Nutzern des Programms im selben Subnetz zu suchen. 4 Schluss Wie wir gesehen haben, können Design Patterns uns als Programmierer dabei helfen Standardprobleme auf eine schnelle und effiziente Art zu lösen. Diese Ausarbeitung stellt nur eine Einführung in die Thematik der Design Patterns in objektorientierter Programmierung dar. Die GoF hat in ihrem Buch, nur 23 der bekannten Design Patterns behandelt. Es wird wahrscheinlich nie eine vollständig abgeschlossene Liste der Design Patterns geben, da stetig neue Lösungen entwickelt werden. Um Design Patterns vollständig zu betrachten, sollte man sich nicht nur auf die guten Muster konzentrieren, sondern auch in der Lage sein schlechte Software und fehlerhafte Prozesse zu erkennen. Dazu hilft es die Anti-Patterns zu betrachten, die einen guten Überblick über sehr häufig gemachte Fehler in der 16

17 Softwareentwicklung. Wie man aus den Beispielen nachvollziehen kann, sind Design Patterns nicht nur theoretische Konstrukte, die in der Realität keine Verwendung finden, sondern eine wirkliche Unterstützung des Programmierers. Sie helfen ihm dabei sich auf die Problematik des Fachgebietes, für das er Software entwickelt, zu konzentrieren, anstatt seine Zeit mit Standardproblemen zu verlieren. Literatur [1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns Elements of Reusable Object-Oriented Software. Addison-Wesley, [2] Joshua Fox. When is a Singleton not a Singleton? JavaWorld, [3] Mark Grand. Patterns in Java: a catalog of reusable design patterns illustrated with UML. Wiley & Sons,

Entwurfsprinzip. Entwurfsprinzip

Entwurfsprinzip. Entwurfsprinzip Die Komposition (hat ein Beziehung) ist der Vererbung (ist ein Beziehung) vorzuziehen. Es können Familien von Algorithmen in eigenen Klassensätzen gekapselt werden. Das Verhalten lässt sich zu Laufzeit

Mehr

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

Ein Entwurfsmuster der GoF. vorgestellt von. Sigrid Weil 16. Januar 2008 Ein Entwurfsmuster der GoF vorgestellt von Sigrid Weil 16. Januar 2008 Einleitung 2 Entwurfsmuster (Design Patterns) beschreiben Probleme, die wiederholt in unterschiedlichsten Zusammenhängen aufreten

Mehr

Behavioral Patterns. Seminar Software-Entwurf WS 04/05. Przemyslaw Dul

Behavioral Patterns. Seminar Software-Entwurf WS 04/05. Przemyslaw Dul Behavioral Patterns Seminar Software-Entwurf WS 04/05 Przemyslaw Dul Gliederung Design Pattern (Wiederholung) Einordnung Übersicht über die Kategorien: Creational,Structural,Behavioral Übersicht über die

Mehr

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

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05. Creational Patterns Seminar Software-Entwurf WS 2004/05 Thomas Liro Inhaltsüberblick Einordnung des Themas Beschreibung von Design Pattern Auswahl von Design Patterns Was sind Creational

Mehr

Design Patterns. 5. Juni 2013

Design Patterns. 5. Juni 2013 Design Patterns 5. Juni 2013 Überblick Was sind Design Patterns? Welche Design Patterns gibt es? Wann sollte man Design Patterns einsetzen? Refactoring und Design Patterns: Welchen Zusammenhang gibt es

Mehr

Software-Architektur Design Patterns

Software-Architektur Design Patterns Design Patterns Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München SS 2015 Standardwerk Gang of Four: Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides: Design Patterns:

Mehr

Structural Patterns. B. Sc. Andreas Meißner

Structural Patterns. B. Sc. Andreas Meißner Structural Patterns B. Sc. Andreas Meißner Seminar Software-Entwurf Fachgebiet Software Engineering, Institut für Angewandte Systeme, Universität Hannover 11/16/2004 Gliederung 1. Wiederholung Entwurfsmuster

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Software Design Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer Software Design Wie schreibe ich gute Software?

Mehr

Universität Bremen. Entwurfsmuster. Thomas Röfer. Wettbewerb Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster

Universität Bremen. Entwurfsmuster. Thomas Röfer. Wettbewerb Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster Entwurfsmuster Thomas Röfer Wettbewerb Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster Mein Rückblick: RoboCup 2 Euer Rückblick: Textsuche Naive Suche abrakadabra Boyer-Moore abrakadabra

Mehr

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

Decorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer Decorator Pattern Analyse- und Design-Pattern CAS SWE FS14 Roland Müller Samuel Schärer Entwurfsmuster der «Gang of Four» Strukturmuster fassen Klassen und Objekte zu grösseren Strukturen zusammen Adapter

Mehr

Softwaretechnik. Überblick I. Prof. Dr. Rainer Koschke. Sommersemester 2009

Softwaretechnik. Überblick I. Prof. Dr. Rainer Koschke. Sommersemester 2009 Softwaretechnik Prof. Dr. Rainer Koschke Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Sommersemester 2009 Überblick I 1 Entwurfsmuster Entwurfsmuster: Entwurfsmuster

Mehr

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns Daniel Warneke warneke@upb.de 08.05.2006 Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns 1/23 Übersicht Einleitung / Motivation Design Patterns Beispiele Rolle des

Mehr

SE Besprechung. Übung 4 Architektur, Modulentwurf

SE Besprechung. Übung 4 Architektur, Modulentwurf SE Besprechung Übung 4 Architektur, Modulentwurf SE, 22.11.11 Mengia Zollinger 2.1 Architekturstile (6 Punkte) 2.1.A Ausgabe eines Monatsabos an Angestellte Lösung: Pipe-and-Filter Beispiel Lösung [Benz,

Mehr

3. Entwurfsmuster zur Entkopplung von Modulen

3. Entwurfsmuster zur Entkopplung von Modulen 3. Entwurfsmuster zur Entkopplung von Modulen OOP-3.1 Entwurfsmuster (Design Patterns): Software-Entwicklungsaufgaben, die in vielen Ausprägungen häufig auftreten. Objektorientierte Schemata, die als Lösungen

Mehr

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen Analyse und Modellierung von Informationssystemen Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2013 1 / 19 Einführung: Entwurfsmuster Erzeugungsmuster Fabrik-Muster Singleton-Muster Beispiel 2

Mehr

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen Analyse und Modellierung von Informationssystemen Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2013 1 / 19 Einführung: Entwurfsmuster Erzeugungsmuster Fabrik-Muster Singleton-Muster Beispiel 2

Mehr

Entwurfsmuster Martin Fesser 00IN

Entwurfsmuster Martin Fesser 00IN Entwurfsmuster Martin Fesser 00IN Inhalt Was sind Entwurfsmuster? Vorteile, Nachteile Entwurfsmusterkatalog (nach GoF) Variation von Entwurfsaspekten Wie Entwurfsmuster Entwurfsprobleme lösen Beispiele

Mehr

Entwurfsmuster - Iterator & Composite

Entwurfsmuster - Iterator & Composite Entwurfsmuster - Iterator & Composite Alexander Rausch Seminar Entwurfsmuster WS08/09 19. November 2008 Gliederung 1 Einführung 2 Das Iterator Entwurfsmuster 3 Das Composite Entwurfsmuster 4 Quellen 5

Mehr

Entwurfsmuster in Java

Entwurfsmuster in Java Entwurfsmuster in Java Das Observer- und das Decorator-Pattern Friederike Löwe 13. März 2011 Inhaltsverzeichnis Einleitung Wozu eigentlich Entwurfsmuster? Die Grundlage: Design-Prinzipien Das Decorator-Pattern

Mehr

Software-Entwurfsmuster

Software-Entwurfsmuster Software-Entwurfsmuster Prinzip von Entwurfsmustern und einige elementare Beispiele Malte Spiess malte@mathematik.uni-ulm.de Seminar Bildanalyse und Simulation mit Java im WS 2003/2004 Universität Ulm

Mehr

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

3. Entwurfsmuster zur Entkopplung von Modulen. Übersicht zu Entwurfsmustern 3. Entwurfsmuster zur Entkopplung von Modulen OOP-3.1 Vorlesung Objektorientierte Programmierung WS 2013/2014 / Folie 301 Entwurfsmuster (Design Patterns): Idee der Entwurfsmuster verstehen Software-Entwicklungsaufgaben,

Mehr

Lukas Klich. Projektgruppe SHUTTLE. Seminar: Entwurfsmuster Lukas Klich/Projektgruppe SHUTTLE Seite: 1. Entwurfsmuster

Lukas Klich. Projektgruppe SHUTTLE. Seminar: Entwurfsmuster Lukas Klich/Projektgruppe SHUTTLE Seite: 1. Entwurfsmuster Entwurfsmuster Lukas Klich Projektgruppe SHUTTLE Seminar: 28.11.2002 Entwurfsmuster Lukas Klich/Projektgruppe SHUTTLE Seite: 1 Motivation Die Menschheit löst Probleme, indem sie beobachtet, Beobachtungen

Mehr

Model-View-Controller

Model-View-Controller Software Design Pattern Model-View-Controller Michael Lühr Gliederung Einführung und Problemstellung Ansatz durch MVC Detaillierte Darstellung der Komponenten Model View Controller Vor- und Nachteile Zusammenfassung

Mehr

29.01.2013. Vorlesung Programmieren. Software Design. Software Design. Entwurfsmuster

29.01.2013. Vorlesung Programmieren. Software Design. Software Design. Entwurfsmuster Vorlesung Programmieren Software Design Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer Software Design Wie schreibe ich gute Software?

Mehr

Design Pattern. Motivation, Beispiel Definition "Das" Buch der Gang of Four Ausführliches Beispiel: Facade Beispiele. Aufgabe

Design Pattern. Motivation, Beispiel Definition Das Buch der Gang of Four Ausführliches Beispiel: Facade Beispiele. Aufgabe , Beispiel der Gang of Four Ausführliches Beispiel: Beispiele Wiederverwendung ist etwas Gutes...!!! Wiederverwendung (auch: Verständlichkeit, Änderbarkeit, Portierbarkeit etc.) wird auf Design-Ebene ermöglicht

Mehr

Modellarbeit I: Entwurfsgerechte Klassenmodellierung

Modellarbeit I: Entwurfsgerechte Klassenmodellierung Modellarbeit I: Entwurfsgerechte Klassenmodellierung Vom Analysemodell zum Entwurfsmodell Nach der Etablierung der Techologien: Überarbeitung des Fachlichen Modells zu einem geeigneten Entwurfsmodell Navigationen

Mehr

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

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

Übersicht. Softwarearchitektur. Softwarearchitektur, UML, Design Patterns und Unit Tests. Softwarearchitektur

Übersicht. Softwarearchitektur. Softwarearchitektur, UML, Design Patterns und Unit Tests. Softwarearchitektur Übersicht Object Oriented Organization Das System besteht aus Objekten, die mittels Methodenaufrufe (Nachrichten) miteinander kommunizieren. 2 / 34 4 / 34,, Design Patterns und Stefan Wehr Prof. Dr. Peter

Mehr

DESIGN'PATTERN'2011. November. Abstract Factory & Factory Method BEARBEITET VON INHALT [1] Christoph Süsens

DESIGN'PATTERN'2011. November. Abstract Factory & Factory Method BEARBEITET VON INHALT [1] Christoph Süsens November DESIGN'PATTERN'2011 INHALT Intent Motivation Applicability Structure Consequences Implementation Sample Code [1] BEARBEITET VON Christoph Süsens Abstract Factory & Factory Method Inhaltsverzeichnis

Mehr

Universität Bremen. Entwurfsmuster. Thomas Röfer. Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster

Universität Bremen. Entwurfsmuster. Thomas Röfer. Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster Entwurfsmuster Thomas Röfer Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster Rückblick UML Motivation Historie Spracheinheiten Strukturdiagramme Verhaltensdiagramme 2 Motivation Idee Einige

Mehr

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

Software Reuse Sommer 2004. Schritt 1: Rechtschreibung, Grammatik, Wortschatz, Semantik Schritt 2: Vertiefung Design Pattern Peter Sturm Universität Trier Analogie Erlernen einer Fremdsprache Schritt 1: Rechtschreibung, Grammatik, Wortschatz, Semantik Schritt 2: Vertiefung Bildung vernünftiger Sätze, Absätze,...

Mehr

Programmierkurs C++ Abstrakte Klassen und Methoden

Programmierkurs C++ Abstrakte Klassen und Methoden Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double

Mehr

Objektorientierte und Funktionale Programmierung SS 2014

Objektorientierte und Funktionale Programmierung SS 2014 Objektorientierte und Funktionale Programmierung SS 2014 6 Objektorientierte Entwurfsmuster 1 6 Objektorientierte Entwurfsmuster Lernziele Einige wichtige Entwurfsmuster kennen und verstehen Einsatzmöglichkeiten

Mehr

Handbuch für die Erweiterbarkeit

Handbuch für die Erweiterbarkeit Handbuch für die Erweiterbarkeit Inhalt Pakete für die Erweiterbarkeit... 2 Actions... 2 Items... 2 Itemset... 2 Die UseCaseNewAction... 3 Eigene Shapes... 4 Der Shape Container... 5 User Objects... 6

Mehr

Software Design basierend auf dem Plug-In Konzept

Software Design basierend auf dem Plug-In Konzept Software Design basierend auf dem Plug-In Konzept Michael Antes Seminar Simulation und Bildanalyse mit Java, WS2003 Universität Ulm Software-Design basierend auf dem Plug-In-Konzept Inhalt: Einführung:

Mehr

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

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik

Mehr

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich WS 02/03 Warum muss ein Objekt wissen, zu welcher Klasse es gehört? Damit die Klassenzugehörigkeit

Mehr

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

Software Engineering. 10. Entwurfsmuster II. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering 10. Entwurfsmuster II Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: 10. Entwurfsmuster II 2 Die Entwurfsmuster der Gang of Four Die 23 GoF Pattern sind in 3 Gruppen

Mehr

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

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Factory Method (Virtual Constructor)

Factory Method (Virtual Constructor) Factory Method (Virtual Constructor) Zweck: Definition einer Schnittstelle für Objekterzeugung Anwendungsgebiete: Klasse neuer Objekte bei Objekterzeugung unbekannt Unterklassen sollen Klasse neuer Objekte

Mehr

8 Design Patterns. Events

8 Design Patterns. Events 8 Design Patterns. Events Jörn Loviscach Versionsstand: 28. März 2015, 19:13 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work

Mehr

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0 9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung

Mehr

14 Design Patterns. 14.1 Einführung 14.2 Composite Pattern

14 Design Patterns. 14.1 Einführung 14.2 Composite Pattern 14 Design Patterns 14.1 Einführung 14.2 Composite Pattern 14.1 Einführung 14.1.1 Motivation 14.1.2 Was ist ein Design Pattern? 14.1.3 Beschreibung eines Design Patterns 14.1.4 Katalog von Design Patterns

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

- dynamisches Laden -

- dynamisches Laden - - - Fachbereich Technik Department Elektrotechnik und Informatik 21. Juni 2012 1/23 2/23 s dynamisch Code kann von mehreren Programmen genutzt werden => kleinere Programme einzelne Teile eines Programms

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen

Mehr

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit Aufgabe : Die allgemeine Object-Liste Gegeben sei folgendes UML-Klassendiagramm: MyObjectList

Mehr

Lehrplan: Architektur und Design. paluno

Lehrplan: Architektur und Design. paluno Lehrplan: Architektur und Design Gliederung 1 Grundlagen der industriellen So9ware Entwicklung 2 Ebenen von Architektur und Design 3 KernakAvitäten von So9ware- Architekten 4 Architekturtypologien von

Mehr

Programmieren 2 Java Überblick

Programmieren 2 Java Überblick Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10

Mehr

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

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster 2013-12-11 Software-Entwurfsmuster 1 185.A01 OOP Software-Entwurfsmuster 2013-12-11 Software-Entwurfsmuster 2 OOP Zweck von Entwurfsmustern Benennen wiederkehrender Probleme und Lösungen Austasch von Erfahrungen

Mehr

Inhaltsverzeichnis. a. Standorte...3 1. Design Patterns...6. b. Impressum... 16. i. C#.NET...6. ii. Enterprise Integration Patterns...

Inhaltsverzeichnis. a. Standorte...3 1. Design Patterns...6. b. Impressum... 16. i. C#.NET...6. ii. Enterprise Integration Patterns... 2 Inhaltsverzeichnis a. Standorte...3 1. Design Patterns...6 i. C#.NET...6 ii. Enterprise Integration Patterns... 8 iii. Entwurfsmuster-Katalog Standard (GoF)...10 iv. Java...12 v. PHP... 14 b. Impressum...

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

1 Abstrakte Klassen, finale Klassen und Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces 1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Eine Kommando-Oberfläche für.net

Eine Kommando-Oberfläche für.net Institut für Systemsoftware O.Univ.-Prof. Dr. Hanspeter Mössenböck Eine Kommando-Oberfläche für.net In.NET (wie auch in vielen anderen Systemen) haben Programme nur einen einzigen Eintrittspunkt (ihre

Mehr

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen 7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen

Mehr

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

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

Mehr

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

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,

Mehr

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen

Mehr

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich UML / Fujaba Generierung von Java-Quellcode aus UML-Diagrammen Marcel Friedrich Agenda Einleitung Struktur Verhalten Klassendiagramme Storydiagramme Statecharts Action methods 2 Thema Codegenerierung mit

Mehr

Seminar Software Design Pattern

Seminar Software Design Pattern Seminar Software Design Pattern Factory Method, Abstract Factory, Prototype Betriebliche Informationssysteme Institut für Informatik Universität Leipzig 13.05.2009 Gliederung 1 Design Pattern 2 Problembeispiel

Mehr

11. Komponenten Grundlagen der Programmierung 1 (Java)

11. Komponenten Grundlagen der Programmierung 1 (Java) 11. Komponenten Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 10. Januar 2006 Einordnung im Kontext der Vorlesung

Mehr

Informatik II Übung 6 Gruppe 7

Informatik II Übung 6 Gruppe 7 Informatik II Übung 6 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch DEBRIEFING Übung 5 2 U5A1-4 Im Prinzip alles richtig. Falls am Ende noch Zeit, dann Einsicht in die Best Of s 3 THEORIE Java Vererbung,

Mehr

Algorithmen und Datenstrukturen 06

Algorithmen und Datenstrukturen 06 31. Mai 2012 1 Besprechung Blatt 5 Fragen 2 Objektorientierte Programmierung Allgemein Sichtbarkeit Konstanten 3 Unified Modeling Language (UML) Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung

Mehr

Software Engineering. Sommersemester 2012, Dr. Andreas Metzger

Software Engineering. Sommersemester 2012, Dr. Andreas Metzger Software Engineering (Übungsblatt 5) Sommersemester 2012, Dr. Andreas Metzger Übungsblatt-Themen: Rollenverteilung in der Softwareentwicklung; Rolle des Testers; Prinzip der Strukturierung; Softwarearchitektur;

Mehr

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

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure 7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG

Mehr

1. Einleitung. 1.1 Motivation. 1.2 Ziel der Arbeit. 1.3 Danksagung

1. Einleitung. 1.1 Motivation. 1.2 Ziel der Arbeit. 1.3 Danksagung 1. Einleitung 1.1 Motivation Im Fach Systemprogrammierung des Informatik-Grundstudiums lernen die Studenten die Assembler-Sprache des Sparc-Mikroprozessors [6] kennen. Um mit dem Befehlssatz zu experimentieren,

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

Factory Method Pattern

Factory Method Pattern Factory Method Pattern Bedeutung: Das Muster ist eines der sogenannten GoF-Entwurfsmuster (Gang offour). Es bezeichnet ein Muster, bei dem die Schnittstelle zur Erstellung eines Objektes eine (abstrakte)

Mehr

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion 1 Java 1.1 e B Java RMI orientierte Sprache e beschrieben in Klassendefinitionen und andere Datentypen: int, float, boolean, etc. referenzen Verweise auf e keine Zeiger, Adressen o.ä. B.1 B.2 1.1 e (2)

Mehr

Das Zustandsmuster Eine Einführung

Das Zustandsmuster Eine Einführung Das Zustandsmuster Eine Einführung Universität Hamburg 25. August 2010 Organisatorisches vorweg Diese Folien sind unter CC-BY-SA 3.0 freigegeben. Alle Illustrationen, soweit sie nicht von mir erstellt

Mehr

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

Bekannte Lösungen für bekannte Probleme benutzen. Entwurf auf höherer Abstraktionsebene als bei Programmiersprachen Michael Saecker Bekannte Lösungen für bekannte Probleme benutzen Entwurf auf höherer Abstraktionsebene als bei Programmiersprachen Gemeinsames Vokabular für Designer 2 http://www.clickpix.de/sommer/architektur.jpg

Mehr

Einführung in die Informatik II

Einführung in die Informatik II Einführung in die Informatik II SS 2012 6 Objektorientierte Entwurfsmuster Wissensbassierte Systeme / Wissensmanagement Einführung in die Informatik II 1 Prüfungstermine EI II im Sommersemester 2012 Klausurtermine

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 09: Vererbung Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil Einführung in die Vererbung Motivation Das Schlüsselwort extends Einführendes

Mehr

Entwurfsmuster und Frameworks Singleton

Entwurfsmuster und Frameworks Singleton Entwurfsmuster und Frameworks Singleton Oliver Haase Oliver Haase Emfra Singleton 1/20 Beschreibung I Klassifikation: objektbasiertes Erzeugungsmuster Zweck: sicherstellen, dass eine Klasse nur genau einmal

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Einführung in die Programmierung für NF. Übung

Einführung in die Programmierung für NF. Übung Einführung in die Programmierung für NF Übung 11 15.01.2014 Inhalt Korrektur Blatt 10 JList mit ListModel bzw. DefaultListModel ActionListener und InputDialoge UML Praktische Anwendung Observer-Pattern

Mehr

Theorie zu Übung 8 Implementierung in Java

Theorie zu Übung 8 Implementierung in Java Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Objektorientierte Programmierung mit Java

Objektorientierte Programmierung mit Java David J. Barnes Michael Kölling Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Übersetzt von Axel Schmolitzky, Universität Hamburg PEARSON Studium ein Imprint von Pearson

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Design Patterns und C#

Design Patterns und C# UML - Teil2 Design Patterns und C# Claude Eisenmann 4. August 2005 Inhaltsverzeichnis Rückblende Design Patterns Creational Patterns Structural Patterns Behavioural Patterns Architectural Patterns Umwandlung

Mehr

Software-Entwurfsmuster

Software-Entwurfsmuster Software-Entwurfsmuster benennen wiederkehrende Probleme und Lösungen dienen dem Austasch von Erfahrungen Wiederverwendung von Erfahrung wo Wiederverwendung von Code versagt sehr abstrakt, daher häufig

Mehr

UML (Unified Modelling Language) von Christian Bartl

UML (Unified Modelling Language) von Christian Bartl UML (Unified Modelling Language) von Inhaltsverzeichnis Inhaltsverzeichnis... 2 1 UML Unified Modelling Language... 3 2 Diagrammtypen... 3 2.1 Aktivitätsdiagramm... 3 2.1.1 Notation... 4 2.1.2 Beispieldiagramm...

Mehr

Java Vererbung. Inhalt

Java Vererbung. Inhalt Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Objektorientierte Modellierung (1)

Objektorientierte Modellierung (1) Objektorientierte Modellierung (1) Die objektorientierte Modellierung verwendet: Klassen und deren Objekte Beziehungen zwischen Objekten bzw. Klassen Klassen und Objekte Definition Klasse Eine Klasse ist

Mehr

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0 Jens Kohlmeyer 05. März 2007 Institut für Programmiermethodik und Compilerbau ActiveCharts Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0 Seite 2 Übersicht

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

Software Engineering Entwurfsmuster (update: 11.6.)

Software Engineering Entwurfsmuster (update: 11.6.) Software Engineering Entwurfsmuster (update: 11.6.) Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Entwurfsmuster Entwurfsmuster (Design Patterns) geben bewährte

Mehr

Konstruktion anpassbarer Software

Konstruktion anpassbarer Software Konstruktion anpassbarer Software O.Univ.-Prof. Dipl.-Ing. Dr. Wolfgang Pree Fachbereich Informatik cs.uni-salzburg.at Inhalt Konfigurationsparameter Konzepte und Konstruktionsprinzipien für anpassbare,

Mehr

Klausur Grundlagen der Programmierung

Klausur Grundlagen der Programmierung Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel

Mehr

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel Einführung Servlets JEE Vorlesung Teil 2 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Wiederholung Hello World Blick in die Details Servlet Programmierung Potentielle Fehler Lernziele Gruppenübung 2

Mehr

Objektorientierte Programmierung mit C++ Vector und List

Objektorientierte Programmierung mit C++ Vector und List Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu

Mehr

Design Patterns mit Java

Design Patterns mit Java Eine EINFÜHRUNG in ENTWURFSMUSTER florian SIEBLER Design Patterns mit Java 2 1 Singleton Pattern der Anwender hat gerade den Button geklickt mach was! Das Observer Pattern, das Sie in Kürze kennenlernen

Mehr