Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m320_2024:learningunits:lu02:datahiding [2024/06/26 07:19] msutermodul:m320_2024:learningunits:lu02:datahiding [2024/08/12 06:56] (aktuell) msuter
Zeile 5: Zeile 5:
 </WRAP> </WRAP>
  
-Im UML-Diagramm werden daher die Attribute mit dem Modifikator <<**private**>> hier ein - Zeichen versehen.+Im UML-Diagramm werden daher die Attribute mit dem Modifikator <<**private**>>hier ein **-** Zeichen versehen.
  
 {{:modul:m320:learningunits:lu01:theorie:klassendiagramm_-_modifikator_private.png?100|}} {{:modul:m320:learningunits:lu01:theorie:klassendiagramm_-_modifikator_private.png?100|}}
Zeile 42: Zeile 42:
 </code> </code>
  
-==== data hiding bei Python ====+===== data hiding bei Python ====
 +==== Attribute ==== 
 Attribute die im Klassendiagramm als ''private'' deklariert sind, müssen in Python im Konstruktor initialisiert werden.  Attribute die im Klassendiagramm als ''private'' deklariert sind, müssen in Python im Konstruktor initialisiert werden. 
 Dies erfolgt durch folgende Schreibweise Dies erfolgt durch folgende Schreibweise
 <code Python> <code Python>
-self._das_gekapselte_Attribut initialWert+self._attributname initial_wert
 </code> </code>
  
Zeile 54: 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.
 </WRAP> </WRAP>
 +
 +==== Property und Setter ====
 +Durch den Einsatz von ''@property'' und ''@''//''ATTRIBUT''//''.setter'' können wir das Prinzip des Data Hidings unterstützen.
 +Als Beispiel betrachten wir das Attribut ''color'' der Klasse ''Door''.
 +
 +<code python [enable_line_numbers="true"]>
 +class Door:
 +    def __init__(self, ref2door_lock, base_color):
 +        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__ == '__main__':
 +    some_door = Door(None, 'blue')
 +    print(f'The color is {some_door.color}')
 +    some_door.color = 'red'
 +    print(f'The color is {some_door.color}')
 +</code>
 +
 +Auf den ersten Blick scheint es, als würde das Programm in Zeile 24 direkt auf das Attribut ''color'' zugreifen.
 +Tatsächlich erkennt Python die Decorators ''@property'' und ''@color.setter'' und leitet die Zugriffe auf die entsprechenden Methoden um.
  
 ---- ----
-[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) René Probst+[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] René Probst, bearbeitet durch Marcel Suter
  • modul/m320_2024/learningunits/lu02/datahiding.1719379175.txt.gz
  • Zuletzt geändert: 2024/06/26 07:19
  • von msuter