2. Strukturdiagramme



Ähnliche Dokumente
Klassendiagramm. (class diagram)

Vorlesung "Software-Engineering"

UML Klassendiagramm. Igor Karlinskiy, Mikhail Gavrish

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

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

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

Software Engineering Klassendiagramme Einführung

Vorlesung Programmieren. Unified Modeling Language (UML) Unified Modeling Language (UML) Unified Modeling Language (UML)

Vorlesung Programmieren

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

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Software Engineering Klassendiagramme Assoziationen

4. AuD Tafelübung T-C3

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

EINFÜHRUNG IN DIE WIRTSCHAFTSINFORMATIK -ÜBUNGEN- Marina Tropmann-Frick

Unified Modeling Language (UML)

Programmieren in Java

Objektorientierte Programmierung

3 Objektorientierte Konzepte in Java

Vorkurs C++ Programmierung

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

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

Software Engineering Klassendiagramme weiterführende Konzepte

Assoziation und Aggregation

Objektorientierte Programmierung. Kapitel 12: Interfaces

SWE5 Übungen zu Software-Engineering

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

Prinzipien Objektorientierter Programmierung

Von der UML nach C++

3. Konzepte der objektorientierten Programmierung

Objektorientierte Programmierung OOP

Java: Vererbung. Teil 3: super()

Probeklausur Softwareengineering SS 15

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Objektorientierte Konzepte und Notation in UML. Objekt Klasse Attribut Operation

Vererbung & Schnittstellen in C#

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

Code-Erzeugung aus UML-Klassendiagrammen

Große Übung Praktische Informatik 1

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

Java Kurs für Anfänger Einheit 5 Methoden

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

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

WhiteStarUML Tutorial

Use Cases. Use Cases

Computeranwendung und Programmierung (CuP)

Einführung in die Java- Programmierung

Typumwandlungen bei Referenztypen

Objektorientierte Programmierung

SEP 114. Design by Contract

Datenbankmodelle 1. Das Entity-Relationship-Modell

Client-Server-Beziehungen

Java Einführung Abstrakte Klassen und Interfaces

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

HTML5. Wie funktioniert HTML5? Tags: Attribute:

Kapitel 3: Hörsaalbeispiel Klassendiagramm (Analysesicht)

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Klassenbeziehungen & Vererbung

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Kapitel 6. Vererbung

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Kapitel 6. Vererbung

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

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

Objektbasierte Entwicklung

5. Abstrakte Klassen

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

Programmierkurs Java

a) In der Aufgabenstellung war ein möglichst einfaches Klassendiagramm gefordert. Abb. 1 zeigt eine mögliche Lösung. * * * Aufbau 1..

SWT MN Vorlesung Übungsblatt Hausaufgaben und Hörsaalübungen zum Themenbereich UML-Modellierung mit Rollen und OOA-Muster

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

Kapitel 6. Vererbung

OO Softwareentwicklung

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

PRÜFUNG. Grundlagen der Softwaretechnik

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Algorithmen und Datenstrukturen 07

Factory Method (Virtual Constructor)

1.4 Attribute die objektorientierten Datenfelder

GI-Technologien zur Umsetzung der EU-Wasserrahmenrichtlinie (WRRL): Wissensbasen. Teil 1: Einführung: Wissensbasis und Ontologie.

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

3 Objektorientierte Konzepte in Java

Innere Klassen in Java

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Übung 1. Ziel: Statisches Modell (Klassendiagramm) aus allgemeiner Beschreibung erstellen.

Javakurs zu Informatik I. Henning Heitkötter

SEQUENZDIAGRAMM. Christoph Süsens

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Programmiersprachen und Übersetzer

Softwareentwicklungspraktikum Sommersemester Grobentwurf

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

1 Mathematische Grundlagen

Programmieren Tutorium

Kapitel 12 Dokumentation und Zugriffsrechte

Datenbankmodelle 1. Das Entity-Relationship-Modell. Prof. Dr. Bernhard Schiefer 2-1

Einführung in die Programmierung

Transkript:

2. Strukturdiagramme 2.1 Das Klassendiagramm Prof. Mario Jeckle Fachhochschule Furtwangen mario@ http://www. Fachhochschule Furtwangen, Sommersemester 2004

