Code-Erzeugung aus UML-Klassendiagrammen



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

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

Software Engineering Klassendiagramme Assoziationen

WhiteStarUML Tutorial

Software Engineering Klassendiagramme Einführung

Vorkurs C++ Programmierung

Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit

Objektorientierte Programmierung

Programmieren in Java

Objektorientierte Programmierung

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

Objektorientierte Programmierung OOP

Software Engineering Interaktionsdiagramme

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

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Unified Modeling Language (UML)

Probeklausur Softwareengineering SS 15

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Assoziation und Aggregation

Einführung in die Java- Programmierung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

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

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

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

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Einführung in die Programmierung

Darstellung von Assoziationen

Einführung in die Programmierung für NF

Klassendiagramm. (class diagram)

Selbststudium OOP4 Auftrag

Software Engineering Klassendiagramme weiterführende Konzepte

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

4. AuD Tafelübung T-C3

Vgl. Oestereich Kap 2.7 Seiten

SEP 114. Design by Contract

Java Kurs für Anfänger Einheit 5 Methoden

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

Klausur Software Engineering für WI (EuI)

SWE5 Übungen zu Software-Engineering

Systemanalyse. - Folien zur Vorlesung für AI3 im Sommersemester Teil 4 -

Binärdarstellung von Fliesskommazahlen

Dr. Hanno Schauer Mons-Tabor-Gymnasium Montabaur. UML-Klassendiagramme als Werkzeug im Unterricht

3D Visualisierung von UML Umgebungsmodellen

Vorlesung "Software-Engineering"

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

3. Konzepte der objektorientierten Programmierung

RUP Analyse und Design: Überblick

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

Professionelle Seminare im Bereich MS-Office

Programmierkurs Java

BEISPIELKLAUSUR Softwareentwicklung:

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

Der lokale und verteilte Fall

Übungen zur Softwaretechnik

Große Übung Praktische Informatik 1

Prinzipien Objektorientierter Programmierung

Praktikum Software Engineering

PRÜFUNG FÜR ELEKTROINGENIEURE. Softwaretechnik I. Musterlösung SS Ohne Gewähr -

Java Einführung Packages

Java: Vererbung. Teil 3: super()

Objektbasierte Entwicklung

Analyse und Modellierung von Informationssystemen

Professionelle Seminare im Bereich MS-Office

Konzepte der Informatik

Mai Hauptseminar: Nichtrelationale Datenbanken Historisch-Kulturwissenschaftliche Informationsverarbeitung Universität zu Köln

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Analyse und Modellierung von Informationssystemen

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

Client-Server-Beziehungen

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

Allgemeines zu Datenbanken

Einführung in die Programmierung mit Java. Hörsaalübung

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Innere Klassen in Java

Einführung in die Java- Programmierung

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

Softwaretechnik (Allgemeine Informatik) Überblick

Anforderungen an die HIS

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

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem


Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Datenbanken I - Übung 1

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee Berlin Tel.:+49(0) Fax.:+49(0)

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Javakurs zu Informatik I. Henning Heitkötter

Java Virtual Machine (JVM) Bytecode

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

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

Grundlagen von Python

Übung 4. Musterlösungen

Die Weitsichtigkeit. Korrekturmöglichkeiten

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Von der UML nach C++

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

UML Klassendiagramm. Igor Karlinskiy, Mikhail Gavrish

Objektorientierte Programmierung. Kapitel 12: Interfaces

Kapitel 12 Dokumentation und Zugriffsrechte

Transkript:

Dominik 09.03.2009 Universität Ulm Gessenharter Inst. f. Programmiermethodik und Compilerbau Code-Erzeugung aus UML-Klassendiagrammen Theorie und Praxis

Seite 2 REConf 2009 München Dominik Gessenharter Dipl.-Inf. Institut für Programmiermethodik und Compilerbau James-Franck-Ring 89081 Ulm Germany Tel.: +49 731 50-24252 Fax.: +49 731 50-1224252 dominik.gessenharter@uni-ulm.de http://www.uni-ulm.de/in/pm/mitarbeiter/gessenharter.html

