Eigene Klassen oder Switchcase?



  • Hallo zusammen,

    ich schreibe grade an einem Programm, darin habe ich eine Menge Bücher, die Bücher haben Texte, welche aus Absätzen bestehen.

    Jetzt stellt sich mir die Frage, wie gehe ich damit um, wenn Absätze vorgelesen werden:

    a) für jeden Einzelfall eine eigene Datei
    lese_absatz1.cpp : class Lesung : public Absatz {Leins(); void lesenAktion(){...};}
    lese_absatz2.cpp : class Lesung : public Absatz {Lzwei(); void lesenAktion(){...};}
    lese_absatz3.cpp : class Lesung : public Absatz {Ldrei(); void lesenAktion(){...};}

    b) alles im einem umfangereichen switch-case
    switch(LeseAbsatzNr) {case 1: ...; break; case 2: .... ;break; case 3: ....; }

    Die Vor- und Nachteile die ich dabei befüchte: das switchcase wird sehr lang, also bald unübersichtlich. Die Dateien werden sehr viele Einzeldateien, das wird sich langfristig daher vermutlich stark auf die Compilezeit auswirken, nehme ich an.

    Gibt es dazu "best-practice" Ratschläge? Wie machen das andere in der Praxis? Welche Auswirkungen übersehe ich? Vermutlich gibt es Auswirkungen, wie im Bereich Speicherbedarf wegen der object header, oder bei der Performance. Haben ihr Hinweise auf Literatur, Vorträge, Codebeispiele oder eine Meinung dazu?

    Danke im Voraus



  • Bücher... als Klassen in einem Programm?
    Beschreib vielleicht mal was dein Programm machen soll. Weil so ohne weiteren Kontet, hört sich das erstmal nach dem falschen Ansatz an.
    Bücher sind ja nichts "aktives", das sind bloss daten. Und Daten speichert man normalerweise entweder in Datenfiles (gibt verschiedenste Format), Datenbanken, oder, wenn es Sinn macht, in Datenstrukturen im Programm.
    Aber man macht nicht eine Klasse pro Buch. Ich wüsste nicht was da der Sinn sein sollte.



  • Es ist hier gar nicht so wichtig, dass es um Bücher geht, es war nur ein Beispiel. Du könntest auch sagen Monster in einem Spiel. Oder Datensätze, deren Daten eigene Funktionen mitbringen. Mir geht es viel mehr um die Theorie dahinter. Hier im konkreten Fall, mit etwa 200 cases, ist es vermutlich egal und ich könnte es im Problemfall auch leicht umschreiben, um zu testen, ob der andere Ansatz besser ist. Ich frage mich, wie es "richtig" gemacht wird, wenn es 2.000, 20.000 oder 2.000.000 Bücher/Monster/Daten werden. Wofür entscheidet man sich dann? Welche Fragen muss man sich stellen?



  • Hallo @Sharky ,
    wie würdest Du die Frage "Eigenes Auto oder nächste Kreuzung abbiegen?" beantworten? Da muss schon etwas mehr kommen.



  • Weder noch, weil beides bei dir, wie du schon selbst erkannt hast, zu umfangreichen (unübersichtlichen) Code führt.
    Packe einfach die unterschiedlichen Funktionen in ein Array (wenn die Indizes, wie bei dir LeseAbsatzNr, fortlaufend sind) oder aber in eine std::map<>, z.B.

    const std::function<void ()> functions[] =
    {
      Leins, Lzwei, Ldrei, // ... mit besseren Namen!
    };
    

    und rufe sie dann mit einer Anweisung auf:

    functions[LeseAbsatzNr]();
    

    (evtl. vorher noch den Range überprüfen, bzw. bei std::map<> mit find).


  • Mod

    Falls das den unbedarften Lesern nicht sofort auffällt: Hier schwingen Cyborg-Beta-Gefühle im Thread.


Anmelden zum Antworten