Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m320_2024:learningunits:lu02:datahiding [2024/04/17 18:15] – angelegt - Externe Bearbeitung 127.0.0.1 | modul:m320_2024:learningunits:lu02:datahiding [2024/08/12 06:56] (aktuell) – msuter | ||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
</ | </ | ||
+ | Im UML-Diagramm werden daher die Attribute mit dem Modifikator << | ||
- | Im UML-Diagramm werden daher die Attribute mit dem Modifikator << | + | {{: |
- | {{: | + | |
- | //Abb 1.9:// private-Modifikator in UML\\ | + | //Abb. private-Modifikator in UML// |
Was bedeutet nun aber data hiding praktisch betrachtet? | Was bedeutet nun aber data hiding praktisch betrachtet? | ||
- | Wir nehmen hier wieder unser Beispiel | + | Wir nehmen hier wieder unser Beispiel der Türe. |
+ | Gemäss UML-Diagramm sind alle Attribute '' | ||
<code Python> | <code Python> | ||
- | a_door_objekt.door_is_open = True | + | some_door = Door() |
+ | some_door.door_is_open = True | ||
</ | </ | ||
- | ist somit nicht erlaubt. Wäre dem nicht so, könnte z.B. auch im Zustand '' | + | |
+ | ist somit nicht erlaubt. | ||
+ | Wäre dem nicht so, könnte z.B. auch im Zustand '' | ||
+ | Viel mehr wird in der Methode '' | ||
Zeile 30: | Zeile 36: | ||
</ | </ | ||
- | Der Benutzer der Klasse '' | + | Der Benutzer der Klasse '' |
+ | Es genügt, wenn er die passenden Methode aufruft. Hier also | ||
<code Python> | <code Python> | ||
- | a_door_objekt.lock_the_door() | + | some_door.lock_the_door() |
</ | </ | ||
- | === data hiding bei Python === | + | ===== data hiding bei Python |
- | Attribute die im Klassendiagramm als '' | + | ==== Attribute ==== |
+ | |||
+ | Attribute die im Klassendiagramm als '' | ||
+ | Dies erfolgt durch folgende Schreibweise | ||
<code Python> | <code Python> | ||
- | self._das_gekapselte_Attribut | + | self._attributname |
</ | </ | ||
Zeile 46: | Zeile 56: | ||
Es wird aber nicht durch den Python-Interpreter verhindert, dass trotzdem auf solche Attribute zugegriffen wird. | Es wird aber nicht durch den Python-Interpreter verhindert, dass trotzdem auf solche Attribute zugegriffen wird. | ||
</ | </ | ||
+ | |||
+ | ==== Property und Setter ==== | ||
+ | Durch den Einsatz von '' | ||
+ | Als Beispiel betrachten wir das Attribut '' | ||
+ | |||
+ | <code python [enable_line_numbers=" | ||
+ | class Door: | ||
+ | def __init__(self, | ||
+ | self.color = base_color | ||
+ | |||
+ | @property | ||
+ | def color(self): | ||
+ | """ | ||
+ | getter-Methode für die Eigenschaft color | ||
+ | :return: die Farbe des Objekts | ||
+ | """ | ||
+ | return self._color | ||
+ | |||
+ | @color.setter | ||
+ | def color(self, new_color): | ||
+ | """ | ||
+ | setter-Methode für die Eigenschaft color | ||
+ | :param new_color: | ||
+ | """ | ||
+ | self._color = new_color | ||
+ | | ||
+ | if __name__ == ' | ||
+ | some_door = Door(None, ' | ||
+ | print(f' | ||
+ | some_door.color = ' | ||
+ | print(f' | ||
+ | </ | ||
+ | |||
+ | Auf den ersten Blick scheint es, als würde das Programm in Zeile 24 direkt auf das Attribut '' | ||
+ | Tatsächlich erkennt Python die Decorators '' | ||
---- | ---- | ||
- | [[https:// | + | [[https:// |