Seite 3 Code-Generierung - wozu? Abstraktion, Produktivität, Qualität, Wiederverwendbarkeit (Forschungsgegenstand an der Universität Ulm) Traceability von Anforderungen bis zum Code Warum dieser Vortrag? Code-Generierung ist theoretisch eine feine Sache, in der Praxis oft nicht befriedigend Was kann man tun?

Seite 4 Code-Generierung und RE Anforderungen bilden die Grundlage von Modellen Modelle bilden die Grundlage für Code Traceability von Anforderungen bis zum Code wünschenswert (vollständige Generierung aus UML Modellen kaum machbar) Bei Traceability von Anforderungen zum Modell kann Generator diese bis zum Code erweitern Bei korrektem Generator entspricht der Code den Anforderungen in gleicher Weise wie das Modell

Seite 5 Inhalt Grundlagen der UML Klassendiagramme Objektorientierte Programmierung Exkurs: Relationale Datenbanken Modellierung in der Praxis Code-Generierung in der Praxis Theorie: Was ist möglich? Zusammenfassung und Ausblick Diskussion

Seite 6 Grundlagen der UML Klassendiagramme

Seite 7 Grundlage der UML Klassendiagramme Klassen Attribute Operationen Verhalten Assoziationen Sichtbarkeit Navigierbarkeit Multiplizitäten Stelligkeit Besondere Assoziationen Aggregation und Komposition Reflexive Assoziationen Rollennamen Klassen und Assoziationen sind instantiierbar (Objekte und Links)

Seite 8 Objektorientierte Programmierung Klassen Attribute Methoden Referenzen Spezialfall eines Attributs Kein Konstrukt zur Darstellung einer Assoziation Klassen sind instantiierbar, Referenzen sind Attribute in Klassen

Seite 9 Exkurs: Relationale Datenbanken Entitäten Attribute Relationen Multiplizitäten Stelligkeit Datenbanksysteme erlauben die Definition der Integrität der Daten im Datenmodell Applikationen können keine inkonsistenten Daten speichern Datenintegrität wird an einer Stelle definiert Es herrscht Ordnung in der Datenbank

Seite 10 Ordnung im Arbeitsspeicher Konzepte der Datenbanken als Vorbild Fehler nicht beim Versuch, zu speichern, sondern beim Versuch, inkonsistenten Zustand im Speicher herzustellen Einhaltung aller im Modell formulierten Bedingungen durch Code erzwingen Bei Verstößen Fehler signalisieren Entwickler werden gezwungen, auf mögliche Fehler zu reagieren

Seite 11 Modellierung in der Praxis

Seite 12 Assoziationen mittels Referenzen A * a * b B A referenziert B public B b; B Referenziert A public A a; Allgemein: für o:a (o.b.size > 0) <=> o.b[i].a.contains(o) == true mit i b.size -1 Bei Multiplizitäten von jeweils 0..1 gilt: für e1:listelement (e1.next!= null) <=> e1.next.previous == e1 0..1 previous 0..1 next ListElement value:int Assoziationen sind symmetrisch

Seite 13 Assoziationen mittels Referenzen A * a * b B Symmetrie meistens nicht Bestandteil des generierten Codes Implementierung durch wechselseitige Aufrufe möglich Problem: Sichtbarkeit ggf. kein Aufruf auf Gegenseite möglich Spezialfall: Bei Navigierbarkeit in nur einer Richtung keine Rückreferenz nötig Aber: Multiplizitäten beachten Referenzen nur für einige Spezialfälle geeignet Referenzen nicht geeignet für mehrstellige Assoziationen

Seite 14 Assoziationen mit Multiplizitäten A 0..3 a * b B Obergrenzen als Länge eines Arrays Untergrenzen ohne Prüfung Die meisten Werkzeuge unterstützen Multiplizitäten nicht Mehrstellige Assoziationen Nicht, oder nur unzureichend unterstützt. Assoziationen als Komposition Nicht unterstützt Bei Java nicht ohne Weiteres möglich

Seite 15 Was ist möglich? Multiplizitäten sind implementierbar Auch bei Implementierung mittels Referenzen n-stellige Assoziationen sind implementierbar Kompositionen sind implementierbar

