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
de:modul:m320_2024:learningunits:lu02:datahiding [2026/08/30 14:05] – ↷ Seite von modul:m320_2024:learningunits:lu02:datahiding nach de:modul:m320_2024:learningunits:lu02:datahiding verschoben msuterde:modul:m320_2024:learningunits:lu02:datahiding [2026/09/11 13:32] (aktuell) – [Wann verwende ich @property und @setter] msuter
Zeile 7: Zeile 7:
 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:archiv:m320:learningunits:lu01:theorie:klassendiagramm_-_modifikator_private.png?100|}}
  
 //Abb. private-Modifikator in UML//  //Abb. private-Modifikator in UML// 
Zeile 91: Zeile 91:
 Auf den ersten Blick scheint es, als würde das Programm in Zeile 24 direkt auf das Attribut ''color'' zugreifen. 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. Tatsächlich erkennt Python die Decorators ''@property'' und ''@color.setter'' und leitet die Zugriffe auf die entsprechenden Methoden um.
 +
 +===== Wann verwende ich @property und @setter =====
 +Zunächst mal sollten **alle** Attribute als ''private'' betrachtet werden.
 +Soll ein fremdes Objekt Lese- oder Schreibzugriff auf ein Attribut erhalten, schreiben wir eine entsprechende Property (Lesen) und/oder Setter (Schreiben).
 +
 +==== Entwerfen und Realisieren der Klasse ====
 +Beim Entwerfen einer Klasse stelle ich mir ein paar Fragen:
 +  * Dürfen fremde Objekte den Wert dieses Attributs lesen? => Ich erstelle eine Property.
 +  * Dürfen fremde Objekte den Wert dieses Attributs verändern? => Ich erstelle einen Setter.
 +
 +==== Zugriff auf andere Objekte ====
 +
 +Wenn ich in einem Programm auf ein Objekt zugreife, studiere ich zunächst mal seine Attribute und Methoden.
 +Dabei achte ich auf einige Punkte:
 +  - Der Bezeichner des Attributs beginnt mit einem ''_'' => Dies zeigt mir, dass ich nicht direkt auf das Attribut zugreifen soll. \\ Das ist beim Data Hiding der Normalfall.
 +  - Es gibt keine Property => Die Klasse möchte nicht, dass ich dieses Attribut lese.
 +  - Es gibt keinen Setter => Ich soll das Attribut nicht direkt verändern.
 +
 +Bei Python sind das einfach Empfehlungen. Wenn ich dies ignoriere, liegt das Risiko bei mir.
  
 ---- ----
 [[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 [[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
  • de/modul/m320_2024/learningunits/lu02/datahiding.1788091537.txt.gz
  • Zuletzt geändert: 2026/08/30 14:05
  • von msuter