Kontrollfragen

  1. Was beschreibt eine Assoziation in der OOM?
  2. Wir wird eine Assoziation in UML-Klassen- und UML-Objekt-Diagrammen dargestellt?
  3. Was versteht man unter Multiplizität (Kardinalität)?
  4. Wie werden Assoziationen in Java umgesetzt?
  5. Worin unterscheiden sich Assoziationen und Aggregationen im UML-Diagramm und ihrer Umsetzung in Java?

Aufgabe 0 (Buch – Autor)

In einer ersten Aufgabe sollen Bücher mit ihren Autoren betrachtet werden.

Modellieren Sie eine Klasse Buch mit den Attributen Titel, ISBN und Preis. Ein Buch wird mit seiner ISBN und seinem Titel erzeugt. Alle Attribute sollen gelesen werden können, nur der Preis soll geändert werden können. Die Klasse besitzt eine Methode toString, welche die Buchdaten zurückgibt.

Die Klasse Autor wird durch die Attribute Name, Synonym und Gage gekennzeichnet. Ein Autor wird mit seinem Namen erzeugt, Alle Attribute können gelesen werden, Synonym und Gage können auch gesetzt werden. Die Klasse Auto besitzt eine Methode toString, welche die Daten des Autors zurückgibt.

Zu jedem Buch soll ein Autor gespeichert werden.

  1. Modellieren Sie ein UML-Klassendiagramm der Klassen Buch und Autor mit deren Beziehung.
  2. Beschreiben Sie, wie der Autor in der Klasse Buch durch Attribute und Methoden eingebunden wird.
  3. Implementieren Sie die Klassen Buch und Autor in Java.
  4. Implementieren Sie ein Java-Programm AppBuch, welches drei Bücher mit ihren Autoren erzeugt und über die Methode toString die Daten ausgibt.

Aufgabe 1 (Buch – Bibliothek)

Geben Sie eine einfache Klasse Buch an, mit der ein Buch für eine Bibliothek erfasst werden kann. Jedes Buch wird durch eine ISBN-Nummer, einen Titel und den Autor beschrieben, zusätzlich soll der Standort (z. B.: BEL-23-12) gespeichert werden. Folgende Operationen sollen möglich sein:

  • Erzeugen einer Instanz (eines Objektes) unter Angabe der ISBN-Nummer, des Titels und des Autors,
  • Setzen und Abfragen des Standorts jeder einzelnen Instanz und
  • Ausgabe von Titel und Autor einer Instanz in einer Methode toString()
  1. Geben Sie ein geeignetes UML-Klassendiagramm für die Klasse Buch. an.
  2. Implementieren Sie eine Klasse Buch, die die beschriebenen Eigenschaften besitzt.
  3. Von einer Konsolenanwendung AppBuch aus soll das Buch „Per Anhalter durch die Galaxis“ von Douglas Adams erfasst werden (ISBN: 3453209613). Dieses Buch wird dann an den Standort SY-12-34 gestellt. Danach sollen die Daten des Buches ausgegeben werden.

In der Bibliothek sollen nun bis zu 1000 Bücher erfasst werden.

  1. Ergänzen Sie das UML-Diagramm von oben mit einer Klasse Bibliothek (Attribute: Name, Adresse) und einer notwendigen Beziehung dieser neuen Klasse zur Klasse Buch.
  2. Geben Sie im UML-Diagramm auch die Beziehung zwischen den Klassen an.
  3. Implementieren Sie Klasse Bibliothek, insbesondere die drei Methoden zur Verwaltung des Feldes der Bücher.
  4. Von einer Konsolenanwendung AppBibliothek aus sollen …
    1. drei Bücher hinzugefügt werden,
    2. eines der eingefügten Bücher gelöscht werden und
    3. wieder zwei hinzugefügt werden
    4. (nach jeder Aktion soll die Bücherliste ausgegeben werden)

Aufgabe 2

Modellieren Sie die folgenden Situationen als Klassendiagramm. Geben Sie auch die Multiplizitäten an:

  1. Zwischen einem Musiker und einem Musik-Label besteht in der Regel eine Verbindung, die als „Vertrag“ bezeichnet wird. Musiker können bei einem oder auch keinem Label unter Vertrag stehen.
  2. Ein Zug besteht aus genau 4 Waggons und einer Lok, wobei Waggons und Loks auch ohne Zug existieren können.
  3. In einem Buch gibt es Seiten, Absätze und Wörter. Die Absätze können dabei über mehrere Seiten gehen. Auch ein allein stehendes Wort bildet schon einen Absatz. Jede Seite kann herausgerissen werden. Wenn das Buch verbrennt, verbrennen auch alle seine Seiten.
  4. Eine Bank hat viele Kunden. Jeder Kunde besitzt einen Namen und kann über mehrere Konten verfügen. Zu jedem Konto gehören eine Kontonummer, der Kontostand und die vielen, mit dem Konto verbundenen Einzahlungen und Auszahlungen. Ein- und Auszahlungen bestehen jeweils aus einem Betrag und einem Datum.

