Übungen
Aufgabe 1: Eine Klasse als Baustein nutzen
Zur Simulation von Lotto-Ziehungen wird hier eine Klasse Lottogeraet
bereitgestellt. Du findest eine Implementierung dieser Klasse in der Datei lotto.py.
(a) Teste die Klasse mit einem einfachen Testprogramm, das alle Methoden der Klasse benutzt.
(b) Löse mit Hilfe der Klasse folgendes Problem: Wie oft kommt deine Lieblingszahl (z.B. die 13) in 1000 Lottoziehungen vor?
Aufgabe 2: Eine Schnittstellenbeschreibung zu einer Klasse erstellen
Wir betrachten die folgende Klasse Kartenhand
:
class Kartenhand(object):
def __init__(self, kartenGegeben):
self.kartenListe = kartenGegeben
self.anzahl = len(self.kartenListe)
def existiertKarte(self, karte):
if karte in self.kartenListe:
ergebnis = True
else:
ergebnis = False
return ergebnis
def hinzufuegen(self, karte):
if not self.existiertKarte(karte):
self.kartenListe = self.kartenListe + [karte]
self.anzahl = self.anzahl + 1
def wegnehmen(self, karte):
if self.existiertKarte(karte):
i = self.kartenListe.index(karte)
del self.kartenListe[i]
self.anzahl = self.anzahl - 1
(a) Ergänze zunächst geeignete Zugriffsmethoden für die Attribute der Klasse.
(b) Ergänze die Implementierung um eine Schnittstellenbeschreibung, so dass die Klasse benutzt werden kann, ohne dass man sich die Implementierungsdetails anschauen muss.
Aufgabe 3: Eine Implementierung einer Klasse austauschen
Betrachte noch einmal die Klasse Lottogeraet
zur Simulation eines Lottogeräts
(siehe lotto.py).
Die noch vorhandenen bzw. gezogenen Kugeln werden in der vorgegebenen Implementierung mit Hilfe von Listen mit Zahlen verwaltet.
Ziel ist es, die Implementierng der Klasse Lottogeraet
so abzuändern,
dass die vorhandenen bzw. gezogenen Kugeln mit Hilfe von Ankreuzfeldern
(implementiert mit Listen mit 49 Wahrheitswerten)
verwaltet werden. Am Verhalten der Methoden soll sich dabei aber nichts ändern.
(a) Entwickle eine passende Implementierung. Benutze zum Testen das Testprogramm aus Aufgabe 1.
(b) Was muss man nach Veränderungen in der Implementierung an der Schnittstellenbeschreibung ändern?
Aufgabe 4: Ein Dialog über Modularisierung
Zwei Softwareentwickler(innen) - Isa und Otti - unterhalten sich über die Bausteine, die sie benutzen. Wo liegen die Gemeinsamkeiten, wo die Unterschiede?
Isa | Otti |
---|---|
Hey Otti, heute schon Objekte erzeugt? | |
Hallo Isa, was machen die Funktionen? | |
Also, jetzt mal im Ernst, ich finde das ziemlich kompliziert, was du da treibst. | |
Wirklich? Ich versuche ja nur, das Modularisierungsprinzip zu beachten. | |
Das versuche ich doch auch - nur mit Funktionen statt Objekten. | |
Stimmt! | |
Funktionen kommen mir aber viel einfacher vor als Objekte mit all ihren Attributen und Methoden. Warum also solch komplizierte Bausteine, wenn es auch viel einfacher geht? | |
Es kommt halt darauf an, was man mit den Bausteinen anfangen will. | |
Wie soll ich das verstehen? | |
Also, wie ist das im normalen Leben? Wenn man sich einen Drachen bauen will, dann reichen eigentlich Holzstäbe, etwas Papier, eine lange Schnur usw.. Wenn man sich ein Fahrrad selbst zusammenbauen will, dann ist es günstig, wenn man sich einen Bausatz mit vorgefertigten Bauteilen besorgt, die schon die Grundfunktionen mitbringen. Und so ist es halt auch bei der Softwareentwicklung. | |
Du meinst, Funktionen benutzt man, wenn man kleine Probleme löst, und Objekte, wenn komplexere Aufgaben anstehen. | |
Genau so sehe ich das. Wenn man komplexere Aufgaben erledigen will, dann fallen meist sehr viele zu verwaltende Daten an und es müssen eine Vielzahl an Funktionen zur Verarbeitung der Daten konzipiert werden. Um etwas Ordnung in dieses Daten- und Funktionschaos zu bringen, bündelt man Zusammengehörendes zu einer neuen Einheit zusammen. Oft ist es doch so, dass auf bestimmte Daten nur ganz bestimmte Operationen angewandt werden sollen. Da ist es dann günstig, wenn man aus diesen Komponenten - also Daten und zugehörige Operationen - eine komplexen Baustein erzeugt. | |
Ok! | |
Also, im Grunde machen wir dasselbe, du im Kleinen, ich im Großen. Dass bei mir die Bausteine etwas komplizierter wirken, liegt also in der Natur der Sache. |