006
17.10.2006, 16:36 Uhr
virtual
Sexiest Bit alive (Operator)
|
Zitat von J-jayz-Z: |
Es ist zwar schön, wenn man sich an bestimmte "Designvorschriften" hällt aber ich finde, es sollte jeder selbst für sich entscheiden, ob er öffentliche Variablen oder getter und setter verwendet. Machen tut es prinzipiell das selbe - ist nur unterschiedlich viel Schreibarbeit
|
Natürlich muß man das für sich selbst entscheiden, aber es gibt auch gute Gründe dafür, daß man sich an die Designvorschriften halten sollte. Mal ein kleines Beispiel:
C++: |
class NamedObject { public: std::string name; public: NamedObject(const std::string& name) :name(name) { } };
|
Nehmen wir mal an, wir haben diese Klasse als Klasse für allerlei Benamte Objekte. Nehmen wir weiterhin an, daß Programm, welches diese Klasse benutzt ist in der Version 1.0 released und total Fehlerfrei. Die Klasse mag jetzt an 1000 Stellen benutzt werden, wo der Name verändert wird.
Aus welchen Gründen auch immer entscheidet man sich nun, eine Version 1.1 rauszubringen, die nur eine ganz kleine Änderung hat, die man beim Ursprünglichen Design einfach "übersehen" hat: es soll nicht möglich sein, leere Namen einzugeben. Ohne Setter bist Du aufgeschmissen.
Es mag sein, daß man für bestimmte Attribute (zB X/Y Koordinaten einer allgemeinen Klasse Punkt2D) keine Getter schreiben will. Aber sobald zB diese eigentlich trivial Klasse zB Ableitbar ist und man eine Klasse Punk2DAufLinie hat, so daß an das Verhältnis von X zu Y irgendwelchen Restruktionen unterworfen ist, sind zumindestens schon mal setter angesagt.
Damit ist aus meiner Sicht schonmal für jede Ableitbare Klasse pflicht, setter zu verwenden. (Natürlich nicht für Attribute die const sind oder - in Java - final sind).
Blieben also nur noch Klassen übrig die nicht ableitbar sind. Das ist in C++ in der Regel ein erheblich größerer Anteil als in anderen Sprachen. Aus dem Beispiel oben motiviert würde ich mal da die Einschränkung machen, daß wenn man sich vorstellen kann, daß man sich die setter für Properties sparen kann, wenn man die Klasse 100% niemals verwendet (dann schreibe ich sie nicht!) oder verändert. Dies ist bei mir eigentlich nur bei "Wegwerfprogrammen" der Fall, die irgendwo im tmp Ordner liegen und nach 2 Tagen von irgendeinem Cronjob automatische gelöschgt werden.
In C# kenne ich mich nicht so aus, aber ich denke mal daß grade dieses ListenerKonzept für Properties was Du angesprochen hast im wesentlichen genau wie ein normaler Setter wirkt, eben indem man in einem Listener prüft, ob alle Bedingungen erfüllt sind, die notwendig sind, den Wert zu setzen. Aber leider reden wir hier von C++, nicht C#. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 17.10.2006 um 16:38 Uhr von virtual editiert. |