Getter und Setter
-
Artchi schrieb:
Deine Argumentation mit dem push_back hört sich für mich so an, als ob du die Namen der Funktionen anhand der Implementierung wählst.
Wo liest du denn das heraus? Ich nenne Funktionen nach dem was sie tun. push_back ist ebenfalls ein guter Name, weil hinterher der Vector am Ende ein Element mehr hat. Wie es das macht, ist mir egal. Aus der Dokumentation von push_back weiß ich aber, dass es kein einfacher Setter in der Form ist, wie ihn Anfänger oftmals für alle privaten Member schreiben (also
getX(){return X;}
) und genau um die häufige sinnlosigkeit dieser Art von Memberfunktion ging es in diesem Thread. Ob man das die Funktion nungetX()
oderkdngekngiruegt()
nennt ist ganz egal. Fakt ist, dass solche Arten von Funktionen sehr oft unnötig sind und die Objektabstraktion kaputtmachen. Wichtige Ausnahmen wurden genannt.
Dies hat überhaupt gar nichts mit Funktionen zu tun, die den Zustand eines Objektes auf eine mit der Abstraktion konsistenten Art und Weise ändern oder nach außen kommunizieren. Dies ist doch gerade der Zweck der ganzen Objektorientierung. Um das abgedroschene Autobeispiel rauszuholen: Auch wenn meine Autoklasse einen Member namens Motor hat, so ist eine Funktion setMotor doch keine gute Funktionalität dieser Klasse, weil ein reales Auto welches die Klasse beschreiben soll, nicht einfach seinen Motor ändern kann.
Eine Memberfunktion push_back ist daher eine sehr sinnvolle Funktion, denn die Abstraktion eines Vektors ist eine Liste an der man hinten was dranhängen und wegnehmen kann und bei der man die Elemente über eine Nummer eindeutig erreichen kann. Eine sehr schlechte Memberfunktion wäre ein Setter (im Sinne vonsetX(T newX){X=newX;}
) für irgendwelche Implementierungsdetails des Vektors, zum Beispiel für den Pointer auf das erste Element (falls es einen solchen gibt). Und gerade das ist es, worauf dot hinaus wollte und was sicherlich auch jeder einsieht, außer irgendwelche Besserwisser die dann einfach die Begriffe Getter und Setter (bewusst?) anders interpretieren, obwohl dies aus dem Zusammenhang offensichtlich sein sollte.