Vorlesung Programmieren



Ähnliche Dokumente
Vorlesung Programmieren. Software Design. Software Design. Entwurfsmuster

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Einführung in Javadoc

Überblick FBC SNW Zusammenfassung. Entwurfsmuster. Eine Einführung. Botond Draskoczy. Marcus Vitruvius Pollio

Software-Entwurfsmuster

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

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

Objektorientiertes Software-Engineering

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

SE Besprechung. Übung 4 Architektur, Modulentwurf

Objektorientiertes JavaScript

Objektorientierte Programmierung OOP

Objektorientierte Programmierung für Anfänger am Beispiel PHP

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

Objektorientierte Programmierung

8 Design Patterns. Events

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

Große Übung Praktische Informatik 1

Prinzipien Objektorientierter Programmierung

Robot Karol für Delphi

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Anleitung über den Umgang mit Schildern

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

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

Projektmanagement in der Spieleentwicklung

Unified Modeling Language (UML)

PocketPC.ch Review. SBSH ilauncher 3.1. Erstelldatum: 3. Dezember 2007 Letzte Änderung: 3. Dezember PocketPC.ch_Review_iLauncher.

Factory Method (Virtual Constructor)

Übungen zur Softwaretechnik

Woche 1: Was ist NLP? Die Geschichte des NLP.

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

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

Programmieren in Java

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einführung in die Java- Programmierung

3D-Konstruktion Brückenpfeiler für WinTrack (H0)

Grundlagen der Softwaretechnik

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

Grundlagen von Python

Präsentation zur Vorstellung meiner Bachelor-Arbeit beim BSE- Seminar. Vortrag von Patrick Bitterling

FRAGEBOGEN ANWENDUNG DES ECOPROWINE SELBSTBEWERTUNG-TOOLS

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

Dokumentenverwaltung

Entwurfsprinzip. Entwurfsprinzip

Erfahrungen mit Hartz IV- Empfängern

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Zwischenablage (Bilder, Texte,...)

Softwareentwicklungsprozess im Praktikum. 23. April 2015

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Kurzanleitung: Verbinden mehrerer PDF-Dokumente zu einem einzigen PDF-Dokument mit FreePDF XP Join

SEP 114. Design by Contract

Arbeiten mit UMLed und Delphi

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

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

Lehrer: Einschreibemethoden

Design Patterns 2. Model-View-Controller in der Praxis

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Viele Bilder auf der FA-Homepage

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Software-Architektur Design Patterns

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

Tritt beim Aufruf ein Fehler aus, so wird eine MessageBox mit dem Fehlercode und der Kommandozeile angezeigt.

Muster. Selbstverantwortliches Lernen. für. Eine Mustersprache für die Waldorfpädagogik?

Specifying Patterns for Dynamic Pattern Instance Recognition with UML 2.0 Sequence Diagrams. Lothar Wendehals. Universität Paderborn

Tutorium Softwaretechnik I

Transaktionsempfehlungen im ebase Online nutzen

Inhaltsverzeichnis. Vorwort Geleitwort von Grady Booch Einleitung... 23

Info-Veranstaltung zur Erstellung von Zertifikaten

Geld Verdienen im Internet leicht gemacht

IT-SICHERHEIT IM UNTERNEHMEN Mehr Sicherheit für Ihre Entscheidung

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

1. Zeilenendkommentare: // geklammerte Kommentare: /*... */ 3. Dokumentationskommentare: /**... */

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

IINFO Storyboard

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Tutorium Softwaretechnik I

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

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

Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun. Java Projekt. Schiffe Versenken mit GUI

Lösungsvorschlag für Übungsblatt 6 Software Engineering 1 (WS 2012/13)

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Java: Vererbung. Teil 3: super()

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

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

BEISPIELKLAUSUR Softwareentwicklung:

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Informationsblatt Induktionsbeweis

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Einführung in. Logische Schaltungen

