Teil II: OOP und JAVA (Vorlesung 9) Modul: Programmierung B-PRG Grundlagen der Programmierung II Prof. Dot.-Ing. Roberto Zicari Professur für Datenbanken und Informationssysteme (FB 12) 14.06.06 1
Teil 4 - UML Klassendiagramme Zustandsdiagramme Sequenzdiagramme 2
Sichtweisen auf das System In UML können verschiedene Sichtweisen auf ein System anschaulich modelliert werden. Für den Anwender (bzw. Kunde) existiert das Anwendungsfalldiagramm. Das Klassendiagramm repräsentiert ein Model für den Code eines Systems und ist somit sehr hilfreich für den Programmierer. Aber es ist sehr technisch und deshalb nicht für alle Anwender geeignet. 3 Grundlagen der Programmierung II
Klassendiagramm Im folgenden Abschnitt werden die wichtigsten Elemente für die grundlegende Strukturmodellierung in UML vorgestellt. Insbesondere wird dabei auf die Begriffe Klasse (Class) und Beziehung (Relationship) eingegangen. 4 Grundlagen der Programmierung II
Klassen Klassen sind die wichtigsten Bestandteile eines Objektorientierten Systems. Eine Klasse ist die Beschreibung einer Menge von Objekten, die deren Attribute, Operationen, Beziehungen und semantischen Aspekte miteinander gemeinsam haben. 5 Grundlagen der Programmierung II
Klassen Grafisch wird eine Klasse als Rechteck dargestellt. Der Name einer Klasse muss dabei eindeutig sein. Klassenname Beispiele: Person Kunde Auto 6 Grundlagen der Programmierung II
Attribute Eine Klasse hat beliebig viele Attribute. Ein Attribut ist eine benannte Eigenschaft einer Klasse mit einem konkreten Wertebereich. Entsprechend wird jedem Attribut ein Typ und eventuell ein Anfangswert zugeordnet. Klassenname attribut1 : typ attribut2 : typ = wert 7 Grundlagen der Programmierung II
Operationen Eine Klasse hat beliebig viele Operationen ( Methoden). Eine Operation ist die Implementierung eines Dienstes, der von jedem Objekt der Klasse zur Verhaltensbeeinflussung aufgerufen werden kann. Eine Operation kann (max.) einen Rückgabewert und beliebig viele Parameter haben. Signatur Klassenname operation1() operation2(t : typ1) operation3(x : typ2) : typ3 8 Grundlagen der Programmierung II
Klassen mit Attributen und Operationen Beispiele: Person Kunde Auto name : String alter : int laufen() kundennr : int name : String adresse : String umsatz : float = 0 kmh : int beschleunigen() bremsen() telefonieren() umziehen() : String 9 Grundlagen der Programmierung II
Beziehungen Beim Erstellen von Abstraktionen sieht man, dass nur sehr wenige Klassen isoliert stehen. Die meisten Klassen arbeiten auf vielfältige Weise mit anderen Klassen zusammen. Bei der Modellierung von Systemen muss man daher nicht nur die einzelnen Klassen identifizieren aus denen es besteht, sondern auch modellieren, wie diese Elemente (Klassen) zusammenhängen. Zwei wichtige Arten von Beziehungen in der Objektorientierten Modellierung sind: Generalisierung und Assoziation. 10 Grundlagen der Programmierung II
Generalisierungen Eine Generalisierung ist eine Beziehung zwischen einer allgemeineren (Oberklasse) und einem spezialisierteren Element (Unterklasse) : Eine Unterklasse erbt alle Attribute und Operationen der Oberklasse, kann aber noch zusätzliche Attribute und Operationen haben. Ein Klasse ohne Oberklassen heißt Basisklasse. Bei einer Klasse mit mehreren Oberklassen spricht man von der Mehrfachvererbung. 11 Grundlagen der Programmierung II
Generalisierungen Grafisch wird die Generalisierung in UML als durchgezogener Pfeil mit einer großen offenen Spitze auf die Oberklasse dargestellt. Basisklasse Generalisierung Klasse1 attribut1: typ Oberklasse und Unterklasse Klasse2 attribut2: typ Klasse3 Klasse4 Unterklasse Klasse5 Klasse6 12 Grundlagen der Programmierung II
Generalisierungen Beispiele: Auto kmh: int Person name : String PKW Student matrikelnr : int Professor lehrstuhl : String 13 Grundlagen der Programmierung II
Assoziationen Eine Assoziation ist eine strukturelle Beziehung, die spezifiziert, dass Objekte eines Elements (Klasse) mit Objekten eines anderen Elements zusammen hängen: Man verwendet Assoziationen, um strukturelle Beziehungen darzustellen. Es sind binäre, n-äre und auch reflexive (auf sich selbst beziehende) Assoziationen möglich. 14 Grundlagen der Programmierung II
Assoziationen Grafisch wird eine Assoziation durch eine durchgezogene Linie zwischen den beteiligten Klassen repräsentiert. Klasse1 Klasse5 Klasse1 Klasse2 binäre Assoziation reflexive Assoziation Klasse3 Klasse4 n-äre Assoziation (n=3) 15 Grundlagen der Programmierung II
Assoziationen Eine Assoziation kann mit den folgenden (optionalen) Details versehen werden: Name (mit oder ohne Richtung) Rolle Multiplizität (Kardinalität) Aggregation Komposition 16 Grundlagen der Programmierung II
Assoziationen - Name Durch eine Assoziation mit Namen lässt sich die Natur einer Beziehung besser beschreiben. Um die Bedeutung zu spezifizieren, kann optional eine Namensrichtung angegeben werden. Beispiel: Name Namensrichtung Person arbeitet für Unternehmen 17 Grundlagen der Programmierung II
Assoziationen - Rolle Die an einer Assoziation beteiligten Klassen haben bestimme Rollen, die man explizit benennen kann, um deren Bedeutung genauer zu spezifizieren. Beispiel: Rollenname Rollenname Person Arbeitnehmer arbeitet für Arbeitgeber Unternehmen 18 Grundlagen der Programmierung II
Assoziationen - Multiplizität Mit der Multiplizität oder Kardinalität kann man zeigen, wie viele Objekte einer Klasse mit einem Objekt einer anderen Klasse in Beziehung stehen. Hierbei ist die Angabe einer einzelnen Zahl n oder eines Wertebereiches n..m (bzw. n..* ) möglich, wobei der * für eine beliebige Anzahl steht. In der grafischen Darstellung wird die Multiplizität direkt neben der zugehörigen Klasse notiert. 19 Grundlagen der Programmierung II
Assoziationen - Multiplizität Beispiel: Eine Person kann bei keiner oder mehreren Firmen beschäftigt sein. In einem Großunternehmen arbeiten mindestens 1000 Personen. Person 1000..* 0..n Großunternehmen Multiplizität Multiplizität 20 Grundlagen der Programmierung II
Assoziationen - Multiplizität Ein weiteres Beispiel: Ein Lehrer gibt beliebig viele Kurse, jeder Kurs wird aber nur von genau einem Lehrer geleitet. Ein Schüler besucht 5 bis 10 Kurse und jeder Kurs besteht aus 15 bis 30 Teilnehmern. Lehrer 1 leitet 0..* Kurs besucht 5..10 Schüler 15..30 21 Grundlagen der Programmierung II
Assoziationen - Aggregation Bei einer einfachen Assoziation sind die beteiligten Klassen gleichberechtigt. Manchmal möchte man aber eine hierarchische Beziehung zwischen einem Ganzen und seinen Teilen modellieren. Die Aggregation ist eine Sonderform der Assoziation. Sie realisiert eine hat-ein-beziehung und bedeutet, dass ein Objekt des Ganzen (mehrere) Objekte als Teile besitzt. 22 Grundlagen der Programmierung II
Assoziationen - Aggregation Grafisch wird eine Aggregation dargestellt, indem man die durchgezogene Linie der Assoziation an dem des Ganzen zugewandten Ende, mit einer Raute versieht. Klasse1 Ganzes Aggregation Klasse2 Teil 23 Grundlagen der Programmierung II
Assoziationen - Aggregation Beispiele: Rad 1 3..4 PKW 1 1 Motor Rad und Motor können alleine existieren Buch titel verlag 1 2..n Kapitel titel kapnr 1 1..n Abschnitt abschnittnr seitenzahl Ebenso Kaptitel und Abschnitt 24 Grundlagen der Programmierung II
Assoziationen - Komposition Die Komposition ist eine starke Form der Aggregation. Auch hier sprechen wir vom Ganzen und seinen Teilen. Im Unterschied zur Aggregation gilt zusätzlich: Jedes Teilobjekt kann nur Komponente eines einzigen Objekts der Aggregatklasse sein (Kardinalität =1). Wird das Ganze kopiert, so werden auch seine Teile kopiert. Wird das Ganze gelöscht, so werden auch seine Teile gelöscht. 25 Grundlagen der Programmierung II
Assoziationen - Komposition Eine Komposition wird grafisch dargestellt, indem man die durchgezogene Linie der Assoziation an dem des Ganzen zugewandten Ende, mit einer schwarz gefüllten Raute versieht. Klasse1 Ganzes 1 Komposition Klasse2 Teil 26 Grundlagen der Programmierung II
Assoziationen - Komposition Beispiel: Verzeichnis 1 * Datei Die Datei kann nicht ohne das Verzeichnis existieren 27 Grundlagen der Programmierung II
Überblick Beziehungen Grafisch werden die verschiedenen Beziehungen durch verschiedene Linienarten dargestellt: Generalisierung durchgezogener Pfeil mit offener Spitze Assoziation durchgezogene Linie Aggregation durchgezogene Linie mit Raute Komposition durchgezogene Linie mit gefüllter Raute 28 Grundlagen der Programmierung II
Beispiel Pfandmaschine Im Folgenden sollen am Beispiel eines Automaten zur Rückgabe von Pfandflaschen (Pfandmaschine), die bisher behandelten Diagrammtypen (Use Case, Class) von UML nochmals erklärt und weitere Diagrammtypen (State, Sequence) veranschaulicht werden. 29 Grundlagen der Programmierung II
Beispiel Pfandmaschine Grundlegende Funktionsweise: Leergut Kunde Geld oder Bon Pfandmaschine 30 Grundlagen der Programmierung II
Anwendungsfalldiagramm Beispiel Pfandmaschine: Akteur Beziehungen Akteur Pfandmaschine Kunde Anwendungsfall Technikerin 31 Grundlagen der Programmierung II
Klassendiagramm Beispiel Pfandmaschine: Pfandmaschine geld: int zahle(betrag: int) Vererbung Kardinalität Flaschen-Pfandmaschine anzflaschen: int nimm_flasche() 0...* 0,1 nimmt auf Assoziation mit Name Flasche groesse: float 32 Grundlagen der Programmierung II
Zustandsdiagramm Ein Zustandsdiagramm ist die graphische Darstellung eines Zustandsautomaten. Ein Zustandsautomat besteht aus Zuständen und Zustandsübergängen (Transitionen). Durch ein bestimmtes Ereignis wechselt das Objekt den Zustand. Oft wird der Zustandsautomat genutzt, um für eine bestimmte Klasse den Lebenszyklus ihrer Objekte zu beschreiben. Die Klasse vererbt ihren Automaten an ihre Unterklassen. 33 Grundlagen der Programmierung II
Zustandsdiagramm - Darstellung Grafisch wird ein Zustand durch ein abgerundetes Viereck, das den Namen enthält, dargestellt. Der Name sollte kein Verb sein. Die Transition wird durch einen Pfeil dargestellt, der zwei Zustände verbindet. Der Anfangszustand (initial state) wird durch einen kleinen schwarzen Kreis dargestellt. Der optionale Endzustand wird durch ein Bullauge (schwarzer Kreis in kleinem Kreis) dargestellt. 34 Grundlagen der Programmierung II
Zustandsdiagramm Initial state Final state Zustand1 Ereignis1 Zustand2 Zustand Transition 35 Grundlagen der Programmierung II
Zustandsdiagramm Beispiel Pfandmaschine: (START) (ZUSTAND) bereit Fehler aufgetreten (EREIGNIS) Flasche am Sensor Flasche abgearbeitet Fehler behoben Flasche aufnehmend Fehler aufgetreten (ÜBERGANG) (ENDE) Fehler nicht behebbar Fehler bearbeitend 36 Grundlagen der Programmierung II
Sequenzdiagramm Ein Sequenzdiagramm zeigt die Interaktionen zwischen Objekten in ihrer zeitlichen Reihenfolge. Grafisch ist ein Sequenzdiagramm eine Art Tabelle, welche die Objekte in horizontaler Richtung darstellt und die eingesetzten Nachrichten entlang der Vertikalen zeigt. 37 Grundlagen der Programmierung II
Sequenzdiagramm Objekte ZEIT Nachrichten 38 Grundlagen der Programmierung II
Sequenzdiagramm Die Objektlebenslinie stellt die Existenz eines Objekts während eines Zeitraums dar. Grafisch wird sie durch eine senkrechte gestrichelte Linie repräsentiert. Der Kontrollfokus zeigt den Zeitraum, in dem ein Objekt eine Aktion ausführt. Grafisch wird er durch ein langes schmales Rechteck auf der Lebenslinie gekennzeichnet. 39 Grundlagen der Programmierung II
Sequenzdiagramm Es gibt verschiedene Arten von Nachrichten: Bei der synchronen Nachricht wartet der Sender, bis die durch seinen Aufruf ausgelöste Teilaktion beendet ist. Die Rückgabenachricht zeigt an, dass die synchrone Nachricht ihre Operation beendet hat. Bei der asynchronen Nachricht wartet der Sender nicht auf eine Antwort. 40 Grundlagen der Programmierung II
Sequenzdiagramm Grafisch werden die verschiedenen Arten von Nachrichten wie folgt notiert: Synchrone Nachricht durchgezogener Pfeil mit geschlossener Spitze Rückgabenachricht gestrichelter Pfeil mit offener Spitze Asynchrone Nachricht durchgezogener Pfeil mit offener Spitze 41 Grundlagen der Programmierung II
Sequenzdiagramm Objekte Objekt2 Objekt1 Lebenslinien ZEIT Methode1() Kontrollfokus ACKNOWLEDGEMENT Kontrollfokus Nachrichten 42 Grundlagen der Programmierung II
Sequenzdiagramm Beispiel Pfandmaschine: Pfandmaschine Objekte Flaschenmechanik ZEIT aufnehmen(flasche) Flasche_aufgenommen Kontrollfokus Kontrollfokus Nachrichten Lebenslinien 43 Grundlagen der Programmierung II
Anwendungsfalldiagramm Hinzunahme der Bezahlung und Verfeinerung der Reservierung: Tourist Reservierung Zimmer buchen «include» bezahlen «include» Zimmer grundreinigen «include» Minibar auffüllen Receptionist Zimmer vermieten extension point: prüfe Zimmerzustand «include» Belegplan prüfen «extends» Putzkolone beauftragen «Vorbedingung» {Zimmer ungereinigt} Zimmer reinigen Putzkolonne Problem bei dieser Modellierung? 44 Grundlagen der Programmierung II
Fragen zur Modellierung Beispiel Reservierung: Problem: Receptionist kann die Putzkolonne nur während der Zimmer-Vermietung beauftragen. D.h. wenn es keine Gäste gibt bleiben die Zimmer für immer schmutzig. Beachten Sie: Wir haben jetzt einen Use Case Zimmer buchen für den Tourist und einen Use Case Zimmer vermieten für den Receptionist. 45 Grundlagen der Programmierung II
Sequenzdiagramm Beispiel: Zimmer-Reservierung Tourist Receptionist Hotelzimmer Zimmer_buchen Belegplan_ prüfen ZEIT Rechung_stellen (Preis) Geld Zimmer frei Schlüssel 46 Grundlagen der Programmierung II