Wann zieht man Namensräume Klassen vor?



  • Zum Beispiel bei Variablen von Kofigurationdateien, oder nicht?
    Sonst noch Ideen?
    Danke.



  • Ich nutze namespaces immer da wo sachen zusammengehören, aus denen sich jedoch keine Klassen ergeben. ZB wenn man Mathefunktionen oder Matheklassen hat die alle in einen Mathebereich gehören, oder aber Projektteile. Man soltle es aber mit Namespaces nicht übertreiben, gibt da einige Sachen im Netz da hat mans mit den namespaces in namespaces etwas sehr übertrieben.



  • Wenn Funktionen keine gemeinsamen Daten haben, auf denen sie arbeiten, sind Klassen sinnlos -> namespace
    Das beste Bsp. dort sind wohl - wie Xebov gesagt hat - mathematische Funktionen oder Konstanten.

    Bei Konfigurationsdaten würde ich mich wahrscheinlich auch für namespace entscheiden - zumindest bisher hab ich noch keinen Fall gehabt, wo Konfigurationsdateien so komisch zusammengehangen haben, dass es eine Klasse gebraucht hätte...

    bb


  • Administrator

    Man zieht Namensräume nicht Klassen vor. Eine Klasse bewältigt EINE Aufgabe (pauschal gesagt), ein Namensraum umfasst mehrere Aufgaben. Die Frage ist höchstens, ab wann braucht man Klassen und wann kommt man nur mit freien Funktionen, welche womöglich ein paar statisch globale Variablen benötigen, aus.

    Ich würde dann wohl sagen, wenn du kein Objekt brauchst, brauchst du auch keine Klasse.
    Dies möchte ich aber mit einer kleinen Bemerkung versehen: Auch wenn man nur ein Objekt benötigt, sollte man bereits zur Klasse greifen. Eine Klasse bietet nämlich viele angenehme Vorteile, wie zum Beispiel Konstruktoren und Destruktoren.

    Grüssli



  • Dravere schrieb:

    Ich würde dann wohl sagen, wenn du kein Objekt brauchst, brauchst du auch keine Klasse.

    Dazu vielleicht gleich zwei Ausnahmen, die eine davon ziemlich und die andere etwas weniger wichtig: Abstrakte Basisklassen und Template-Metafunktionen. 🙂

    Aber grundsätzlich kommt man mit der Regel recht weit. Ich finde zum Beispiel eine Klasse voller static -Member recht unschön, dann macht man lieber ein Singleton.



  • Nexus schrieb:

    Dravere schrieb:

    Ich würde dann wohl sagen, wenn du kein Objekt brauchst, brauchst du auch keine Klasse.

    Dazu vielleicht gleich zwei Ausnahmen, die eine davon ziemlich und die andere etwas weniger wichtig: Abstrakte Basisklassen und Template-Metafunktionen. 🙂

    Klassen != Objekte. Ein Objekt gibt es erst zur Laufzeit und die Basisklasse gehört ja dann zu dem Objekt, welches davon erbt.

    Und templates sind ja auch keinen Klassen, sondern Familien von Klassen und ein Objekt braucht man trotzdem auch, wenn man noch so viel Metafunktionalität hat, da sonst einfach mal gar nichts passiert.

    Somit braucht man auch in den beiden von dir genannten "Ausnahmen" Objekte. 😉



  • unschluessig schrieb:

    Zum Beispiel bei Variablen von Kofigurationdateien

    Was sind Variablen einer Datei? Größe, Name...??? 😕


  • Administrator

    drakon schrieb:

    Und templates sind ja auch keinen Klassen, sondern Familien von Klassen und ein Objekt braucht man trotzdem auch, wenn man noch so viel Metafunktionalität hat, da sonst einfach mal gar nichts passiert.

    Könnte sein, dass Nexus die Templatemetaprogrammierung gemeint hat. Und da erstellt man wirklich Klassen, ohne jemals ein Objekt davon anzulegen. Aber dort geht es halt einfach nicht anders und ist sowieso eher ein Spezialgebiet. In einer solchen Definition, kann man das wohl getrost ignorieren.

    Kurz konkret, worum es geht:

    template<typename T>
    struct IsSInt
    {
      enum { result = 0; }
    };
    
    template<>
    struct IsSInt<int>
    {
      enum { result = 1; }
    };
    

    Du wirst nie ein Objekt von IsSInt erstellen 😉

    @Nexus,
    Wie drakon sagt, auch von der abstrakten Basisklasse wirst du indirekt ein Objekt erstellen. Wenn nicht, dann hast du eine Basisklasse, von welcher nicht geerbt wird, was mir ziemlich sinnlos erscheint 😉

    Ansonsten kann ich nur noch etwas sagen: Erbsenzähler! 🤡

    Grüssli



  • Dravere schrieb:

    Könnte sein, dass Nexus die Templatemetaprogrammierung gemeint hat. Und da erstellt man wirklich Klassen, ohne jemals ein Objekt davon anzulegen. Aber dort geht es halt einfach nicht anders und ist sowieso eher ein Spezialgebiet. In einer solchen Definition, kann man das wohl getrost ignorieren.

    Ja, das meinte ich. Ich schrieb ja auch "etwas weniger wichtig".

    Dravere schrieb:

    Ansonsten kann ich nur noch etwas sagen: Erbsenzähler! 🤡

    Ich habe meinen Post hauptsächlich geschrieben, weil "kein Objekt -> keine Klasse" sehr schnell irreführen kann, und nicht etwa, um dich zu verbessern oder so. Aber das weisst du wohl... 😉



  • Dravere schrieb:

    Du wirst nie ein Objekt von IsSInt erstellen 😉

    Hmm. Man muss aber zumindest versuchen eine Instanz davon zu erstellen.

    Man müsste jetzt aber recht genau über die Definitionen nachdenken, ob das schon reicht.. Aber ich denke, dass wir uns verstanden haben.. 🙂


Log in to reply