Erstellung von Reports mit Anwender-Dokumentation und System-Dokumentation in der ArtemiS SUITE (ab Version 5.0)

Transkript:

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? Weniger Bugs in der Software Wiederverwendbarkeit sicherstellen Einarbeitungszeit Dritter minimieren Entwurfsmuster, Dokumentation Wie entwickle ich große Projekte? Wie organisiert man Teamarbeit? Wie baut man Projekte? Versionskontrollsysteme, Build-Management Tools 3

Entwurfsmuster

Entwurfsmuster: Motivation Entwicklung guter Software ist zu großen Teilen Erfahrungssache Erfahrene Entwickler haben viele <Problem, Lösung>-Tupel Bei neuen Projekten mit ähnlichen Problemen sucht man nach bekannten Lösungsstrategien (und passt diese an das neue Problem an) Wissen typischerweise nur in Köpfen verfügbar, nicht in Textform Entwickler sollen das Rad nicht jedes mal neu erfinden Aber: Wie lernen junge, unerfahrene Entwickler solche Muster? Kann man den Lernzyklus verkürzen? 5

Entwurfsmuster: Motivation Letzte große Entwicklungssprünge in der Softwaretechnik Assembler Strukturierte Programmierung Objektorientierte Programmierung???? Alleine die Objektorientierung garantiert keine gute Software Nicht nur Vererbung, Kapselung, Polymorphie sind entscheidend Wichtig sind die Interaktionen der einzelnen Klassen und Objekte Hier helfen Regeln ( Best-Practices ) Diese sind als Muster, Templates, Patterns bekannt geworden 6

Entwurfsmuster Abstraktion von konkreten Problemen zu abstrakten Lösungen für eine Klasse von Problemen führt zu Mustern Diese Problem-Lösungs-Paare zerfallen auf natürliche Art so in Gruppen von ähnlichen Problemen und Lösungen, dass sowohl für die Probleme als auch für die Lösungen ein Muster erkennbar ist. (aus [1]) Formalisiert durch Erich Gamma in seiner Dissertation in den 90ern Systematische Auflistung genereller Lösungsvorlagen für wiederkehrende Entwurfsprobleme der Softwareentwicklung Erweitert und zum Standardwerk geworden Etwas über 20 Entwurfsmuster Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides (siehe Literatur) [1] R. Johnson: An Introduction to Patterns, Reports on Object Analysis and Design 7

Entwurfsmuster Ein Muster sollte/kann folgende Eigenschaften aufweisen: Löst ein oder mehrere Probleme Bietet ein erprobtes, in der Praxis bewährtes Konzept Geht über das offensichtliche hinaus Stellt Beziehungen zu anderen Mustern her Diskutiert Vor-/Nachteile beim Einsatz dieses Musters Nutzen von Entwurfsmustern Allgemeingültige Beschreibung einer Lösung für eine bestimmte Klasse von Entwurfsproblemen Unabhängig von Programmiersprachen Lösungen bekommen einen Namen Vereinfachung der Diskussion unter Entwicklern 8

Entwurfsmuster: Nutzen Wer alles kann, braucht keine Entwurfsmuster Strukturen der Entwurfsmuster sind nicht revolutionär Viele der Muster gab es schon lange vor deren Entdeckung Aber Bieten guten Einstieg zum strukturierten Lösen von Problemen Möglichkeit, ohne Umwege zu guten Entwürfen zu gelangen Erleichtern den Sprachgebrauch Daher Lektüre von Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software (Gamma et al.) sehr empfohlen 9

