Software Design Patterns. Einführung II

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

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

UML-Basics: Einführung in Objekt- Orientierte Modellierung mit der Unified Modeling Language

Übungen zu Softwaretechnik

Prinzipien der objektorientierten Programmierung (OOP)

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Entwurfsprinzip. Entwurfsprinzip

Das Softwaresystem BASEMENT

11. Komponenten Grundlagen der Programmierung 1 (Java)

Software Design basierend auf dem Plug-In Konzept

C++ - Variablen: Gültigkeit - Sichtbarkeit

Wahlpflichtfach Design Pattern

Inhaltsverzeichnis 1. Objektorientierung: Ein Einstieg 2. Objekte, Klassen, Kapselung

Entwurfsmuster (Design Patterns)

Ziele und Tätigkeiten von Architekten

Software-Refactoring. 29. Mai 2013

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

15 Unified Modeling Language (UML) 7 UML und Java Informatik 2 (SS 07) 595

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

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

Software-Entwurfsmuster

Konzepte der Programmiersprachen

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

Informatik II Übung 6 Gruppe 7

Objektorientierte Programmierung OOP

Was ist Software-Architektur?

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

Model-View-Controller

Objektorientierte Analyse (OOA) OOA-Pattern

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Objektorientierte und Funktionale Programmierung SS 2014

Software Engineering

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

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

Dokumentationskonzept

Java Einführung Vererbung und Polymorphie. Kapitel 13

Abschnitt 15: Unified Modeling Language (UML)

Software- /Systemarchitektur

Software-Engineering

Techniken der Projektentwicklungen

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

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Einführung in die objektorientierte Programmierung

Objektorientierte Softwareentwicklung

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

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

Entwurfsmuster - Iterator

Objektorientierte Programmierung mit Java

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Einführung in die OOP mit Java

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

10. Programmierungs-Phase: Objektorientierung Software Engineering

Objektorientierte Programmierung Teil 1: Einführung

4. Mentorium. UML-Modellierung (Lösungshinweise)

Application Engineering Grundlagen für die objektorientierte Softwareentwicklung mit zahlreichen Beispielen, Aufgaben und Lösungen

16 Architekturentwurf Einführung und Überblick

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4

Einführung in C# Teil 1. Matthias Nübling

Übungen zu Softwaretechnik

7. Zusammenfassung (1)

Objektorientierte Analyse und Design mit der Unified Modelling Language (UML) Sandra Meißl

Behutsame Modernisierung

Mathematik Seminar WS 2003: Simulation und Bildanalyse mit Java. Software-Architektur basierend auf dem Plug-in-Konzept

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

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

Seminar Software Design Patterns Sommersemester 09. Paket Servicevariation. Template Method State Strategy

Entwurfsmuster Martin Fesser 00IN

Dr. Beatrice Amrhein. April 13

3-Tier-Architecture und J2EE

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

Die SOLID-Prinzipien Fünf Grundsätze für bessere Software

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

Der Operator this. Wir betrachten nochmals die Klassendefinition von Ballon.

Informationsverarbeitung im Bauwesen

Objektorientierte Entwurfsmuster

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

Vererbung. Was versteht man unter dem Begriff Vererbung?

Potentiale modellgetriebener Softwareentwicklung

Aufbau eines modernen Betriebssystems (Windows NT 5.0)

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Informatik I Eprog HS12

Praxis der Softwareentwicklung

Systematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015

Einstieg in die Informatik mit Java

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

Java Einführung Objektorientierte Grundkonzepte

2 Grundsätzliches zur objektorientierten Programmierung.. 33

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

Begriffe 1 (Wiederholung)

Theorie zu Übung 8 Implementierung in Java

Transkript:

Software Design Patterns Einführung II

Termine 22.04. - Verlegt (Christian Stein / Glenn Bernhardt: Sonstige) 29.04. - Jan Rausch: Anpassung 06.05. - Johannes Schmidt: Message Routing 13.05. - Ralf Rublack: Fabrik 20.05. - René Speck: Servicevariation 27.05. - Daniel Gerber: Zusammensetzung 03.06. - Michael Hütel: Message Transformation 10.06. - Mario Heidenreich: Zugriff 17.06. - Michael Lühr: MVC 24.06. - Daniel Müller: Kommando 01.07. - Martin Czygan: Ereignisbearbeitung 08.07. - Christian Kube: Kommunikation

