i

Übungen

Aufgabe 1: Zugriff auf die Attribute

Gegeben ist die Deklaration einer Klasse Kartenhand:

class Kartenhand(object):
    def __init__(self):
        self.kartenListe = []
        self.anzahl = 0
def hinzufuegen(self, karte):
    self.kartenListe = self.kartenListe + [karte]
    self.anzahl = self.anzahl + 1

def wegnehmen(self, karte):
    if karte in self.kartenListe:
        i = self.kartenListe.index(karte)
        del self.kartenListe[i]
        self.anzahl = self.anzahl - 1

(a) Zeige mit einem geeigneten Python-Dialog, dass ein leichtfertiger Zugriff auf Attribute hier zu unerwünschten Objektzuständen führen kann.

(b) Erstelle ein Klassendiagramm, in dem Zugriffsrechte festgelegt sind und benötigte Zugriffsmethoden eingeführt sind. Ergänze die Deklaration der Klasse Kartenhand entsprechend.

Aufgabe 2: Zugriffsmethoden

Gegeben ist eine Implementierung der Klasse Kartenstapel:

#-----------------------------------------------------------
# Kartenstapel
#-----------------------------------------------------------

from random import randint

class Kartenstapel(object):
def init(self):

    """
    Die Methode __init__ erzeugt ein Kartenstapel-Objekt.
    Die 32 Karten werden hier in einer festen Reihenfolge
    in kodierter Form vorgegeben:
    'X-A' (Kreuz Ass), ..., 'K-7' (Karo 7)
    """

    self.kartenListe = [
        'X-A', 'X-K', 'X-D', 'X-B', 'X-10', 'X-9', 'X-8', 'X-7',
        'P-A', 'P-K', 'P-D', 'P-B', 'P-10', 'P-9', 'P-8', 'P-7',
        'H-A', 'H-K', 'H-D', 'H-B', 'H-10', 'H-9', 'H-8', 'H-7',
        'K-A', 'K-K', 'K-D', 'K-B', 'K-10', 'K-9', 'K-8', 'K-7'
        ]

def mischen(self):

    """
    Die aktuell im Kartenstapel vorliegenden Karten werden neu angeordnet.
    Hierzu wird eine zufällig gewählte neue Reihenfolge bestimmt.
    """

    neueListe = []
    aktuelleAnzahl = len(self.kartenListe)
    while aktuelleAnzahl > 0:
        i = randint(0, aktuelleAnzahl-1)
        neueListe = neueListe + [self.kartenListe[i]]
        del self.kartenListe[i]
        aktuelleAnzahl = len(self.kartenListe)
    self.kartenListe = neueListe

def istLeer(self):

    """
    Die Methode liefert als Ergebnis True / False,
    falls der Kartenstapel leer / nicht leer ist.
    """

    if len(self.kartenListe) > 0:
        ergebnis = False
    else:
        ergebnis = True
    return ergebnis

def karteZiehen(self):

    """
    Die oberste (erste) Karte des Kartenstapel wird aus
    dem Kartenstapel entfernt und als Ergebnis zurückgegeben
    Ist der Kartenstapel leer, wird keine Karte gezogen
    und der wert None zurückgegeben.
    """

    if len(self.kartenListe) > 0:
        gezogeneKarte = self.kartenListe[0]
        self.kartenListe = self.kartenListe[1:]
    else:
        gezogeneKarte = None
    return gezogeneKarte

Ergänze Zugriffsmethoden, um einen lesenden und einen schreibenden Zugriff auf das Attribut kartenListe zu ermöglichen.

Suche

v
3.2.2.1.4.4
inf-schule.de/modellierung/ooppython/spiele/objekteklassen/datenkapselung/uebungen

Rückmeldung geben