Welchen Sinn hat das protected Privileg ??



  • TheBigW schrieb:

    Aber oft ist dann die Frage berechtigt warum die Funktion nicht gleich public sein darf (zumal jeder sowieso nach Ableitung public zugriff haben kann) - kommt natuerlich auf den Anwendungsfall an....

    Weil es nicht nur darum geht, Zugriff auf irgendwelche Elemente zu geben.
    Ein kurzes Beispiel aus Qt4:
    http://doc.qt.nokia.com/4.6/qabstractitemmodel.html#protected-functions
    createIndex macht als public keinen Sinn, genauso die ganzen "beginInsert***". Das kann sogar ziemlich in die Hose gehen, wenn jeder der ein Qt-Model verwendet diese Funktionen aufrufen kann 😉 Das sind reine Internals. Bei createIndex der void*-Parameter wird dafür verwendet, ein eigenes Objekt aus einer internen Datenstruktur zu übergeben. Die casts zurück zur Verwendung des Objekts (z.B. in data()) können ziemlich böse enden (appCrashEvent() :P) wenn irgend ein Doldi nen Schmarrn übergeben kann.



  • wie gesagt: kommt natuerlich auf den Anwendungsfall an....

    ich hab nie behaupted, das protected keine berechtigung hat, nur das protected unter umstaenden genauso gefaehrlich ist wie public.

    mit public UND protected werden funktionen zum interface meiner klasse und jeder kann damit tun und lassen was er will.



  • TheBigW schrieb:

    mit public UND protected werden funktionen zum interface meiner klasse und jeder kann damit tun und lassen was er will.

    Nicht ganz. Für Zugriffe auf public -Methoden muss man gar nichts tun, während protected seinen Tribut (Vererbung, eine sehr starke Bindung) fordert.

    Und denk dran: Du entwickelst eine Klasse für den Anwender und nicht gegen ihn. Wenn dieser meint, er müsse protected -Member in abgeleiteten Klassen öffentlich machen, dann lass ihn lustig sein. Am Zugriff auf private -Member kannst du einen bösartigen Programmierer genauso wenig hindern.



  • Ich will hier nicht bestreiten, dass protected unter Umstaenden durchaus Sinn macht.
    Ausgangspunkt war eher, das man IMO zweimal nachdenken sollte, ob man es nicht gleich public anbieten sollte oder ganz versteckt (private). Wenn man zu dem schluss kommt das protected die beste Loesung ist, warum nicht.

    Ich schreib ja auch keinen protected freien code :).

    ..er müsse protected-Member in abgeleiteten Klassen öffentlich machen, dann lass ihn lustig sein. Am Zugriff auf private-Member kannst du einen bösartigen Programmierer genauso wenig hindern.

    naja, Bevormundung liegt mir fern, fuer mich geht es eher um die Wahrung meiner Abstraktion. Fuer mich heisst "Interface" eher: "hier ist das fuer das ich garantiere das es funktioniert", wers ignoriert hat pech :).

    Eigentlich koennen wir hier aufhoeren: wir sind uns einig, das protected:

    -eher seletenere Anwendung findet als public und private
    -fuer datenmember verboten gehoert ( bis auf Ausnahmen 🙂 )

    (bei bedarf die liste bitte anpassen - mag nicht mehr streiten 🙂 )



  • Da kann ich dir nur zustimmen! 🙂


Anmelden zum Antworten