Kapitel 10
Definition eigener Klassen
310
10.11 Aufgaben
Aufgabe 1
Definieren Sie eine Klasse Ding, die Gegenstände aus Metall modelliert, auf der Basis des
UML-Klassensymbols aus Abbildung 10.9.
Attribute:
Die Klasse besitzt ein schwach privates Klassenattribut namens
_dichte, das ein Dictionary
enthält. Schlüssel sind die Elementsymbole einiger Metalle. Werte sind Tupel aus dem
Namen des Elements und der Dichte. Beispielsweise hat
_dichte['Au'] den Wert ('Gold',
19.32)
. Das Dictionary kann gemäß Tabelle 10.2 konstruiert werden.
Das private Objektattribut
__masse enthält die Masse des Gegenstandes. Das schwach pri-
vate Objektattribut
_symbol enthält ein Elementsymbol.
Methoden:
Die öffentlichen Methoden
getMasse() und getVolumen() liefern Masse und Volumen
des Gegenstandes in Gramm bzw. Kubikzentimetern.
Die Methode
__str__() überlädt die Standardfunktion str() und liefert eine lesbare tex-
tuelle Darstellung des
Ding-Objektes.
Hinweis: Die Dichte berechnet sich nach folgender Formel:
Daraus folgt:
Abb. 10.9: UML-Klassensymbol für die Klasse Ding
Symbol Element Dichte in g/ccm
Fe Eisen 7.87
Au Gold 19.32
Ag Silber 10.5
Tabelle 10.2: Metalle und ihre Dichte
Dichte = Masse/Volumen
Masse = Volumen*Dichte
Ding
_dichte
__volumen
_symbol
getMasse()
getVolumen()
__str__()
311
10.11
Aufgaben
Aufgabe 2
Definieren Sie eine Klasse Quader als Spezialisierung der Klasse Ding. Die Klasse soll Qua-
der aus verschiedenen Metallen modellieren. Abbildung 10.10 zeigt ein Klassendiagramm.
Attribute:
Neben den von
Ding geerbten Attributen besitzt die abgeleitete Klasse Quader die privaten
Attribute
__laenge, __breite, __hoehe, die die Ausmaße eines Quaders in cm beschreiben.
Bei der Instanziierung eines Quader-Objektes sollen der
__init__()-Prozedur Werte für
folgende Attribute übergeben werden:
__symbol, __laenge, __breite, __hoehe. Ein Auf-
ruf des Konstruktors kann z.B. folgendermaßen aussehen:
Methoden:
Die Methoden
getVolumen() und getMasse() werden von der Basisklasse Ding geerbt.
Die Methode
__str__() wird überschrieben, so dass sie eine geeignete String-Repräsenta-
tion eines Quader-Objektes liefert.
Überladen Sie die Vergleichsoperatoren
==, > und >=. Objekte der Klasse Quader sollen hin-
sichtlich ihrer Masse verglichen werden. Beispielsweise gilt folgende Ungleichung:
Abb. 10.10: UML-Klassendiagramm für die spezialisierte Klasse Quader
Aufgabe 3
Definieren Sie eine Klasse NewList als Erweiterung der Standardklasse list. Objekte der
Klasse
Newlist besitzen eine zusätzliche Methode range(), die die Differenz zwischen
dem größten und dem kleinsten Element der Liste liefert (Spannweite), sofern es sich um
eine Liste von Zahlen handelt. Beispielaufruf:
silberbarren = Quader('Ag', 2, 3, 4)
Quader('Ag', 2, 3, 4) > Quader('Fe', 2, 3, 4)
>>> s = NewList([1, 2, 4, 10])
>>> s.range()
9
Ding
__dichte
__masse
getMasse()
getVolumen()
__str__()
Quader
__str__()
__gt__()
__ge__()
__eq__()
__laenge
__breite
__hoehe
Kapitel 10
Definition eigener Klassen
312
Aufgabe 4
Definieren Sie eine Klasse Laenge zur Repräsentation von Strecken auf der Basis des Klas-
sendiagramms in Abbildung 10.11.
Attribute:
Ein Objekt der Klasse
Laenge besitzt die zwei öffentlichen Attribute betrag und einheit
mit einem Zahlenwert und einer Längeneinheit (Millimeter, Zentimeter, Meter, Inch, Meile,
...). Sie werden bei der Instanziierung als Argumente übergeben. Beispiel für einen Kon-
struktoraufruf:
Zur Umrechnung der Einheiten besitzt die Klasse als privates Klassenattribut ein Dictionary
namens
__meter, das einer Längeneinheit die Länge in Meter zuordnet. Beispiel: __meter
['mil']
hat den Wert 1609. Das Dictionary kann mithilfe von Tabelle 10.3 definiert werden.
Methoden:
Die Methode
getMeter() liefert die Länge des Objektes in Meter. Der Additionsoperator
wird durch die Methode
__add__() auf sinnvolle Weise überladen. Bei der Addition zweier
Längen-Objekte wird die Einheit mit berücksichtigt, z.B. ist die Summe von 2 m und 10 cm
2.10 m. Die Methode
__str__() gibt eine lesbare Darstellung des Objektes als Zeichen-
kette, z.B.
'1.34 mil' oder '1.23 cm'.
Abb. 10.11: UML-Klassensymbol der Klasse Laenge
erddurchmesser = Laenge (12713.507, 'km')
Einheit (Kürzel) Länge in Metern Einheit (Kürzel) Länge in Metern
mm 0.001 in 0.0254
cm 0.01 ft 0.3048
m1 yd0.9143
km 1000 mil 1609
Tabelle 10.3: Umrechnung von Längeneinheiten
Laenge
getMeter()
__add__()
__gt__()
__ge__()
__eq__()
__str__()
__meter
betrag
einheit

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.