Titel Strukturdiagramme Klassendiagramm Kompositionsstrukturdiagramm Paketdiagramm Komponentendiagramm Aufbaustrukturmodellierung Ausprägungsmodellierung Interaktionsstrukturmodellierung Zusammenhangsstrukturmodellierung Einsatzstrukturmodellierung Objektdiagramm M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 Verteilungsdiagramm 2

Was ist das? Das Klassendiagramm wurde aus dem Object Model der Object Modeling Technique (OMT) entwickelt und dient: Der Darstellung der Struktur eines Systems Dem Aufzeigen von statischen Eigenschaften und Beziehungen Der Sammlung grundlegender Modellierungskonstrukte Ist Antwort auf die Frage Wie sind Daten und Verhalten meines Systems strukturiert? 3

Elemente Das Klassendiagramm besteht aus Elementen: Klassen Schnittstellen Attributen Operationen Assoziationen mit Sonderformen Aggregation und Komposition Generalisierungsbeziehungen Abhängigkeitsbeziehungen 4

abstrakte Klasse Rolle Elemente im Überblick Klasse Aggregation unterhält Feier +termin : Datum Klassenname Komposition Zutat +name : String abbrechen() besucht * Partyteilnehmer /betrunken : Boolean = false ~intus : Cocktail [1..*] #begeistert : Begeisterung #überdenkebegeisterung() ~trinke(in c : Cocktail) Schnittstelle Generalisierung 0..* isst {ordered «interface» Esser iss(in h : Häppchen; return satt:boolean) Häppchen mixt für 1 Cocktail Zutaten : Zutat [1..*] 1..* mixt Barmixer +mixe(in z : Zutat [1..*], out c:cocktail) feiere() Esser Gast Eigenschaftswert 1..* 1..* verabschiedet {unique empfängt {unique gerichtete Assoziation Attribut Gastgeber Esser treibt an hektisch : Boolean = true begrueße(in g : Gast) verabschiede (in g : Gast) treibean(in b : Barmixer) 1..1 Assoziation Multiplizität Operation «enumeration» Begeisterung ekstatisch verzückt neutral gelangweilt überdrüssig Stereotyp 5

Classifier Der Classifier ist zentraler Bestandteil des Klassendiagramms und anderer UML-Diagrammtypen: Zentraler Bestandteil der UML Abstraktion der Klasse Ist kein durch den Modellierer direkt nutzbares graphisches Konstrukt Kann einem anderen Classifier zugeordnet sein Ist die ordnende Instanz bei einer Reihe konkreter Ausprägungen Es existieren 27 Varianten 6

Classifier-Hierarchie Classifier DataType Signal Association Actor Class (from Kernel) Interface Information Item Behaviored Classifier Structured Classifier Primitive Type Enumeration Communication Path Association Class Behavior Artifact Class (from Communications) UseCase Collaboration Encapsulated Classifier Activity Interaction StateMachine Class (from StructuredClasses) ProtocolStateMachine Node Device ExecutionEnvironment 7

Anwendung Klassendiagramm Die Anwendung des Klassendiagramms im Projekt: Ist in allen Projektphasen möglich Das Klassendiagramm ist hier das wichtigste Diagramm Von ersten Analyseschritten bis zur Codierung von Softwaresystemen Das Klassendiagramm ist zwar ein vordefinierter Diagrammtyp, jedoch in seiner Anwendung in zwei Einsatzfälle einteilbar konzeptuell-analytisch logisch 8

Anwendung Konzeptuell analytische Modellierung: Ziel ist die korrekte Erfassung und Abbildung von vorgefundenen Zusammenhängen WICHTIG: grundlegende Wesenseinheiten und Zusammenhänge eines Systems UNWICHTIG: Technische Realisierungsdetails wie Attributdatentypen, technische Operationen, Schnittstellen 9

Anwendung Logische Modellierung: Ziel ist den Inhalt so zu erfassen, dass er alle Information für eine direkte Quellcode- Erstellung enthält, da konkrete Implementierungsvorschrift WICHTIG: Detailgenauigkeit (Voraussetzung der Quellcodeerzeugung) 10

Notation Im Klassendiagramm finden graphische Primitive Anwendung: Klassen Attribute Operationen Schnittstellen Parametrisierte Klassen Generalisierung Assoziationen Assoziationsklassen Kommentar Stereotype Eigenschaftswerte 11

