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(); };