Übungen
Aufgabe 1: Objekte mit Beziehungen erzeugen
Beschreibe die vorgegebenen "Bankwelten" zunächst mit einem Objektdiagramm. Benutze anschließend die Klassen aus Abschnitt Exkurs - Implementierung von Beziehungen in Python, um die "Bankwelten" zu erzeugen.
(a) Erzeuge Objekte für eine "Bankwelt", in der jeder Kunde Zugriff auf genau ein Konto hat:
- Das Konto mit der Nummer 23 hat den Inhaber Werner Schmidt. Kunde Werner Schmidt hat Zugriff auf das Konto mit der Nummer 23.
- Das Konto mit der Nummer 42 hat den Inhaber Theresa Meier. Kundin Theresa Meier hat Zugriff auf das Konto mit der Nummer 42.
(b) Erzeuge Objekte für eine "Bankwelt", in der jeder Kunde Zugriff auf ein Erstkonto und ggf. ein Zweitkonto hat:
- Kunde Werner Schmidt hat Zugriff auf das Konto mit der Nummer 23 und das Konto mit der Nummer 16.
- Kundin Theresa Meier hat Zugriff auf das Konto mit der Nummer 42.
(c) Erzeuge Objekte für eine "Bankwelt", in der jeder Kunde Zugriff auf beliebig viele Konten hat:
- Kunde Werner Schmidt hat Zugriff auf das Konto mit der Nummer 23.
- Kundin Theresa Meier hat Zugriff auf das Konto mit der Nummer 42, auf das Konto mit der Nummer 60 und das Konto mit der Nummer 91.
Aufgabe 2: Beziehungstypen implementieren
In der freien Enzyklopädie Wikipedia werden Artikel zu Stichwörtern von Benutzern verfasst.
Eine erste Modellierung der Klassen Artikel
und Benutzer
könnte
wie folgt aussehen:
(a) Implementiere die Klassen und erzeuge Objekte zur Beschreibung folgender Situation:
- Der Artikel zum Stichwort
HTML
wurde vom Benutzerhelmut03
verfasst. - Der Artikel zum Stichwort
CSS
wurde vom Benutzerloreley
verfasst. - Der Artikel zum Stichwort
Barrierefreiheit
wurde vom Benutzerloreley
verfasst.
(b) Das Modell soll so erweitert werden, dass Artikel von Benutzern überarbeitet werden können:
Implementiere das erweiterte Modell und erzeuge eine typische Objektsituation. Verdeutliche die erzeugte Objektsituation auch mit einem Objektdiagramm.
(c) Wie müsste man die Klasse Benutzer
erweitern, wenn hier auch die Mitarbeit an Artikeln
mit einem Referenzattribut erfasst werden soll?
Aufgabe 3: Klassen mit Beziehungen konzipieren und implementieren
Ein Geometrieprogramm soll verschiedene geometrische Objekte verwalten: Punkte, n-Ecke und Figuren, die aus n-Ecken zusammengesetzt sind.
Ein Punkt wird dabei über zwei Koordinaten festgelegt. Ein n-Eck besteht aus n Punkten. Eine Figur besteht aus mehreren (mindestens einem) n-Ecken.
Alle diese Objekte kann man in x- und y-Richtung verschieben.
(a) Konzipiere und implementiere Klassen zu den genannten geometrischen Objekten. Ein Testprogramm könnte etwa so aussehen:
from geometrie import *
# Punkte
p1 = Punkt(0, 0)
p2 = Punkt(0, 10)
p3 = Punkt(10, 10)
p4 = Punkt(10, 0)
p5 = Punkt(0, 10)
p6 = Punkt(10, 10)
p7 = Punkt(5, 15)
# Rechtecke und Dreieck (als n-Eck)
rechteck = Neck([p1, p2, p3, p4])
dreieck = Neck([p5, p6, p7])
# Haus des Nikolaus als Figur
haus_nikolaus = Figur()
haus_nikolaus.hinzufuegen(rechteck)
haus_nikolaus.hinzufuegen(dreieck)
# Figur verschieben
haus_nikolaus.verschieben(2, 3)
(b) Was geht in dem folgenden Testprogramm beim Verschieben schief?
from geometrie import *
# Punkte
p1 = Punkt(0, 0)
p2 = Punkt(0, 10)
p3 = Punkt(10, 10)
p4 = Punkt(10, 0)
p6 = Punkt(10, 10)
p7 = Punkt(5, 15)
# Rechtecke und Dreieck (als n-Eck)
rechteck = Neck([p1, p2, p3, p4])
dreieck = Neck([p2, p6, p7])
# Haus des Nikolaus als Figur
haus_nikolaus = Figur()
haus_nikolaus.hinzufuegen(rechteck)
haus_nikolaus.hinzufuegen(dreieck)
# Figur verschieben
haus_nikolaus.verschieben(2, 3)