Analyse und Modellierung von Informationssystemen



Ähnliche Dokumente
Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Software-Entwurfsmuster

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

Algorithmen und Datenstrukturen

Analyse und Modellierung von Informationssystemen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung

Objektorientierte Programmierung

Programmierkurs Java

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

Programmieren in Java

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

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

SEP 114. Design by Contract

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

Einführung in die Java- Programmierung

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Applet Firewall und Freigabe der Objekte

5. Abstrakte Klassen

Übungen zur Softwaretechnik

Klausur zur Einführung in die objektorientierte Programmierung mit Java

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

Einführung in die Programmierung

Übung: Verwendung von Java-Threads

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

Prinzipien Objektorientierter Programmierung

Einführung in die Java- Programmierung

Vorkurs C++ Programmierung

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Einführung in die Informatik Tools

4. AuD Tafelübung T-C3

C# im Vergleich zu Java

Abituraufgabe zur Stochastik, Hessen 2009, Grundkurs (TR)

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Objektorientierte Programmierung für Anfänger am Beispiel PHP

HIER GEHT ES UM IHR GUTES GELD ZINSRECHNUNG IM UNTERNEHMEN

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

Code-Erzeugung aus UML-Klassendiagrammen

U08 Entwurfsmuster (II)

Inhalt. Max Lini. ax. inie. Einleitung... VII

.NET Code schützen. Projekt.NET. Version 1.0

Grundbegriffe der Informatik

Typumwandlungen bei Referenztypen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

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

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Vgl. Oestereich Kap 2.7 Seiten

Assoziation und Aggregation

8 Design Patterns. Events

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Was meinen die Leute eigentlich mit: Grexit?

Java: Vererbung. Teil 3: super()

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Wir machen neue Politik für Baden-Württemberg

Einführung in die Programmierung für NF

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Grundlagen von Python

REACH-CLP-Helpdesk. Zulassung in der Lieferkette. Matti Sander, Bundesanstalt für Arbeitsschutz und Arbeitsmedizin

3. Konzepte der objektorientierten Programmierung

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

Übung 6: Feinentwurf. Prof. Dr. Dr. h.c. Manfred Broy Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter

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

5.2 Neue Projekte erstellen

Anforderungen an die HIS

Teil 1: IT- und Medientechnik

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!.

Mit dem Tool Stundenverwaltung von Hanno Kniebel erhalten Sie die Möglichkeit zur effizienten Verwaltung von Montagezeiten Ihrer Mitarbeiter.

Software Engineering Klassendiagramme Assoziationen

1. Weniger Steuern zahlen

Eine Anwendung mit InstantRails 1.7

DAUERHAFTE ÄNDERUNG VON SCHRIFTART, SCHRIFTGRÖßE

SJ OFFICE - Update 3.0

Updatehinweise für die Version forma 5.5.5

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

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

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

WhiteStarUML Tutorial

Java Enterprise Architekturen Willkommen in der Realität

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

Objektorientierte Programmierung OOP

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

Objektbasierte Entwicklung

Übungsaufgaben Tilgungsrechnung

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Speicher in der Cloud

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

etermin Einbindung in Outlook

Computeranwendung und Programmierung (CuP)

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

SEQUENZDIAGRAMM. Christoph Süsens

Transkript:

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 / 19

Die Gang of Four 1994 veröffentlichten Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides das Buch Design Patterns, Elements of Reusable Object-Oriented Software das eine Sammlung von wiederverwendbaren Entwurfsmustern für die objektorientierte Programmierung enthält. Das Vorwort zum Buch schrieb Grady Booch, einer der Erfinder der UML. Das Buch führt die Entwurfsmuster anhand eines konkreten Beispiels, der Entwicklung eines Editors, ein. Das Buch gehört noch heute zu einem der Standardwerke der Softwareentwicklung, die Autoren werden oft kurz als Gang of Four (GoF oder Go4) bezeichnet. 3 / 19

Die Autoren Erich Gamma ist ein Schweizer Software-Entwickler (geb. 1961), der lange für IBM arbeite. Er ist Koautor von JUnit, war Eclipse-Entwickler, mittlerweile arbeitet er für Microsoft (Visual Studio). Richard Helm arbeitete früher für IBM, heute für die Boston Consulting Group in Sidney. Ralph Johnson (geb. 1955) arbeitet an der University of Illinois und war Pionier der Softwareentwicklung in Smalltalk. John Vlissides (geb. 1961, gest. 2005) arbeite bei IBM. 4 / 19

Klassifizierung der Entwurfsmuster Die im Buch vorgestellten Entwurfsmuster werden in drei Kategorien eingeteilt: Erzeugungsmuster die der Erzeugung von Instanzen einer Klasse dienen. Hierzu gehöreb insbesondere in vielen Frameworks verwendete Entwurfsmuster wie (abstrakte) Fabriken oder das Singleton. Strukturmuster die Objekte oder Klassen (z. B. durch Komposition) zu einer Struktur zusammenfassen. Beispiele hierfür sind Adapter, Dekorierer oder Brücken. Verhaltensmuster bestimmen das Verhalten von Objekten bei der Kommunikation untereinander. Eines der Beispiele ist die Auswahl einer Teilfunktionalität eines Objektes zur Laufzeit (Strategie-Muster) oder ein per Beobachter-Muster realisierter Publish-Subscribe-Mechanismus. 5 / 19

