Automatisch Get und Set mit VC++



  • Ich wollte fragen, ob es im MVC++ Studio die Möglichkeit gibt, erzeuge Variablen einer Klasse automatisch Get und Set Methoden zuzufügen?

    Bin da ein bisschen Borland Java verwöhnt 🙂
    Falls nicht, heisst es halt, ran an die Tiparbeit.



  • zuviele get/set Methoden zeugen von schlechtem Design - denn get/set ist ja fast wie ne public Variable, und darauf sollte man keinen Zugriff haben.



  • mhhh, und wie sollen dann 2 klassen miteinander kommunizieren? Vielleicht hast Du ja ne andere Lösung, ich habe es halt immer nur so gezeigt bekommen 😕



  • Wenn du für jede oder fast jede Membervariablen eine get und set Methode hast - warum dann nicht gleich public? Der Unterschied ist minimal.

    Klassen haben ein Interface - eine Schnittstelle.
    zB sagst du nicht

    flugzeug.setX(flugzeug.getX()+1);
    

    sondern

    flugzeug.moveForward();
    

    dh jetzt aber nicht, dass alle get/set Methoden böse sind - man soll sie lediglich einschränken.



  • kk danke.

    Ich habe dann natürlich vergessen, dass diese Klasse eine reine "Datenklasse" ist.
    Da es in Java der Type struct oder union nicht gibt, löst man das da mit Klassen.
    Also alles eine Macht der Gewohnheit 🙂



  • Hallo,
    getter- und setter, übermäßig eingesetzt, deueten darauf hin, dass Daten und ihr zugehöriges Verhalten nicht ordentlich in einer Klasse gekapselt sind.

    Wann immer man solche Methoden einsetzt, sollte man sich fragen, wofür man sie braucht und warum die Klasse nicht selbst das benötigte Verhalten auf den Daten implementiert.
    getter- und setter sind also immer dann besonders problematisch, wenn dadurch Entscheidungslogik über mehrere Stellen verteilt wird (siehe z.B. Shades Beispiel), statt sie einmal in der Klasse, die die nötigen Daten besitzt, zu implementieren.

    mhhh, und wie sollen dann 2 klassen miteinander kommunizieren?

    Der Zusammenhang ist mir jetzt nicht klar.
    Klassen (bzw. deren Objekte) kommunizieren über Nachrichten (sprich Methodenaufrufe). Die Daten einer Klasse sind Implementationsdetails und somit in der Regel für andere Klassen nicht von Bedeutung.

    Natürlich gibt es auch Situationen in denen getter- und setter unumgänglich sind. Ein nerbiges Beispiel findet man bei der Trennung von Model-Klassen und deren User-Interface. Und auch am Übergang von einem oo-System zu einem nicht-oo-System kommt man um solche getter- und setter nicht drum rum.



  • Oha. Viel zu spät 🙄



  • Refereen schrieb:

    Ich habe dann natürlich vergessen, dass diese Klasse eine reine "Datenklasse" ist.
    Da es in Java der Type struct oder union nicht gibt, löst man das da mit Klassen.

    Jetzt hast du aber structs 🙂 Also löse es auch mit ihnen



  • in Java hätte er doch auch schon Klassen mit public-Zugriff auf alle Members haben können.



  • Ich kenne das konkrete Problem nicht und es hört sich auch nicht danach an, aber dennoch will ich anmerken, das man in C++ bestimmte Klassen auch zu Freunden machen kann. (friend)



  • Das "Problem" dürfte ganz einfach sein, das die Java-Philosophie ganz stark auf getter und setter setzt.

    structs kann man ja auch in Java realisieren: einfach eine Klasse definieren, in der alle Membervariablen public sind - null Problemo!


Log in to reply