Seite 16 Assoziationen mit Multiplizitäten A 0..3 a * b B Obergrenzen leicht prüfbar Beim Erstellen neuer Links public class B{ private List<A> a; } public void adda(a a) throws Exception{ if (this.a.size() > 2) throw new Exception(); else this.a.add(a); }

Seite 17 Assoziationen mit Multiplizitäten A 1..3 a * b B Untergrenzen leicht prüfbar Beim Aufheben bestehender Links Bei der Erzeugung Parameter p 1,..., p n für Konstruktor von A Parameter q 1,..., q n für Konstruktor von B Konstruktoren für A: A(p 1,..., p n, q 1,..., q n ) {...; b = new B(q 1,..., q n, this); } A(p 1,..., p n, B b) Konstruktoren für B: B(q 1,..., q n, p 1,..., p n ) {...; a = new A(p 1,..., p n, this); } B(q 1,..., q n, A a) Verwendung von Factories ggf. sinnvoller A 1 a 1 b B

Seite 18 Assoziationen im Allgemeinen o..p b A_B n..m a 1 1 n..m o..p A a b B Implementierung der Assoziation als eigene Klasse Sichtbarkeit definiert die Möglichkeit des Zugriffs auf Instanzen der Implementierungsklasse (Links) Link-Objekt ermöglicht Zugriff nur auf Instanzen an navigierbaren Assoziationsenden Stelligkeit, Navigierbarkeit und Sichtbarkeit frei kombinierbar Entscheidend ist die Konsistenz der Referenzen auf Link-Objekte und Instanzen der an der Assoziation beteiligten Klassen

Seite 19 Modellierung mit binären Assoziationen

Seite 20 Exaktere Modellierung

Seite 21 Mehrstellige Assoziationen Link-Objekte können auf beliebig viele Instanzen verweisen Die Referenzen auf alle beteiligten Instanzen werden zentral in der Link-Instanz gehalten Kein Koordinationsaufwand Aufwand zur Erzeugung der Link-Objekte

Seite 22 Assoziationen Komposition Zwei Rollen: Das Ganze Bsp.: Buch Ein Teil Seite Wird das Ganze zerstört, werden auch die Teile zerstört Problem bei Sprachen mit Garbage Collection: Zerstörung nicht explizit möglich (da automatisiert) Effekt 1: Die Teile können die Lebenszeit des Ganzen bestimmen Wenn das Ganze nicht mehr referenziert wird, Teile aber schon und Teile Referenzen auf das Ganze halten Semantik der Komposition wird umgekehrt Effekt 2: Die Semantik der Komposition kann verloren gehen Wenn das Ganze nicht mehr referenziert wird, Teile aber schon und die Teile keine Referenzen auf das Ganze halten

Seite 23 Assoziationen Komposition Indirektion durch Implementierungsklasse Implementierungsklassen tauschen Informationen über Anzahl der Links aus A * a * b B 1 A * A_B * 1 B b a 1 1 A_C Keine Links mehr vorhanden Alle Links löschen B_D

Seite 24 Zusammenfassung Allgemein benötigen Assoziationen zur Laufzeit Instanzen In OO-Sprachen derzeit nur durch Klassen realisierbar Assoziationsklassen damit einfach realisierbar Vererbung bei Assoziationen realisierbar Auch bei Sprachen mit Garbage-Collection sind Kompositionen implementierbar Aufwand zur Erzeugung von Link-Objekten Symmetrie der Assoziation in Link-Objekten realisiert Keine wechselseitigen Aufrufe Freie Kombinierbarkeit der Konzepte der Assoziation

Seite 25 Ausblick Unsere Arbeit Implementierung eines Code-Generators mit voller Unterstützung von Assoziationen der UML 2.2 Messung des Potenzials der Code-Erzeugung Produktivität Qualität Modellierung und Code-Erzeugung Vermehrter Einsatz schwierig zu implementierender Konzepte Mehrstellige Assoziationen Vererbung bei Assoziationen Abstrakte Assoziationen Assoziationen zwischen Assoziationen Bessere Modelle Bessere Modellierer Echte Fortschritte im Bereich MDD...

Seite 26 Diskussion Vielen Dank für Ihre Aufmerksamkeit Ihr Feedback Ihre Fragen