OO- Frage intern Getter Setter verwenden



  • getter und setter sind ja dazu da um den Zugriff auf private Attribute eines Objekt nach außen zu kapseln.
    Sollten diese getter und setter auch in der Klasse benutzt werden die die private Attribute hält ?
    Ich kann in der Klasse selbst ja schneller damit umgehen wenn ich die Attribute direkt anspreche.
    Oder ist das etwas zu pingelig gedacht ? Wie macht ihr es ?
    Gibt es Unterschiede z.B. bei einigen Attributen sollte man es tun bei anderen lieber nicht ?
    Zerstört so ein Mischmasch evtl. die Übersicht ?

    Grüße Rufus



  • Spricht nichts dagegen, wenn du dich entschließt den Wert nicht mehr direkt zu speichern, sondern zu berechnen, dann musst du nur den getter ändern und nicht alle Stellen in deinem Code (oder bei umgekehrtem Fall).
    Aber je länger du mit OOP arbeitest, umso seltener wirst du getter und setter haben und direkt auf den Daten einer Klasse arbeiten.



  • Hallo,

    intern greife ich direkt auf die Daten zu, getter und setter sind ja nur für die Schnittstelle nach außen gedacht.

    MfG

    GPC



  • Aber in einer Getter oder Setter kann auch eine Berechnung stattfinden. Ich sehe das nicht nur als stupide Schnittstelle. Wenn dem so wäre, bräuchte ich kein Getter/Setter. Die Getter/Setter sollen auch Berechnungen kapseln, von denen der von Außen nichts weiß. Und genau hier liegt die Wahrheit: wenn ich die Klasse selbst implementiere, sehe ich was in der Getter/Setter passiert. Passiert darin nichts großartiges, außer z.B. einem "return Varianiable" benutze ich nicht die Getter.

    Ich benutze aber die Getter nicht aus Performancegründe nicht, das optimieren die Compiler heute weg. Sondern nur aus lesbarkeitsgründen meines Codes. Und hier wieder die Wahrheit: es ist pers. Geschmack.

    Schlecht ist es, wenn z.B. ein Getter oder Setter noch ne Berechnung, Bedingungen o.ä. enthält, und ich diese nicht benutze. Dann hab ich gleiche Problem wie ein fremder, der nicht die Schnittstelle benutzen würde.

    Mein pers. Erfahrung: meine Klasse, meine Entscheidung was ich damit mache. Wer fremd ist, kann halt nur auf die publics zugreifen. 😃



  • Artchi schrieb:

    Aber in einer Getter oder Setter kann auch eine Berechnung stattfinden.

    jup.

    Die Getter/Setter sollen auch Berechnungen kapseln, von denen der von Außen nichts weiß.

    doppel - yup, stichwort Datenkapselung. Also gut, hier würde ich auch sagen, dass man intern den setter/getter verwenden kann/soll.

    MfG

    GPC



  • Hi
    In Delphi gibt es ja properties, neben "normalen" Membervariablen,
    die kann ich nur über get/set verwenden.
    Gibt es sowas auch in C++?



  • Hallo

    die kann ich nur über get/set verwenden.

    stimmt so nicht. (zumindestens im C++ Builder)

    Gibt es sowas auch in C++?

    Nein, nur im C++ Builder, wenn du mit den VCL-Erweiterungen arbeitest.

    bis bald
    akari



  • auch intern mit gettern und settern zu arbeiten ist schon sinnvoll. nehmen wir beispielsweise an, du speicherst dir intern die größe eines arrays in einem int.

    irgendwann stellst du dann fest, dass du für dieses array ja nen stl container verwendest und der int gar nicht nötig ist. also kann man ihn rausschmeissen und de entsprechende getter kapselt nun die .size() methode des containers.

    spart also änderungen am code. und da das ganze c++ ist, kann man gekapselte getter/setter auch gleich inline definieren und verliert nichtmal geschwindigkeit.



  • Wieso inline definieren? Der Compiler macht das von alleine, wenn er meint, das es 1. geht und 2. sich auch lohnt.


Anmelden zum Antworten