Thread Schönes Perl - OOP, getter, setter (10 answers)
Opened by styx-cc at 2014-04-04 18:11

rosti
 2014-05-11 07:26
#175463 #175463
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
2014-05-10T21:54:15 Muffi
Richtig. Nur in dem Fall ist das Objekt völlig überflüssig und schlimmer noch: Es überschreibt sogar noch alles, was das Objekt ausmacht.


Das Objekt überschreibt gar nichts sondern die Methode überschreibt. Das Objekt ist nicht überflüssig, sondern erforderlich, weil die Methode nur funktioniert, wenn sie über die Instanz aufgerufen wird und nicht anderswie. Es wäre schlimm, wenn eben das nicht so wäre. Es wäre noch schlimmer, wenn eine beliebige Funktion einer anderen Package ein Attribut ändert, dann ist das Objekt nicht mehr zu gebrauchen.

Nicht einmal eine Klassenmethode (wird über den Namen der Klasse aufgerufen), darf Attribute ändern, sie kann es gar nicht, weil sie gar keine Instanzen kennt. Einzig der Konstruktor als Klassenmethode darf Attribute setzen, weil er eine Instanz erzeugt und wie die Attribute untereinander zusammenhängen, das weiß nur die Klasse selbst und auch ein Getter muss das wissen, sonst macht er die Instanz kaputt.

Stell Dir vor, Du hast ein Objekt mit den Attributen {date => '11.5.2014', jd => 2456789} und irgendeine Funktion ändert das Datum, so wird ein später über jd berechneter Wochentag nicht mehr zum Datum passen, auch wenn die Berechnung des Wochentages eine stinknormale Modulo-7-Division ist.

PS: Letztes Jahr hat mir sogar ein gestandener PHP-Programmierer gesagt, dass er einen Setter nicht setAnyAttr() nennen würde, weil ein Setter genau wissen muss was er tut, und so kann er auch gleich einen aussagekräftigen Namen bekommen.
Last edited: 2014-05-11 08:31:29 +0200 (CEST)

View full thread Schönes Perl - OOP, getter, setter