LU02b - Konzept des data hiding

Unter data hiding (Datenkapselung) versteht man den Zugriff auf die Attribute eines Objektes nur mittels Methoden und nie im Direktzugriff https://de.wikipedia.org/wiki/Datenkapselung_(Programmierung).

Im UML-Diagramm werden daher die Attribute mit dem Modifikator «private» - hier ein - Zeichen - versehen.

Abb 1.9: private-Modifikator in UML

Was bedeutet nun aber data hiding praktisch betrachtet?

Wir nehmen hier wieder unser Beispiel 1.1 der Türe. Gemäss UML-Diagramm sind alle Attribute private deklariert. Ein Zugriff in der Art

a_door_objekt.door_is_open = True

ist somit nicht erlaubt. Wäre dem nicht so, könnte z.B. auch im Zustand verriegelt die Türe geöffnet werden (vergl. dazu Abb. 1.4), was aber gar nicht geht. Viel mehr wird in der Methode lock_the_door sichergestellt, dass eben die Bedingungen gemäss Zustandsdiagramm eingehalten werden.

def lock_the_door(self):
    """
    Methode für das verriegeln der Türe.
    Das ist nur möglich, wenn die Türe nicht offen ist.
    Für das verriegeln ist aber das Türschloss zuständig. Es weiss wie das geht.
    """
    if self._door_is_open == False:
       self._door_is_locked = self._the_door_lock.lock()

Der Benutzer der Klasse Door ist also vollständig von der Art der Implementation befreit und muss sich um keinerlei Zusicherungen kümmern. Es genügt, wenn er die passenden Methode aufruft. Hier also

a_door_objekt.lock_the_door()

data hiding bei Python

Attribute die im Klassendiagramm als private deklariert sind, müssen in Python im Konstruktor initialisiert werden. Dies erfolgt durch folgende Schreibweise

self._das_gekapselte_Attribut = initialWert

Im Gegensatz zu anderen Programmiersprachen gibt es in Python keine echten private Attribute. Mit der Schreibweise _attributname zeigen wir an, dass dieses Attribut nicht von ausserhalb der Klasse manipuliert werden soll. Es wird aber nicht durch den Python-Interpreter verhindert, dass trotzdem auf solche Attribute zugegriffen wird.


© René Probst

  • modul/m320_2024/learningunits/lu02/datahiding.txt
  • Last modified: 2024/04/17 15:02
  • by msuter