Private Methoden überhaupt sinnvoll?



  • Seit heute quält mich eine Frage: Sind private Methoden überhaupt sinnvoll?

    Ich kann mir gerade nur vorstellen damit etwas zu verstecken, bspw. non-copyable, etc.

    Für alles andere verstecke ich doch lieber die Implementierungsdetails als Funktion im anonymen Namespace im .cpp-File, oder? Welche Gründe gibt es private Methoden sonst zu haben?

    Trotzdem sieht man sie überall. Warum?

    MfG SideWinder



  • Wäre eine Sprache schön die Klassen überhaupt nur die Deklaration von Interfaces erlauben würde und mehrere Implementierungen erlauben würde, falls nur eine existieren soll handelt es sich eben um die Standardimplementierung?

    Like:

    MyClass obj = new MyClass(); // Standard impl
    
    MyClass obj2 = new OtherMyClass(); // Other impl
    
    class interface MyClass
    {
        void foo ( );
    }
    
    class implementation MyClass // std impl
    {
        const string out = "test"; // jeder hat seine eigenen membervars
        int size = 1; // diese impl speichert sich die size, die andere berechnet sie bspw.
    
        void foo ( ) { cout << out; }
    }
    
    class impl OtherMyClass // other
    {
        void foo ( ) { cout << "other"; }
    }
    

    Wär das nicht ein wunderschönes Konzept?

    MfG SideWinder



  • die sind doch praktisch. willst du etwa globale friend-funktionen machen. da geht dir aber virtuell flöten.



  • Dich hab ich gerade im IRC gesucht um eben dir diese Frage zu stellen 🙂

    C++: Warum unbedingt friends? Wieso können die nicht getter/setter nutzen?

    Meine Sprache: Wäre nicht nötig, jede Impl würde ihre eigenen Membervariablen haben.

    MfG SideWinder



  • SideWinder schrieb:

    Dich hab ich gerade im IRC gesucht um eben dir diese Frage zu stellen 🙂
    C++: Warum unbedingt friends? Wieso können die nicht getter/setter nutzen?

    Und die getter und setter sind public? dann kann ich die member-variablen auch gleich public machen und getter/setter weglassen. nee, friend wäre hier schon richtig. und tut ja nicht weh. weher tut, daß es sich so nicht-objektorientiert anfühlt.
    was stört eigentlich an private funktionen? nur die compilierungszeit? ich habe da von einem i7 gehört, der kann mit 12 threads parallel compilieren. *sabber*



  • Im Gegensatz zu deiner (im ersten Post) Möglichkeit mit namespaces in der .cpp kannst du mit bei privaten virtuellen Funktionen in den Derivaten doch noch neu definieren.

    Dein Ansatz ist durchaus nett, allerdings ist das das, was man mit abstrakten Klassen und Polymorphie hat und dafür muss man nicht einmal viel im Code ändern.



  • In C++ hat man offenbar nicht die Möglichkeiten das anders zu erledigen. Heben wir die Diskussion nach außen: Wenn meine Sprache das Problem nicht hat, weil bspw. Interface und Implementation getrennt sind. Wäre das nicht wunderschön?

    Was mich daran stört? Es fühlt sich nicht gut an. Man könnte als Schnittstellendefinition einfach das Interface versenden. Nun muss man mit UML zeichnen.

    MfG SideWinder



  • SideWinder schrieb:

    Wär das nicht ein wunderschönes Konzept?

    Ist das nicht durch den Pimpl-Trick in C++ schon voll abgedeckt?



  • Ich könnte mir vorstellen, daß eine Klassendefinition in mehreren Dateien stehen darf und dann zusammengestückelt wird. "partial class" heißt das glaube ich in machen Sprachen.
    Und liebe Programmierbären stopfen die public-Sachen in eine Datei und die private-Sachen in eine andere.



  • volkard schrieb:

    SideWinder schrieb:

    Wär das nicht ein wunderschönes Konzept?

    Ist das nicht durch den Pimpl-Trick in C++ schon voll abgedeckt?

    Was hat sein Beispiel mit Pimpl zu tun?



  • drakon schrieb:

    volkard schrieb:

    SideWinder schrieb:

    Wär das nicht ein wunderschönes Konzept?

    Ist das nicht durch den Pimpl-Trick in C++ schon voll abgedeckt?

    Was hat sein Beispiel mit Pimpl zu tun?

    Verstecken der Implementierung wohl.

    Hmm, überzeugt, C++ kann schon wieder alles. Irgendwie muss man aber nur wissen wie. Es ist nicht so, dass C++-Features entgegenleuchten und sagen "so gehörts natürlich gemacht".

    MfG SideWinder



  • SideWinder schrieb:

    drakon schrieb:

    volkard schrieb:

    SideWinder schrieb:

    Wär das nicht ein wunderschönes Konzept?

    Ist das nicht durch den Pimpl-Trick in C++ schon voll abgedeckt?

    Was hat sein Beispiel mit Pimpl zu tun?

    Verstecken der Implementierung wohl.

    Hmm, überzeugt, C++ kann schon wieder alles. Irgendwie muss man aber nur wissen wie. Es ist nicht so, dass C++-Features entgegenleuchten und sagen "so gehörts natürlich gemacht".

    MfG SideWinder

    Ja, stimmt. Habe das wohl zu lokal angeschaut.

    Klar kann man das in C++ machen, aber darum geht es bei solchen "neuen" Sachen oftmals ja nicht. Gehen tut ja auch alles in C. Aber ich finden deinen Ansatz eigentlich schon nicht schlecht, dass man das ganze ein wenig fester trennt.

    Allergings habe ich das Gefühl, dass das eine solche Trennung für einen neue Sprache in dem Sinne nicht wirklich relevant ist. Die logische Kopplung kann, denke ich durch eine gescheite Sprachdefinition und Compiler umgangen werden.


Log in to reply