Titel Klassendiagramm: Begriffe Klasse: beschreibt eine Menge von Instanzen die dieselben Eigenschaften, Einschränkungen und Semantik haben Objekt: Ausprägung ein oder mehrerer Klassen Attribut: Eigenschaften einer Klasse, die Charakteristika wie Auftretenshäufigkeit, Datentyp etc. beschreiben Wert: UML-Ausprägung als Wert eines Attributs oder Objektes Operation: Verhaltensmerkmal eines Classifiers, das Name, Typ, Parameter und Zusicherung für den Aufruf eines Verhaltens spezifiziert. Ähnlich einer Signatur in einer Programmiersprache M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 12

Titel Klassendiagramm: Begriffe Methode: Implementierung einer Operation Assoziation: beschreibt eine Menge von Tupeln von getypte Instanzen Link: Ausprägung einer Assoziation Sichtbarkeit: definiert, welche anderen Systemkomponenten den Wert eines Attributs lesen und schreiben bzw. eine Methode ausführen dürfen Assoziationsklasse: vereinigt Eigenschaften einer Klasse und einer Assoziation Multiplizität: Definition eines Intervalls der erlaubten Kardinalitäten eines Elements M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 13

Klassen Klassenname in Rechteck fett und mittig dargestellt Klassenname Zentrales Element Beschreibt Menge von Objekten mit gemeinsamen Werten Sichtbare Darstellung von Attributen und/oder Operationen Klassenname attribut operation () 14

Klassen Die Schachtelung von Klassen ist beliebig möglich Eingebettete Klasse: hat keine Außenbeziehung Party Buffet hier: Gabel nur Beziehung zu Buffet Gabel 15

Klassen Anzahl und Inhalt der Rechteckelemente NICHT beschränkt Operationen und Attribute können gruppiert und in eigenen Darstellungselementen untergebracht werden Partygast Partyteilnehmer trinken() zuprosten() verschütten() aufwischen() essen() insoßedippen() kauen() schlucken() name : String geburtsdatum : Date «Datenbank» database : String «Name» getname() : String setname(newname : String) «Geburtsdatum» getgeburtsdatum() : Date setgeburtsdatum(newgebdat : Date) «Persistenzoperationen» exporttoxml(filename : String) importfromxml(filename : String) writetodatabase() readfromdatabase() 16

Attribut Notationsmöglichkeiten: implizit Party Das Attribut linksbündig in Rechteckselement Termin explizit Party Termin Das Attribut als eigenständige assoziierte Klasse 17