Entwurfsmuster nach Gamma et al. Unterteilung in Klassen von Mustern Erzeugende Muster (Erzeugung von Objekten) Strukturelle Muster (Vereinfachung der Struktur zwischen Komponenten) Verhaltensmuster (Zusammenarbeit, Nachrichtenaustausch) Liste der Muster Erzeugende Muster Strukturelle Muster Verhaltensmuster Abstract Factory (Abstrakte Fabrik) Adapter Chain of Responsibility (Zuständigkeitskette) Builder (Erbauer) Composite (Kompositum) Command (Kommando) Factory Method (Fabrikmethode) Bridge (Brücke) Interpreter Prototype (Prototyp) Decorator (Dekorierer) Iterator Singleton (Einzelstück) Facade (Fassade) Mediator (Vermittler) Heute Flyweight (Fliegengewicht) Proxy (Stellvertreter) Memento Null Object (Nullobjekt) Observer (Beobachter) State (Zustand) Strategy (Strategie) Template Method (Schablonenmethode) Visitor (Besucher) 10

Singleton-Entwurfsmuster Verhindert, dass von einer Klasse mehr als ein Objekt/eine Instanz erzeugt werden kann Wird verwendet, wenn von einer Klasse nur eine Instanz existieren darf Anwendungsbeispiele Klasse mit Konfigurationsoptionen für die Anwendung Log-Klasse um Debugausgaben an zentraler Stelle zu sammeln Zentrale Druckerwarteschlange Verwaltung einer Menge von Ressourcen 11

Singleton-Entwurfsmuster UML Diagramm Singleton Erzeugt und verwaltet das einzige Objekt der Klasse Bietet globalen Zugriff auf dieses Objekt über Methode (getinstance) Konstruktor ist privat keine Instanziierung von außen getinstance ist eine Klassenmethode ( static) Das private Attribut instance ist Klassenattribut (static) 12

Singleton-Implementierung in Java 13

Singleton-Implementierung in C++ 14

Singleton: Vorteile Singleton bietet Vorteile gegenüber globalen Variablen Zugriffskontrolle wird ermöglicht Singleton kann durch Unterklassenbildung spezialisiert werden Je nach Situation kann eine Instanz einer Unterklasse verwendet werden Entscheidung kann zur Laufzeit getroffen werden Singletoninstanz muss nur erzeugt werden, wenn sie benötigt wird Sollten später mehrere Objekte benötigt werden, ist eine Änderung leichter möglich als bei globalen Variablen 15

Singleton: Nachteile Singletons sind ähnlich zu globalen Variablen Exzessive Verwendung führt weg von objektorientierter Implementierung hin zu prozeduraler Abhängigkeiten zur Singleton-Klasse werden verschleiert Vorhandensein des Singletons ist aus Interface nicht ersichtlich (nur aus Implementierung) Es ist nicht ersichtlich, dass sich mehrere Klassen/Objekte eine Instanz teilen Zeitpunkt der Freigabe von Ressourcen ist bei Singletons oft unklar 16

Entwurfsmuster: Observer Weitergabe von Änderungen an von diesem Objekt abhängige Strukturen Auch bekannt unter Publish/Subscribe Beispiel: Darstellung des aktuellen Pulses als Text und Diagramm auf der GUI eines Medizingerätes Realisierung Puls-Objekt speichert aktuellen Puls Änderungen am Zustand des Pulst-Objektes Aktualisierung der GUI Ziel: Puls-Objekt soll die Schnittstelle der abhängigen Objekte nicht kennen Zur Minimierung von Abhängigkeiten im Code (bessere Wiederverwendbarkeit) 17

Entwurfsmuster: Observer Beobachtetes Objekt (hier: das Puls-Objekt) Bietet Mechanismus, um Observer an- und abzumelden Kann diese über Änderungen informieren Kennt nur Observer-Schnittstelle, nicht Struktur der Beobachter Meldet Änderungen unspezifisch an die Beobachter weiter ( ich habe meinen Zustand geändert ) Beobachter (hier: die GUI Elemente) Implementieren eine Methode um benachrichtigt zu werden Erfragen dann die relevanten Daten vom beobachteten Objekt 18