Objektorientierung OO-Basics Abstraktion Kapselung Polymorphismus Vererbung

Unser Next-Gen-MMO! Monster bewegen() angreifen() Räuber... Wolf Bild: Bildbox Bild: NPS

Neue Monster braucht das Land! Monster bewegen() angreifen() Hase Zauberer Baum Bild: schulbilder.org Bild: www.hase.or.at Bild: bastelideen.info

Monstervererbung Bewegung bewegen() Monster Angriff angreifen() Räuber Hase Wolf Zauberer Baum bewegen() angreifen() bewegen() bewegen() angreifen() bewegen() angreifen() angreifen()

Bewegungskapseln Bewegung bewegen() IntelligentBewegen bewegen() { // komplizierte // Wegfindung } ZufälligBewegen bewegen() { // einfache // Bewegung } NichtBewegen bewegen() { // nichts tun }

Das neue generische Monster Monster Bewegung mybewegung; Angriff myangriff; dobewegen() doangriff() { myangriff.angreifen() } Bild: Audri Phillips

Der neue Monsterhase public class Hase : Monster { public Hase() // Konstruktor { mybewegung = new ZufaelligBewegen(); myangriff = new KeinAngriff(); } public void { cout << "Mein Name ist Hase"; } } Bild: Jeff West

Das dynamische Monster Verhalten dynamisch ändern public void setangriffsverhalten (Angriff neuerangriff) { myangriff = neuerangriff; } Bild: blazemongr

Monströse Zusammenfassung Monster Bewegung mybewegung; Angriff myangriff; Bewegung bewegen() dobewegen() doangriff() setangriffsverhalten() setbewegungsverhalten() // Monstermethoden cont IntelligentBewegen bewegen() ZufälligBewegen bewegen() Angriff angreifen() NichtBewegen bewegen() PhysischerAngriff MagischerAngriff KeinAngriff angreifen() angreifen() angreifen() Räuber Hase Wolf Zauberer Baum

Entwurfsprinzipien Identifizierung und Trennung von Aspekten die Änderungen unterliegen können und statischen Aspekten Programmieren auf eine Schnittstelle / Basisklasse, nicht auf konkrete Implementierung HAT-EIN (Komposition) ist flexibler als IST-EIN (Vererbung) lockere Bindung zwischen interagierenden Objekten Klassen sollten offen für Erweiterung aber geschlossen für Veränderung sein Auf Abstraktion stützen, nicht auf konkrete Klassen

Muster für Muster Muster Kontext Designsituation, die ein Problem hervorruft Problem Menge an Kräften, die wiederholt im gegebenen Kontext auftreten Lösung Balancieren der Kräfte Struktur mit Komponenten und Beziehungen zwischen diesen Laufzeitverhalten

Muster für Muster Synonym: Auch bekannt als Zweck: Wozu dient das Pattern Kontext Problem Lösung ((UML)-Diagramm + Flussdiagramm) Motivation: Beispielszenario für Problem

Muster für Muster Vorteile: Die Pros Nachteile: Die Contras Verwendung: Spezielle Anwendungsgebiete Varianten: Abwandlungen + Bedingungen Quellen: Weiterführende Infos

Allgemeine Prinzipien der Softwarearchitektur Softwarearchitektur Beschreibung der Subsysteme und Komponenten eines Softwaresystems und deren Beziehungen Verschiedene Sichten zum Darstellen relevanter Verschiedene Sichten zum Darstellen relevanter Eigenschaften

Komponente Allgemeine Prinzipien der Softwarearchitektur gekapselter Teil eines Softwaresystems Interface zur Kommunikation Bausteine der Struktur eines Systems Auf Programmiersprachenebene: Module, Klassen

Beziehung Allgemeine Prinzipien der Softwarearchitektur Verbindung zwischen Komponenten statisch: sichtbar im Quellcode dynamisch: nicht direkt sichtbar

Techniken des Softwaredesigns Abstraktion Detaillierungsgrad einer Komponente Abstraktionsebene Grobgranulare Komponenten setzen sich aus Grobgranulare Komponenten setzen sich aus feingranularen Komponenten zusammen

Techniken des Softwaredesigns Kapselung Gruppieren von Elementen einer Abstraktionsebene Abgrenzung von Funktionalität und Struktur Abgrenzung der Abstraktion

Techniken des Softwaredesigns Information Hiding Verbergen der Implementation vor dem Client erreicht durch Kapselung welche Informationen verborgen werden ist abhängig von der Anwendung Reflectionweicht Prinzip auf, aber in einer definierten Art und Weise

Techniken des Softwaredesigns Modularisierung Komposition eines Softwaresystems und Gruppierung in Subsysteme und Komponenten Physische Pakete Verringerung der Systemkomplexität durch wohldefinierte und dokumentierte Grenzen

Techniken des Softwaredesigns Aufteilung der Aufgaben (Separation of Concerns) Separierung unähnlicher Verantwortlichkeiten Eine Komponente mit mehreren Eine Komponente mit mehreren Verantwortlichkeiten sollte von jeder anderen getrennt sein

Techniken des Softwaredesigns Coupling and Cohesion Cohesion: Stärke der Vernetzung von Elementen und Funktionen innerhalb eines Moduls Coupling: Stärke der Verbindung zwischen Modulen niedrige Verbindung zu externen Komponenten hoher Zusammenhalt interner Komponenten

Techniken des Softwaredesigns Sufficiency, Completeness and Primitiveness Sufficient: Charakteristiken, die eine sinnvolle und effektive Arbeit mit der Komponente ermöglichen Complete: Komponente umfasst alle relevanten Charakteristiken seines Abstraktionsgrades Primitive: Einfache Implementierung der einzelnen Funktionen

Techniken des Softwaredesigns Separation of Interface and Implementation Interface: Definiert die Funktionalität der Komponente und wie diese zu benutzen ist Implementation: Der eigentliche Code zur Bereitstellung der vom Interface angebotenen Funktionalitäten Veränderbarkeit Information Hiding

Techniken des Softwaredesigns Single Point of Reference Jedes Element einer Software sollte nur einmal deklariert und definiert werden Vermeidung von Inkonsistenzen Wartbarkeit

Techniken des Softwaredesigns Divide and Conquer Teilen einer Aufgabe in kleinere Teile (Top-down Design) Separation of Concerns

Nichtfunktionale Eigenschaften Changeability häufig lange Lebensdauer von Softwaresystemen Änderung der Anforderungen während der Lebenszeit Verbesserungen und Fehlerbehebung Aspekte: Wartbarkeit, Erweiterbarkeit, Umstrukturierbarkeit, Portierbarkeit

Nichtfunktionale Eigenschaften Interoperability wohldefinierter Zugriff auf extern sichtbare Funktionalitäten und Datenstrukturen Interaktion mit anderen Programmen (speziell Interaktion mit anderen Programmen (speziell anderer Programmiersprachen)

Nichtfunktionale Eigenschaften Efficency Benutzung der zur Verfügung stehenden Ressourcen Antwortzeiten Datendurchsatz Speicherbedarf Kommunikation mit anderen Systemen

Nichtfunktionale Eigenschaften Reliability Fähigkeit einer Software, ihre Funktionalität aufrechtzuerhalten System- und Anwendungsfehler Fehlertoleranz Wiederaufbau einer Verbindung Robustheit Schutz der Software gegen inkorrekte Benutzung

Nichtfunktionale Eigenschaften Testability Erleichterung der Tests durch die Architektur bessere Fehlererkennung / -behebung Debug-Code / Debug-Komponenten Profitiert von Modularisierung

Nichtfunktionale Eigenschaften Reusability Reduktion von Zeit und Kosten bei der Softwareentwicklung verbesserte Qualität Entwicklung "with reuse" Entwicklung "for reuse" Changability