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 [2025/11/17 08:33] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| 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:// |