Attribute, die gelesen und geschrieben werden, gehören nach public



  • dann nehm ichs mal auseinander:

    - Für jedes Element müsste man 2 zusätzliche get- und set-Methoden bereitstellen. Bei vielen
    Attributen wird das etwas anstrengend. Bei bereits 10 int-Elementen sind mir 20 get-, set-Methoden

    a) welche Klasse hat soviele lesbare elemente,ohne dass ein designproblem vorliegt? oftmals kann man das problem mit basisklassen lösen, es ist wzar immernoch dieselbe menge, aber nichtmehr soviel auf einem haufen. desweiteren bieten manche ides die funktion zum automatischen erstellen von setern/getern.

    - get- und set-Methoden machen nur bei integralen Typen Sinn (Wert geben, Wert setzen).

    was spricht dagegen, das objekt als referenz zu übergeben?
    class.getList().push_back("ja, das geht auch");

    was am meisten dafür spricht, ist, dass man mit getern pseudovariablen zurückgeben kann,die das ergebnis einer berechnung darstellen:

    //ohne jetzt die formeln zu kennen
    int Object::getEnergy(){
        return masse*geschwindigkeit*geschwindigkeit;
    }
    int Object::setEnergy(int Energy){
        geschwindigkeit=squart(Energy/masse);
    }
    

    desweiteren bilden get funktionen auch einen schutz für die integrität der Klasse, da verhindert wird, dass die Klassenvariablen für irgendwelche platzhalteraufgaben zweckentfremdet werden.



  • Henrie schrieb:

    Contra:
    - Für jedes Element müsste man 2 zusätzliche get- und set-Methoden bereitstellen. Bei vielen
    Attributen wird das etwas anstrengend. Bei bereits 10 int-Elementen sind mir 20 get-, set-Methoden
    zu viel. (Jetzt jedenfalls, später sind 20 vielleicht noch OK)

    10 int-Elemente, die alle von aussen gesetzt und gelesen werden sollen?
    Gar nicht gut.

    - get- und set-Methoden machen nur bei integralen Typen Sinn (Wert geben, Wert setzen). Bei
    Containment versagt diese Methode. Oder sollte man alle Methoden einer std::list wrappen, nur
    weil sie Element der Klasse ist? Wenn std::list Objekte jedoch in public steht, schreibt man
    einfach klasse.liste.push_back(..)

    nee, einfach klasse.add(). Im Idealfall weiß man beim Benutzen der Klasse überhaupt nicht, wie die Daten intern gespeichert werden.

    Aber man könnte ja auch anstatt get oder set andere Funktionen mit dem passenden Namen erstellen,
    beispielsweise get_calculated_thing()....

    So ist es. Am besten man hat überhaupt keine get- oder set-Methoden, sondern denkt sich gleich die passenden Methoden aus, die die Daten bearbeiten.
    Also besser auto.move(1) statt auto.setx(auto.getx()+1).

    Fazit: public Datenelemente gibt es nicht.



  • protected auch nicht!! (Ok, bei mir gibt es zwei, aber die sind ein Designfehler) 🙂



  • Optimizer schrieb:

    protected auch nicht!! (Ok, bei mir gibt es zwei, aber die sind ein Designfehler) 🙂

    Oh, doch. Protected macht imho immer mal wieder sinn.
    Wenn man nach ist ein vererbt, dann hat jedes Auto reifen,
    und wenn du dann von PKW erbst, hat jedes Auto sogar 4 Reifen...

    Und imho machen GetMethoden immer mal wieder sinn, aber SetMethoden
    allerhöchstens bei Datenklassen, wo irgendetwas konkret abgebildet wird.
    Aber dann kann man es auch sinnvoller benennen.

    Devil



  • Oh, doch. Protected macht imho immer mal wieder sinn.
    Wenn man nach ist ein vererbt, dann hat jedes Auto reifen,
    und wenn du dann von PKW erbst, hat jedes Auto sogar 4 Reifen...

    Was ne geile Begründung. Wie stellst du dir das vor? PKW enthält ein Reifen-Datenelement, Auto erbt dieses protected und fügt noch drei hinzu? (Achtung: dieser Kommentar ist in böser Absicht leicht zynisch geschrieben, trotzdem wird um eine Erklärung für die zitierte Aussage gebeten)



  • Optimizer schrieb:

    Oh, doch. Protected macht imho immer mal wieder sinn.
    Wenn man nach ist ein vererbt, dann hat jedes Auto reifen,
    und wenn du dann von PKW erbst, hat jedes Auto sogar 4 Reifen...

    Was ne geile Begründung. Wie stellst du dir das vor? PKW enthält ein Reifen-Datenelement, Auto erbt dieses protected und fügt noch drei hinzu? (Achtung: dieser Kommentar ist in böser Absicht leicht zynisch geschrieben, trotzdem wird um eine Erklärung für die zitierte Aussage gebeten)

    PKW erbt von AUTO, da ein PKW ein AUTO ist, und hat dann 4 Reifen.
    Dann erbt Golf,EKlasse oder 3erbmw von PKW.

    AUTO könnte in dem fall auch Fahrzeug heissen, oder KFZ oder...

    Devil



  • Das begründet in keinster Weise, warum jetzt die Reifen protected sein müssen. 🙂



  • Optimizer schrieb:

    Das begründet in keinster Weise, warum jetzt die Reifen protected sein müssen. 🙂

    Äh, weil nicht jeder auf die Reifen zugreifen soll ?

    Devil



  • Woah alter, ich rede davon, sie private zu machen und nicht public.



  • protected-Variablen sind genau wie public. Die Basisklasse verliert die Kontrolle darüber.



  • Und was ist mit protected mett-hoden?



  • die sind gut. Dass policysystem nach alexandrescou basiert drauf 😉

    //edit aber nur wenn mett-hoden keinen bindestrich haben 😉


Anmelden zum Antworten