Erzeugungsmuster In dieser Vorlesung werden zwei erzeugende Muster vorgestellt: Fabrikmuster dienen der Erzeugung von Instanzen einer Klasse. Eine solche Fabrik kann einerseits eine eigene Klasse sein, oder eine statische Methode der Klasse, von der Instanzen erzeugt werden sollen. Das Singleton ist ein Spezialfall, in dem von einer Klasse nur eine einzige Instanz erzeugt werden kann/darf. Hierbei ist bei nebenläufiger Programmierung besondere Vorsicht angesagt, so dass hier im Code besondere Maßnahmen zu treffen sind (und teilweise Änderungen im Speichermanagement von Java hierdurch motiviert wurden). 6 / 19

Schaubild 1 7 / 19

Schaubild 2 8 / 19

Gründe für den Einsatz einer Fabrik Eine Instanz kann auf verschiedene Arten definiert werden, die durch unterschiedliche Fabrikmethoden repräsentiert werden. Die Fabrikmethode erzeugt Instanzen einer Kindklasse/einer konkreten Klasse, liefert aber als Rückgabe eine Referenz vom Typ der Elternklasse/eines Interfaces zurück. Die Instanzen werden nur zurück geliefert, wenn bestimmte Kriterien erfüllt sind. Die Instanzen werden anhand der Informationen aus einer externen Datenquelle (Datenbank, XML-Datei) erzeugt. 9 / 19

Beispiel: Kredit public class Kredit { final static float MINDEST_TILGUNG = 0.01F; float zinssatz; float kreditsumme; float rate; public static Kredit createkredit(float zinssatz, float kreditsumme, float rate) { Kredit kredit = new Kredit(zinssatz, kreditsumme, rate); if (kredit.gettilgung()/kredit.getkreditsumme()>=mindest_tilgung) { return kredit; else { return null; private Kredit(float zinssatz, float kreditsumme, float rate) { this.zinssatz = 0.01F*zinssatz; this.kreditsumme = kreditsumme; this.rate = rate; 10 / 19

public float getzinssatz() { return zinssatz; Beispiel: Kredit (Forts.) public float getkreditsumme() { return kreditsumme; public float getrate() { return rate; public float getzinsen() { return zinssatz*kreditsumme; public float gettilgung() { return rate-getzinsen(); 11 / 19

Beispiel: Kreis public class Kreis { private double radius; public static Kreis createfromradius(double radius) { if (radius<0) throw new RuntimeException(); return new Kreis(radius); public static Kreis createfromflaeche(double flaeche) { if (flaeche<0) throw new RuntimeException(); return new Kreis(Math.sqrt(flaeche/Math.PI)); private Kreis(double radius) { this.radius = radius; 12 / 19

Beispiel: Kreis (Forts.) public double getradius() { return radius; public double getflaeche() { return radius*radius*math.pi; 13 / 19

Das Singleton Im einfachsten Fall wird ein Singleton über ein statisches Attribut realisiert: public class Singleton1 { private static Singleton1 instance = null; private Singleton1() { public static Singleton1 getinstance() { if (instance==null) { instance = new Singleton1(); return instance; Allerdings ist diese Variante nicht Thread-safe, da der zwischen der if-abrage (im Wahr-Fall) und dem Erzeugen der Instanz ein kritischer Bereich liegt. 14 / 19

Thread-safe, Variante 1 public class Singleton2 { private static Singleton2 instance = null; private Singleton2() { synchronized public static Singleton2 getinstance() { if (instance==null) { instance = new Singleton2(); return instance; Durch die synchronisierte Methode findet jedoch bei jedem Aufruf (auch wenn die Instanz schon längst existiert) eine Verriegelung statt, dies kostet Performance. 15 / 19

Thread-safe, Variante 2 public class Singleton3 { private static volatile Singleton3 instance = null; private Singleton3() { public static Singleton3 getinstance() { if (instance==null) { synchronized (Singleton3.class) { if (instance==null) { instance = new Singleton3(); return instance; Hier findet ein Double-Checked Locking statt, d. h. die Existenz der Instanz wird zweimal geprüft, nur wenn sie noch nicht existiert, findet die Verriegelung statt, danach nicht mehr. 16 / 19

Alternative Variante, Java-spezifisch Die folgende Variante (Initialization-on-Demand Holder Idiom genannt), macht Gebrauch davon, dass innere Klassen in Java erst dann initialisiert werden, wenn sie tatsächlich referenziert, also benutzt werden: public class Singleton4 { private Singleton4() { private static class Helper { private static final Singleton4 instance = new Singleton4(); public static Singleton4 createinstance() { return Helper.instance; 17 / 19

Konkretes Beispiel mit Erzeugungsmustern Im folgenden wird eine Anwendung entwickelt, die aus einer externen Datenquelle (in diesem Fall eine HSQL-Datenbank) ein Dialog-Fenster erzeugt: Hierbei werden als Eingabeelemente Textfelder, Radiobuttons und Pulldown-Menüs unterstützt. 18 / 19

Schaubild Der eigentliche Code wird nach der Vorlesung als Eclipse-Projekt zur Verfügung gestellt. 19 / 19