Bezeichnung von Funktionen bei Delegation



  • Hallo,

    angenommen ich habe einen Baum, der aus Knoten und Kanten aufgebaut ist, und ich implementiere Bäume mittels der Klasse

    class Tree 
    {
        list<Node*> m_nodes;
        void save() const;
        …
    };
    

    und Knoten mittels der Klasse

    class Node 
    {
        void save() const;
        …
    };
    

    Die Methode Tree::save() bestehe u.a. aus Aufrufen von Node::save():

    void Tree::save() const
    {
        …
        BOOST_FOREACH(Node* n, m_nodes)
            n->save();
    }
    

    Dabei ist Node::save() dergestalt, dass ein Aufruf dieser Methode unabhängig von Tree::save() nichts sinnvolles macht.

    Hierzu zwei Fragen

    • Gibt es eine Bezeichung für die Art von Methoden, wie sie Node::save() darstellt? Also Methoden einer Klasse A, die nur dafür da sind, von der Klasse, die Objekte der Klasse A besitzt, aufgerufen zu werden. Es erinnert mich irgendwie an Template-Methoden (im Sinne von Gamma et al.), ist aber ja keine.
    • Gibt es eine Namenskonvention für solche Methoden? Also so etwas wie bei Template-Methoden, dass man sie mit do_… beginnt.


  • Ich versteh deine Frage nicht ganz, aber dein Code so hat nur private Member und Methoden. Wenn du Ausserhalb von Tree keinen Zugriff auf Node::save() zulassen willst könntest du die Node::save() privat lassen und dort Tree als friend deklarieren. Damit hat Tree zugriff, alle anderen sehen sie aber nicht da private. Alternativ könntest du Node auch als private innere classe in Tree deklarieren - dann kennt niemand ausser dem Tree seine Nodes. Dann müsste das generieren (laden) natürlich ähnlich funtionieren Tree::load() welches dann den Baum aufbaut.



  • Es kommt ein wenig drauf an was dieses save tut. Aber ich würde sagen so wie das klingt ist das, was diese Funktion tun soll nicht Aufgabe des Knoten, sondern des Baumes. Warum sollte ein Knoten wissen was er mit save tun soll, wenn sie nur Sinn macht, wenn sie von einem Baum aufgerufen wird?


Anmelden zum Antworten