UML Klassendiagramm - Dr. Stefan Enderle

Transcrição

UML Klassendiagramm - Dr. Stefan Enderle
Programmiersprache 2
(C++)
Prof. Dr. Stefan Enderle
NTA Isny
3. UML Klassendiagramm
Nachtrag
3.1 Einführung UML
• UML ist eine standardisierte „Sprache“ zur
Modellierung von Systemen.
• In UML werden graphische Diagramme
vorgeschlagen
• Beispiele folgen ...
UML Anwendungsfalldiagramm
engl.: Use-Case Diagram
Anwendungsfalldiagramm
Analysemodelldiagramm
• Beispiel: Lift-Steuerung
• Keine einzelnen Objekte, sondern Klassen!
Analyseprototyp
• Beispiel:
Sequenzdiagramm
Zustandsdiagramm
• Zustandsübergänge
• Pfeile mit offenen Spitzen
• Beschriftung mit Ereignis, das zu dem Übergang
führt
• Anfangs- und Endzustand
3.2 UML Klassendiagramm
• 1. Aus Sicht des Analytikers:
• Einfachster Fall: Nur Klassenname
Aufführungssaal
UML Klassendiagramm
• Attribute:
– „Gedächtnis“ eines Objektes
– Eigenschaften
– Alle Attribute-Werte zusammen: Zustand
– Attribute, die z.B. in einer Datenbank gespeichert
werden, um das Objekt später zu rekonstruieren,
heißen persistent.
UML Klassendiagramm
• Attribute:
– „Gedächtnis“ eines Objektes
– Eigenschaften
– Alle Attribute-Werte zusammen: Zustand
Person
Aufführungssaal
Name
Geschlecht
Haarfarbe
Augenfarbe
Alter
Ort
Bezeichnung
Art
Anzahl_Plätze
Kosten_pro_Tag
– Attribute, die z.B. in einer Datenbank gespeichert
werden, um das Objekt später zu rekonstruieren,
heißen persistent.
UML Klassendiagramm
• Methoden:
– Fähigkeiten einer Klasse
– Unterscheidungsmöglichkeit:
• Konstruktoren und Destruktoren
• Speichern und Laden von Objektzuständen
• Attribute oder Gesamtzustand ändern
• Attribute oder Gesamtzustand auslesen
• Berechnung ausführen, basierend auf aktuellem
Zustand
UML Klassendiagramm
• Methoden
Person
Aufführungssaal
Name
Geschlecht
Haarfarbe
Augenfarbe
Alter
Ort
Bezeichnung
Art
Anzahl_Plätze
Kosten_pro_Tag
definieren
suchen
definieren
suchen
Alter_festlegen
Haarfarbe_ändern
löschen
laden
speichern
UML Klassendiagramm
• Zusammenfassung: Detailgrade
– Nur Klassenname
– Klassenname und Attribute
– Klassenname, Attribute und Methoden
Aufführungssaal
Aufführungssaal
Aufführungssaal
Ort
Bezeichnung
Art
Anzahl_Plätze
Kosten_pro_Tag
Ort
Bezeichnung
Art
Anzahl_Plätze
Kosten_pro_Tag
definieren
suchen
Erweiterungen
• 2. Aus Sicht des Designers:
• Sichtbarkeit der Attribute:
Angaben durch Zeichen vor dem Attributnamen:
– „+“ = public: Systemweiter Zugriff
– „-“ = protected: Zugriff nur durch Instanzen der Klasse
– „#“ = protected: Instanzen der Klasse und Unterklassen
– unterstrichen = class-scope (static):
Systemweiter Zugriff ohne Instanz (Eigenschaft der Klasse)
Fenster
Standardgröße
+aktuelleGröße
-tags
#owner
Erweiterungen
• Typen der Attribute:
Angabe des Typs nach „:“ hinter dem Attributnamen:
Fenster
Standardgröße: Rechteck
+aktuelleGröße: Rechteck
-tags: byte
#owner: Fenster*
Erweiterungen
• Initialisierung der Attribute:
Initialisierungswerte werden nach „=“ hinter dem Typ
angegeben:
Fenster
Standardgröße: Rechteck = (200,100)
+aktuelleGröße: Rechteck
-tags: byte = 128
#owner: Fenster* = NULL
Erweiterungen
• Sichtbarkeit der Methoden:
Angabe von +, -, #, _ wir bei Attributen:
Fenster
Standardgröße: Rechteck = (200,100)
+aktuelleGröße: Rechteck
-tags: byte = 128
#owner: Fenster* = NULL
-zeigeFenster
+öffnen
+anzKinder
#minimiereAlleKinder
Erweiterungen
• Typen der Parameter und Rückgabewerte von
Methoden:
Wie bei Attributen: Name „:“ Typ:
Fenster
Standardgröße: Rechteck = (200,100)
+aktuelleGröße: Rechteck
-tags: byte = 128
#owner: Fenster* = NULL
-zeigeFenster()
+öffnen(owner:Fenster*):boolean
+anzKinder():int
#minimiereAlleKinder()
Klassendiagramm → C++
class Person
{
Person
private:
string name;
-Name: string
-Alter: int
int alter;
public:
Person();
+definieren(name:string,
alter:int)
+laden()
+speichern()
void definieren(string n,
int a);
void laden();
void speichern();
};
Klassendiagramm → C++
• Vererbungsbeziehung:
Wenn es auf Attribute und Methoden nicht ankommt:
Ticket
{abstract}
Platz-Ticket
Zähl-Ticket
Vererbung
• Vererbung:
In Klassen kann es inhaltliche Übereinstimmung geben:
– Attribute können gleich sein
(Typ und Wert)
– Methoden können gleich sein
(Parameter, Rückgabewert, Code)
• Wenn es „genügend“ Übereinstimmungen gibt, dann
können
diese über die Vererbungsbeziehung verbunden werden:
Generalisierung / Spezialisierung (GenSpec)
Vererbung
• Generalisierung / Spezialisierung (GenSpec):
Platz-Ticket
Zähl-Ticket
Veranstaltung
Aufführungssaal
Datum
Platz
Veranstaltung
Aufführungssaal
Datum
Anzahl_Plätze
verkaufen
Platz_zuweisen
Platz_ändern
stornieren
suchen
verkaufen
Anzahl_zuweisen
Anzahl_ändern
stornieren
suchen
Vererbung
• Generalisierung / Spezialisierung (GenSpec):
Ticket
Veranstaltung
Aufführungssaal
Datum
Platz-Ticket
verkaufen
stornieren
suchen
Zähl-Ticket
Platz
Anzahl_Plätze
Platz_zuweisen
Platz_ändern
Anzahl_zuweisen
Anzahl_ändern
Bem: Pfeile leer!
Vererbung
• Abstrakte Oberklasse:
Von der Oberklasse Ticket kann kein Objekt erzeugt
werden
Ticket
→ { abstract }
{abstract}
Veranstaltung
Aufführungssaal
Datum
Platz-Ticket
verkaufen
stornieren
suchen
Zähl-Ticket
Platz
Anzahl_Plätze
Platz_zuweisen
Platz_ändern
Anzahl_zuweisen
Anzahl_ändern
Vererbung
• Vererbungsbeziehung:
Wenn es auf Attribute und Methoden nicht ankommt:
Ticket
{abstract}
Platz-Ticket
Zähl-Ticket
Vererbung → C++
Person
class Person
{
};
Angestellter
-Bereich: string
-Leitung: bool
+versetzen(bereich:string)
+istLeiter():bool
class Angestellter : public Person
{
private:
string bereich;
bool leitung;
public:
Angestellter();
void versetzen(string b);
bool istLeiter();
};