Kapitel 12
Objektorientiertes Modellieren
338
12.3 Assoziationen zwischen Klassen
12.3.1 Reflexive Assoziationen
Eine reflexive Assoziation besteht zwischen Objekten derselben Klasse. Ein Beispiel hierfür
ist ein Stammbaum. Eine Person modellieren wir durch eine Klasse namens
Stammbaum mit
folgenden Attributen:
Das Attribut name enthält eine Zeichenkette mit dem Namen der Person.
Die Attribute vater und mutter enthalten entweder Objekte der Klasse Stammbaum, die
Vater und Mutter repräsentieren, oder sie enthalten das Objekt
None, falls z.B. Vater bzw.
Mutter nicht bekannt ist oder nicht angegeben werden soll.
Ein Objekt der Klasse
Stammbaum ist also mit null bis höchstens zwei Objekten derselben
Klasse assoziiert. Diese Zahlenangaben bezeichnet man als Kardinalitäten der Beziehung.
Abbildung 12.7 zeigt das zugehörige Klassendiagramm. Die Zahlen an der Linie stellen die
Kardinalitäten der Beziehung dar.
Abb. 12.7: Klassendiagramm mit reflexiver Assoziation
Im folgenden Python-Skript wird zunächst die Klasse Stammbaum definiert. Dann erzeugen
wir – unten bei den Großeltern beginnend – eine Objektstruktur, die den Stammbaum von
Jenny über insgesamt drei Generationen wiedergibt. Jedes Objekt der Klasse
Stammbaum
enthält maximal zwei Namen für Objekte der gleichen Klasse als Attribut.
Ihre Wahl: u
Deutsch: Hilfe
Englisch: aid help
Bitte wählen Sie!
(N)eues Wort eingeben
(U)ebersetzung
(E)nde
Ihre Wahl: e
Danke für die Verwendung des Wörterbuchs!
Stammbaum
name: str
vater: Stammbaum
mutter: Stammbaum
1
0..2
339
12.3
Assoziationen zwischen Klassen
Skript:
Programmlauf:
Erläuterung:
#1: Die Attribute self.mutter und self.vater bezeichnen Objekte der Klasse Stammbaum
oder None, während self.name einen String enthält.
class Stammbaum:
def __init__(self, name, vater, mutter):
s e lf.n a me = n ame # S t r ing
s e lf.v a ter = vat e r #1
self.mutter = mutter
d e f __s t r __( s elf ) : #2
s = "" # String-Repraesentation
if self.name:
s += self.name + '\n'
i f se l f.m u t t er: #3
s += 'Mutter von ' + self.name + \
': ' + str(self.mutter)
if self.vater:
s += 'Vater von '+ self.name + \
': ' + str(self.vater)
r e turn s
sarah = Stammbaum('Sarah', None, None) #4
willy = Stammbaum('Willy', None, None)
marianne = Stammbaum('Marianne', None, None)
anton = Stammbaum('Anton', None, None)
marlene = Stammbaum('Marlene', willy, sarah)
werner = Stammbaum('Werner', anton, marianne)
jenny = Stammbaum('Jenny', werner, marlene)
pri n t(j e n n y) #5
Jenny
Mutter von Jenny: Marlene
Mutter von Marlene: Sarah
Vater von Marlene: Willy
Vater von Jenny: Werner
Mutter von Werner: Marianne
Vater von Werner: Anton

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.