Entwurfsmuster: Observer UML Diagramm Beobachteter registriere(beobachter) entferne(beobachter) benachrichtige() Beobachter * Beobachter aktualisiere() Beobachteter Besitzt eine Menge von Beobachtern Ruft bei Änderungen die Methode aktualisiere bei allen Beobachtern auf 19

Entwurfsmuster: Observer 20

Entwurfsmuster: Observer 21

Entwurfsmuster: Vor-/Nachteil Vorteile Observables und Observer können unabhängig variiert werden Auf abstrakte und minimale Art lose gekoppelt Das beobachtete Objekt hat keine Kenntnis über Struktur der Observer Multicasts werden unterstützt Nachteile Hohe Observerzahl führt zu hohen Aktualisierungskosten Observer werden benachrichtigt, auch wenn die konkrete Änderung sie nicht betrifft Ruft ein Observer während einer Änderung eine Änderungsmethode auf, kann es zu Endlosschleifen kommen 22

Dokumentation von Programmen

Dokumentation von Programmen Dokumentationsformen Für Endkunden Handbuch zur Nutzung Für Entwickler Dokumentation für Verwendung/Weiterentwicklung Dokumentation von Entwicklern für Entwickler ist wichtig Überblick über Gesamtprojekt (z.b. in Code anderer Entwickler) Spezielle Annahmen, Probleme oder Fehlerfälle verstehen Funktionsweise der Methode verstehen Semantik von Parametern und Rückgabewerten verstehen Sinnvoll, die Dokumentation nah am Quelltext zu erstellen Getrennte Dokumentation (z.b. Word) läuft Gefahr, niemals aktuell zu sein 24

Dokumentation von Programmen In der Vergangenheit haben sich verschiedene Werkzeuge etabliert Javadoc für Java Doxygen für C++ (und andere: Java, C, Java, Python, C#, ) Perldoc für Perl Funktionsweise bei allen Werkzeugen gleich Entwickler schreiben spezielle Kommentare in den Quelltext Programm (z.b. javadoc) extrahiert Kommentare und erstellt Dokumentation Typischerweise verschiedenste Ausgabeformate wie HTML, PDF, Gesamte API Dokumentation von Java ist so generiert http://java.sun.com/javase/7/docs/api/ 25

Javadoc Beispiel 26

Javadoc Javadoc Kommentare beginnen mit /** statt /* Der erste Satz danach ist die Kurzbeschreibung Die folgenden Sätze sind die Langbeschreibung Spezielle Tags beginnen mit @ @param ParameterName Text @return dokumenation @see package.class#member Text @throws Exception Text {@link package.class#member Text} @author author-name @version versionsnummer @since versionsnummer @deprecated {@code CODE} 27

Javadoc Packages dokumentiert durch spezielle HTML-Datei Pro Package eine Datei mit festem Namen (package.html) Javadoc verarbeitet diese Datei wie folgt Kopiert den Inhalt zwischen den Tags <body> und </body> unter die Überblickstabelle eines Package. Ersetzt alle @see, @since or {@link} tags Kopiert den ersten Satz in den Kopf der Packetüberblicksseite 28

Auswahl zu dokumentierender Klassen Durch Packagenamen -sourcepath: Speicherort der.java -Dateien (z.b. src/) Angabe des packages: de.uniluebeck.test Durch Dateinamen Angabe der Dateien: test.java 29

Aufruf von Javadoc 30

Javadoc Ausgabe 31

Literatur Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software Erich Gamma, Richard Helm, Ralph E. Johnson, John Vlissides, Addison Wesley, München 2004, ISBN 3-8273-2199-9 Design Patterns. Elements of Reusable Object-Oriented Software Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Addison Wesley, 1995, ISBN 0-201- 63361-2 (englisch) How to Write Doc Comments for the Javadoc Tool http://java.sun.com/j2se/javadoc/writingdoccomments/ Doxygen documentation system Für C++, C, Java, Objective-C, Python, IDL, Fortran, VHDL, PHP, C#, D http://www.doxygen.org Ant http://ant.apache.org 32