Setter machen Objekte kaputt

Jetzt hier zu finden.

2 thoughts on “Setter machen Objekte kaputt

  1. Hey Nicole,

    danke für deinen Artikel – Ich bin ein großer Fan von immutability und einer Art wohldefinierten “contract” unter dem Objekte garantiert funktionieren und freue mich über jeden Input in diese Richtung.

    Wie du schon erwähnst ist es oftmals sicherer, zum Setzen aller Werte die Konstruktoren zu verwenden, um die eben diese Contracts und auch die Aufrechterhaltung der Klasseninvariante zu gewährleisten.

    Ein paar Dinge möchte ich noch anmerken: Setter an- und für sich sind nichts inhärent destruktives, wie der Artikeltitel suggeriert. Sie sind ein Workaround um das Uniform Access Principle (http://en.wikipedia.org/wiki/Uniform_access_principle) in Sprachen, die keine Properties oder andere Sprachfeatures zur Unterstützung des UAP bieten.

    Grundsätzlich denke ich getter und setter sollten für optionale Attribute verwendet werden. Weil das manchmal gar nicht so einfach ist, und lange Argumentlisten in Sprachen wie Java absolut unleserlich sind, greife ich dann gerne auch gerne mal zum Builder Pattern, um die Regeln unter denen ein Funktionierendes Objekt produziert wird explizit zu machen.

    Eine Kleinigkeit noch: das Beispiel, zur Skalarmultiplikation eines Vektors ist nich thread safe – teilen sich mehrere Klassen den gleichen Vektor kann es doch vorkommen dass ein inkonsistenter interner Zustand ausgelesen wird – eine immutable copy wie du direkt danach vorschlägst hat diesen Fehler nicht – das würde ich unbedingt noch erwähnen.

  2. Offenbar haben Sie den Sinn von Setter-Methoden nicht begriffen. Der Grund, wieso man eine Methode verwendet, statt das betreffende Feld einfach public zu machen, ist ja gerade, dass eine Methode sicherstellen kann, dass Invarianten erhalten werden.

    Zudem wirkt sich eine Initialisierung mittels eines Konstruktors nachteilig auf die Lesbarkeit aus, da für den Leser nicht klar ist, welches Argument im Konstruktor welchem Feld entspricht:
    new Person(“Walter”, “Gerhard”)
    Ist das nun Herr Gerhard oder Herr Walter? Mit Settern ist das eindeutig. Und in Sprachen, die anders als Java nicht in den 90ern stecken geblieben sind, z. B. C#, kann man das auch recht hübsch aufschreiben:
    new Person { GivenName = “Walter”, Surname = “Gerhard” }

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s