Aufgabe 3 (Konto)

Für eine Bank sollen die Konten der Kunden verwaltet werden. Ausgangspunkt hierfür ist die Aufgabe Konto.

  1. Stellen Sie ein geeignetes Pflichtenheft für Konten, Kunden und deren Beziehungen auf.
  2. Modellieren Sie ein entsprechendes UML-Klassendiagramm.
  3. Implementieren Sie die Klassen mit ihren Beziehungen.
  4. Testen Sie die Klassen, indem Sie eine AppBank implementieren, in der Kunden mit ihren Konten angelegt werden und Kontobewegungen simuliert werden.

Aufgabe 4 (Waschanlage)

Vor einer Autowaschanlage der Tankstelle „OSSE“ gibt es regelmäßig eine Schlange an Autos, die gewaschen werden sollen. Die bekannte Firma ProfiSoft soll nun ein Programm entwickeln, welches diese Warteschlange verwaltet. Aus Erfahrungsgründen (und aus Platzgründen) sind nie mehr als 10 Autos in dieser Schlange. Natürlich soll sich ein neu hinzukommendes Auto am Ende der Schlange anstellen (solange noch Platz ist), außerdem sollen alle wartende Autos aufrücken, wenn das an erster Stelle stehende Auto in die Anlage einfahren darf, Autos können natürlich jederzeit die Schlange verlassen und wieder „nach Hause“ fahren.

  1. Stellen Sie zu dem gegebenen Problem ein (geeignetes) Pflichtenheft auf. Suchen Sie sich dafür notwendige und sinnvolle Eigenschaften für die Klasse Auto
  2. Modellieren Sie eine geeignete Klasse Auto.
  3. Modellieren Sie eine geeignete Klasse Warteschlange. (Verwenden Sie zum Verwalten der gewünschten Anzahl an Autos eine geeignete Datenstruktur.)
  4. Testen Sie ihren Entwurf mit Hilfe des Java-Editors.
  5. Modellieren und Implementieren Sie eine Klasse WarteschlangeGUI, die für das gegebene Problem ein Java-Programm als Lösung anbietet.

Aufgabe 5 (Zahnarzt)

Die Firma ProfiSoft erhält den Auftrag, ein Programm zur Verwaltung einer Zahnarztpraxis zu entwickeln. Das vom Auftraggeber vorgegebene Pflichtenheft sieht folgendermaßen aus:

  1. Über jeden Kassen-Patienten sind folgende Daten zu speichern: Patienten-Nr., Patientenname, Adresse, Geburtsdatum, Versichertenname, Versicherten-Karte vorgelegt (ja, nein).
  2. Jeder Kassen-Patient gehört zu genau einer Krankenkasse.
  3. Jede Krankenkasse kann mehr als einen Kassen-Patienten haben.
  4. Über jede Krankenkasse sind folgende Daten zu speichern: Kassennummer, Kassenname.
  5. Wird ein neuer (Kassen-)Patient angelegt, dann sind die Patienten-Nr. und der Patientenname einzutragen.
    1. Gleichzeitig ist der neue Patient einer Krankenkasse zuzuordnen.
      1. Variante I: es gibt nur eine Krankenkasse (wurde vorher angelegt)
      2. Variante II: es gibt mehrere Krankenkassen (wurden vorher angelegt)
      3. Variante III: es wird überprüft, ob die angegebene Krankenkasse schon vorhanden ist; evtl. muss sie neu angelegt werden
  6. Der Versichertenname ist mit dem Patientennamen beim Erzeugen vorzubelegen. „Versicherten-Karte vorgelegt“ ist mit „ja“ zu initialisieren.

Erstellen Sie entsprechend dem Pflichtenheft ein Klassendiagramm in UML-Notation zuerst auf Papier, dann im Java-Editor. Testen Sie die Klassen mit geeigneten Beispieldaten.

Implementieren Sie das Klassendiagramm in einem lauffähigen Java-Programm. Testen Sie die Klassen in einer geeigneten App; zunächst nur zwei Patienten und zwei Kassen. Geben Sie die Informationen über geeignete Methoden aus.


Aufgabe 6 (Mietwagen)

Eine Firma verleiht Mietwagen an ihre Kunden, dabei wird zwischen Privat- und Firmenkunden unterschieden. Um dies zu verwalten benötigt die Firma ein Programm, welches Kunden, Autos und entsprechende Mietverträge verwalten kann.

  1. Erstellen Sie ein geeignetes Pflichtenheft.
  2. Geben Sie ein UML-Diagramm an und überführen Sie dieses in den Java-Editor.
  3. Testen Sie die erzeugten Klassen im Klasseneditor.
  4. Schreiben Sie eine geeignete GUI für das Problem. (Im Grunde sind hier mehrere GUI-Klassen notwendig …)