Attribut Das Attribut wird durch einen klassenweit eineindeutigen Namen spezifiziert! Allgemeine Syntax der Attributdeklaration: Klasse Sichtbarkeit / name : Typ [Multiplizität] = Vorgabewert {Eigenschaft=Wert 18

Titel Attribut Jedes Attribut kann vorgabegemäß genau einen Wert aufnehmen Unterstützung fehlender Werte (Verwaltung von NULL-Werten) muss durch Multiplizität [0..] gefordert werden Für jedes Attribut wird Speicherplatz in der Klassenausprägung (d.h. im Objekt) vorgesehen. Ausnahmen hiervon sind statische Attribute, deren Wertbelegung in der Klasse selbst abgelegt wird. M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 19

Attribut Bedeutung der Komponenten: / = abgeleitetes Attribut. Muss nicht gespeichert werden, da es zur Laufzeit aus anderen Daten berechnet werden kann Name = Attributname, frei wählbar aus Zeichensatz Typ = Datentyp des Attributs Multiplizität = legt Unter- und Obergrenze der Anzahl der Ausprägungen fest, die unter einem Attributnamen abgelegt werden können 20

Attribut Zugelassene Attributspezifikationen sind: Attributdeklaration public zähler : int /alter private adressen: String [1 *] protected bruder: Person Umlaut erlaubt Anmerkung Datentyp nicht zwingend Menge von Strings Datentyp kann andere Klasse, Schnittstelle oder selbstdefinierter Typ sein 21

Attribut Nicht zugelassene Attributspezifikationen sind: Attributdeklaration Fehlerursache String private, public name: String public / int private dateiname: String= temp lock=exclusive Attributname fehlt Mehr als eine Sichtbarkeitsdefinition Attributname fehlt Eigenschaftswert nicht in { public int zähler Name und Typ vertauscht 22

Attribut Die UML sieht symbolische Schreibweisen für die Sichtbarkeit von Attributen und Operationen vor: public Jede andere Systemkomponente hat uneingeschränkten Zugriff private Nur Ausprägungen der das Attribut oder die Operation beherbergenden Klasse dürfen zugreifen protected Das Attribut, die Operation, ist nur in der definierenden und denjenigen Klassen sicht- und zugreifbar, die als Spezialisierungen von ihr definiert sind package Das Attribut, die Operation, ist für alle Klassen zugreifbar, die sich im selben Paket finden, wie die definierende Klasse 23

Attribut Die UML sieht symbolische Schreibweisen für die Sichtbarkeit von Attributen und Operationen vor: + public - private # protected ~ package Sichtbarkeitseinschränkungen können auch werkzeugspezifisch (d.h. unabhängig vom Standard) durch Symbole dargestellt werden: 24

Titel Attribut Umsetzungsbeispiele AttMix M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 att1 : int att6 : KlasseB [0..1] {composite att7 : String [0..*] {ordered / att8 public: att2 : int pi : double = 3.1415 private: att3 : boolean protected: att4 : short package: att5 : String = "Test" {readonly 25

Titel Attribut Umsetzung in C++ AttMix att1 : int att6 : KlasseB [0..1] {composite att7 : String [0..*] {sequence / att8 public: att2 : int pi : double = 3.1415 private: att3 : boolean protected: att4 : short package: att5 : String = "Test" {readonly M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 class class AttMix { int int att1; att1; KlasseB *att6; vector<string> att7; att7; public: int int att2; att2; static double pi; pi; static const const string att5; att5; private: bool bool att3; att3; protected: short short att4; att4; ; ; const const string AttMix::att5( Test ); double AttMix::pi=3.1415; 26

Titel Attribut Umsetzung in Java AttMix att1 : int att6 : KlasseB [0..1] {composite att7 : String [0..*] {sequence / att8 public: att2 : int pi : double = 3.1415 private: att3 : boolean protected: att4 : short package: att5 : String = "Test" {readonly class class AttMix { int int att1; att1; public int int att2; att2; public static double pi=3.1415; private boolean att3; att3; protected short short att4; att4; final final String att5 att5 = "Test"; KlasseB att6; att6; java.util.vector<string> att7; att7; M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 Object getatt8() { //Berechne Wert Wert für für att8 att8 return wert; wert; 27

Titel Attribut Umsetzung in C# AttMix att1 : int att6 : KlasseB [0..1] {composite att7 : String [0..*] {sequence / att8 public: att2 : int pi : double = 3.1415 private: att3 : boolean protected: att4 : short package: att5 : String = "Test" {readonly using using System; System; using using System.Collections.Specialized; System.Collections.Specialized; class class AttMix AttMix { { int int att1; att1; public public int int att2; att2; public public static static double double pi=3.1415; pi=3.1415; private private bool bool att3; att3; protected protected short short att4; att4; internal internal const const string string att5 att5 = = "Test"; "Test"; KlasseB KlasseB att6; att6; System.Collections.Specialized.StringCollection System.Collections.Specialized.StringCollection att7; att7; Object Object att8 att8 { { //Berechne //Berechne Wert Wert für für att8 att8 get{return get{return wert; wert; M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 28

Operation Operationen einer Klasse werden mindestens durch Namen und wahlfreie weitere Angaben dargestellt: Klasse Abstrakte Attributspezifikation Abstrakte Attributspezifikation: [Sichtbarkeit] Name (Parameterliste) : Rückgabetyp [{Eigenschaftswert] Parameterliste: [Übergaberichtung] Name : Typ [ [ Multiplizität ] ] [= Vorgabewert] [ { Eigenschaftswert ] 29

Operation Bedeutung der Komponenten: Sichtbarkeit = Regelt Sicht- und Zugreifbarkeit auf Methoden Name = Klassenweit eindeutige Benennung der Operation Parameter = Aufzählung verarbeiteter Parameter (Hierunter fallen: Übergabe und Rückgabeparameter) 30

Operation Übergaberichtung Name Typ Multiplizität Rückgabetyp Eigenschaftswert Parameter wird ausgelesen, schreibend verwendet oder gelesen, verarbeitet und neu geschrieben Operationsweit eindeutig Datentyp des Parameters Wie viele Inhalte umfasst der Parameter Datentyp oder Klasse, der nach Operationsausführung zurück geliefert wird Besondere Charakteristika des Attributs 31

Titel Operation Umsetzungsbeispiele M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 32

Titel Operation Umsetzung in C++ M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 class class OpMix OpMix { KlasseB KlasseB op4(vector<string> param3) param3) { //Implementierung return return wert; wert; public: public: static static void void op1() op1() { //Implementierung private: private: int int op2(const op2(const int int param1=5) param1=5) const const { //Implementierung return return wert; wert; protected: protected: void void op3(klassec* op3(klassec* param2) param2) { //Implementierung ; ; 33

Titel Operation Umsetzung in Java M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 public public class class OpMix OpMix { public public static static void void op1() op1() { //Implementierung private private int int op2(final op2(final int int param1) param1) { //Implementierung return return wert; wert; protected protected void void op3(klassec op3(klassec param3) param3) { //Implementierung KlasseB KlasseB op4(string op4(string param3[]) param3[]) { //Implementierung return return wert; wert; 34

Titel Operation Umsetzung in C# class class OpMix OpMix { public public static static void void op1() op1() { //Implementierung private private int int op21(int op21(int param1) param1) { //Implementierung return return wert; wert; private private int int op22(params op22(params object[] object[] list) list) { //Implementierung return return wert; wert; protected protected void void op3(ref op3(ref ClassC ClassC param3) param3) { //Implementierung internal internal int int op4(out op4(out StringCollection param3) param3) { //Implementierung return return wert; wert; M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 35

Stereotypen Kennzeichnung von benutzerspezifischer Terminologie oder Notation Klasse innerhalb des Metamodells, die andere Klassen durch Erweiterung näher spezifizieren kann Beispiele für UML-Standard-Stereotypen: auxiliary Klasse implementiert sekundäre Logik oder sekundären Kontrollfluss call besitzt Operationen oder Klassen mit Operationen auf die sich Assoziation bezieht derive Modellelemente werden voneinander abgeleitet und sind vom selben Typ 36

Schnittstelle Darstellung durch das Klassensymbol mit Zusatz «interface» Schnittstelle kann weitere Schnittstellen beinhalten spezialisieren generalisieren NICHT möglich: Implementationsbeziehung zwischen zwei Schnittstellen 37

Schnittstelle «interface» Schnittstellenname attribut operation() Klasse1 Klasse1 «interface» Schnittstellenname Schnittstellenname Klasse2 Klasse2 «use» «interface» Schnittstellenname Schnittstellenname Klasse1 Klasse2 Schnittstellenname 38

Schnittstelle Die Schnittstelle wird nicht instanziiert, sondern durch Classifier realisiert: Zeichnet Classifier mit Operationen öffentlichen Merkmalen Verpflichtungen aus Hierbei ist der Classifier konform zur Schnittstelle Classifier setzt Operationen in Methoden um Eine Schnittstelle kann von mehreren Classifiern umgesetzt werden Ein Classifier kann mehrere Schnittstellen umsetzen 39

Titel Schnittstelle Umsetzungsbeispiel «interface» Sortierbar Menge Liste Sortierbar M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 40

Titel Schnittstelle Umsetzung in C++ «interface» Sortierbar Menge Sortierbar class Liste class SortierteListe { int int sortierreihenfolge; public: virtual void void einfuegen(eintrag e)=0; e)=0; virtual void void loeschen(eintrag e)=0; e)=0; ; ; class class Datenbank : public SortierteListe { public: virtual void void einfuegen(eintrag e) e) { //... //... virtual void void loeschen(eintrag e) e) { //... //... ; ; M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 41

Titel Schnittstelle Umsetzung in Java «interface» Sortierbar Menge Sortierbar Liste interface SortierteListe { int int sortierreihenfolge=0; public void void einfügen(eintrag e); e); public void void löschen(eintrag e); e); class class Datenbank implements SortierteListe { public void void einfügen(eintrag e) e) { //... //... public void void löschen(eintrag e) e) { //... //... M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 42

Titel Schnittstelle Umsetzung in C# «interface» Sortierbar Menge Liste Sortierbar M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 interface SortierteListe { void void einfuegen(eintrag e); e); void void loeschen(eintrag e); e); class class Datenbank : SortierteListe { public void void einfuegen(eintrag e) e) { { public void void loeschen(eintrag e) e) { { 43

Parametrisierte Klasse Darstellung durch übliches Klassensymbol mit zusätzlicher Rechtecksbox mit Schablonenparameter der Klasse: Parametrisierte Klasse Parameterverwendung Liste eintrag : T [0..k] T, k : int Parameter Parameterbindung Klasse mit gebundenem Parameter «bind» <T->Gast, k->20> Gästebuch «bind» <T->Adresse, k->100> Telefonbuch 44

Parametrisierte Klasse Verwendung: Belegung der Schablonen-Parameter mit konkreten Werten (Schablone (ein Muster, engl. Template) der Funktion, aus der beliebig viele strukturell identische Implementierungen erzeugen werden können.) Vorsehen von Spezifikationslücken zur Auffüllung durch Bindungsprozess Wenn Attribut- oder Operationstyp bis zur Laufzeit offen gehalten werden sollen Allgemeine Fassung parametrisierter Strukturen, um Verwendung für viele verschiedene Inhaltstypen zu gewährleisten 45

Titel Parametrisierte Klasse Umsetzung in C++ Liste T, k : int eintrag : T [0..k] «bind» <T->Gast, k->20> Gästebuch «bind» <T->Adresse, k->100> Telefonbuch template <class T, T, int int k> k> class class Liste Liste { T elements[k]; ; ;...... Liste<Gast,20> Gaestebuch; Liste<Adresse,100> Telefonbuch; M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 46

Titel Parametrisierte Klasse Umsetzung in Java Liste T, k : int eintrag : T [0..k] «bind» <T->Gast, k->20> Gästebuch «bind» <T->Adresse, k->100> Telefonbuch class class Liste<T> { Vector<T> elements; public Liste(int k) k) { elements = new new Vector<T>(k);...... Liste<Gast> Gästebuch=new Liste<Gast>(20); Liste<Adresse> Telefonbuch Liste<Adresse>(100); M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 47

Titel Parametrisierte Klasse Umsetzung in C# Liste T, k : int eintrag : T [0..k] «bind» <T->Gast, k->20> Gästebuch «bind» <T->Adresse, k->100> Telefonbuch class class Liste<T> { T[] T[] eintrag; public Liste(int k) k) { eintrag = new new T[k]; T[k];...... Liste<Gast> Gästebuch=new Liste<Gast>(20); Liste<Adresse> Telefonbuch=new Liste<Adresse>(100); M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 48

Generalisierung Darstellung durch gerichtete Kante mit leerer Spitze am Pfeilende Semantik ist unabhängig von konkreter Implementierungssprache definiert, berücksichtigt jedoch zentrale Gesichtspunkte Vererbung Substitution T S 49

Generalisierung Diamantförmige Generalisierung Syntaktisch möglich In verschiedenen Programmersprachen problematisch In einigen Programmiersprachen nicht umsetzbar Person Partyteilnehmer Partyveranstalter Gastgeber 50

Generalisierung Kovariante Vererbung Kontravariante Substitution Generalisierung Gast -promillespiegel: double {<2.3 Autofahrer +promillespiegel: float {<0.3 51

Titel Generalisierung 1988: Liskovsches Substitutionsprinzip (Liskov Substitution Principle, LSP) [ ] substitution property: If for each object o 1 of type S there is an object of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o 1 is substituted for o 2 then S is a subtype of T. T M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 S 52

Titel Generalisierung LSP bedeutet verdeutlicht des Zusammenhang zwischen Vererbung und Substitution: Forderung an alle Unterklassen (S) einer Klasse(T) dieselbe Semantik für eine Schnittstelle anzubieten Sicherstellung, dass sich Programm bei Verwendung einer Schnittstelle gleich verhält, egal ob Instanz einer Klasse oder der Unterklasse verwendet wird Besonders wichtig bei Redefinition von Methoden M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 53

Generalisierung Generalisierungsbeziehung zwischen Classifiern: ist möglich an allen Classifiern nicht auf Klassen beschränkt auch Partition genannt 54

Separat genutzte Generalisierung Generalisierung Partyteilnehmer /betrunken : Boolean = false ~intus : Cocktail [1..*] #begeistert : Begeisterung #überdenkebegeisterung() ~trinke(in c : Cocktail) Superklasse +budget : Euro Partyveranstalter +begleicherechnung(betrag : Euro) Generalisierung Sub- und Superklasse Generalisierungsmenge Generalisierungseigenschaften feiere() Gast Teilnehmerstatus {complete, disjoint begrüßt Gemeinsam genutzte Generalisierung Gastgeber hektisch : Boolean = true begrüße(in g : Gast) verabschiede (in g : Gast) treibean(in b : Barmixer) Partition Partyneuling Stammgast +vorstellen(g : Gast) +selbstbedienungamkühlschrank(c : Cocktail) 55

Generalisierung Generalisierungseigenschaften: in UML durch vier Schlüsselworte dargestellt complete Vereinigung aller Partitionen enthält alle sinnvollen Spezialisierungen eines Typs incomplete notierte Subtypen beinhalten nicht alle sinnvollen Spezialisierungen eines Supertypen disjoint Subtypen können nicht die selbe Instanz enthalten overlapping Subtypen können selbe Instanz enthalten 56

Generalisierung Nutzen der Generalisierung: Codeabstraktion Wiederverwendung Hierarchische Strukturierung des Entwurfs Einsatz bei Implementierungsvererbung und Substituierbarkeit Vermeidung von Coderedundanz 57

Assoziation Assoziation = Menge semantisch gleichartiger Beziehungen zwischen Classifiern Assoziationsname Assoziation 1 Einschränkung binäre Assoziation Assoziation 1 {... Klasse 1 nicht navigierbares Assoziationsende Navigationsrichtung Klasse 2 Komposition unspezifizierte Navigationsrichtung Rolle 1..* Aggregation Rolle {Eigenschaft 1..* Klasse 3 Rolle 1..* Assoziation 2 Eigenschaft n-äre Assoziation (ternäre Assoziation) Multiplizität 58

Assoziation Ausprägung einer Assoziation ist eine Beziehungsinstanz (Link) Verschiedene Ausprägungen: Binäre / zweiwertige Assoziation: hat zwei Enden n-äre / höherwertige Assoziation: mehr als zwei Enden Zirkulär-reflexive Assoziation: kehrt Ausgangsclassifier zurück Abgeleitete Assoziation: gekennzeichnet durch / und kann aus anderen Zusammenhängen abgeleitet werden 59

Assoziation Qualifizierte Assoziation: Herabsetzen der Multiplizität Aufteilung der Assoziationsmenge Vollständig Überlappungsfrei Jedes referenzierte Objekt ist nur genau einer Partition zugeordnet Kein Objekt wird bei Zuordnung übergangen ABER: Kann nur für binäre Assoziationen verwendet werden Sollte als navigierbar spezifiziert sein 60

Titel Assoziation Person Name Lieblingscocktail 1 Gast Getränkekonsum 1..* Cocktail Alkoholgehalt Diätgeeignet modifiziert Person Name Lieblingscocktail 1 Gast Getränkekonsum übernommen 1 Name Cocktail Alkoholgehalt Diätgeeignet Die beiden Diagramme sind nicht äquivalent M. Jeckle: Titel. Fachhochschule Furtwangen, Sommersemester 2004 61

Assoziationsklasse Stellt Abhängigkeitsbeziehung dar Klasse1 1..* Assoziationsname 1..* Klasse2 Assoziationsname attribut: Typ operation() 62

Kommentar Kommentar annotiert eine Klasse und wird mit Eselsohr gekennzeichnet: Klasse1 «Abhängigkeitsname» Klasse2 Klasse3 Klasse5 Klasse4 Klasse6 Kommentar zur Abhängigkeitsbeziehung 63

Eigenschaftswerte Spezifizieren Charakteristika der Elemente Werden durch { gekennzeichnet und durch Kommata getrennt abstract Classifier ist nicht instanziierbar derived Ein Element ist von einem anderen abgeleitet ordered Eine Menge von Elementen ist geordnet 64