Bestehendes Programm mit verschachtelten Klassen. Aber wieso?



  • Moin moin,

    ich hab mal wieder ne Frage. Dieses mal eine grundlegendere Verständnisfrage. Damit ich endlich mal ein wenig "Wissen" in C/C++ ansammeln kann. Folgendes Programm ist gegeben:

    Hauptschleife:
    - erstellt ein Objekt der Klasse_1
    - benutzt die darin enthaltenen Funktionen mit
    - - Klasse_1.Funktion_1

    Klasse_1:
    - enthält div Funktionen (zB Funktion_1)
    - In denen ein Objekt der Klasse_2 erstellt wird
    - benutzt die darin enthaltenen Funktionen mit
    - - Klasse_2.Funktion_2

    Klasse_2:
    - läd eine DLL
    - stellt Prototypen der enthaltenen Funktionen zur Verfügung
    - - also zB Funktion_2

    Also greife ich von der Hauptschleife auf eine Funktion in der 1. Klasse zu, welche auf Funktionen in der 2. Klasse zugreift, welche letztlich aus einer DLL kommen ....

    Gibt es da einen Sinnvollen Grund für, warum man nicht einfach im Hauptprogramm die DLL laden sollte und dort direkt drauf zugreifen? Wäre das nicht übersichtlicher? Gut, man hätte dann ein langes Programm ... Übersichtlichkeit ist da wohl Geschmackssache. Aber wie gesagt: Gibt es einen wirklichen Grund es so zu verschachteln?

    Lg, Lukas

    PS: nein, derjenigen, der das Programm geschrieben hat, kann ich nicht fragen, wieso er es ausgerechnet so gemacht hat.



  • Was ist für dich ein "wirklicher" Grund?
    Es gibt viele Gründe Sachen beim Programmieren zu trennen/kapseln. Die sind aber meist keine "harten" Gründe im Sinn von "geht nicht anders", sondern "best practices" deren Einhaltung halt von vielen Programmierern als Sinnvoll erachtet wird. Hat sich halt herausgestellt dass es gewisse Dinge parktisch sind. Zu besser verständlichem und/oder besser wartbarem Code führen.

    Ist ähnlich wie die Frage ob es einen "wirklichen" Grund dafür gibt dass Leute üblicherweise nen Kleiderschrank haben. Man könnte die Kleider ja auch nach dem Waschen einfach in das nächstbeste Möbel stopfen wo gerade Platz ist.

    Und auf deinen konkreten Fall kann ich nicht viel sagen, ausser dass das was du beschreibst - in dieser äusserst vagen/abstrakten Form - nicht ganz verkehrt klingt. Um konkreter zu werden müsste ich den Code sehen.



  • So allgemein wie das von dir beschrieben ist, kann man nicht wirklich viel zur tatsächlichen Motivation dahinter sagen, ein naheliegender Grund könnte jedoch Abstraktion sein:

    Möglicherweise gibt es verschiedene DLLs/Bibliotheken die Klasse_1 nutzen kann, um ihre Funktionalität zur Verfügung zu stellen.
    Klasse_2 könnte dabei eventuell das konkrete C-Interface der Bibliothek kapseln und Klasse_1 ein allgemeines Interface zum Zugriff auf Bibliotheken dieser Art darstellen.

    Beispiel: Datenbank-Interface

    Klasse_1 stellt allgemeine Funktion zur verfügung, z.B. erstelle_datensatz() .
    Geladene DLL kann eine von mehreren Datenbank-APIs sein, z.B. für SQLite, Oracle, PostgreSQL, etc.
    Klasse_2 kapselt dabei datenbankspezifische API ( pg_connect() , oci_connect() , etc.)

    Vorteil: Im Programm selbst verwendet man nur datenbank-agnostischen Code, der mit jeder Datenbank funktionieren kann.
    Datenbankspezifische Funktionsaufrufe wurden mit den zusätzlichen Klassen wegabstrahiert.

    Wie gesagt, das ist nur ein möglicher Grund (also reine Spekulation).
    Vielleicht gehst du etwas mehr ins Detail (konkreter Code?), dann kann man eventuell mehr sagen.

    Gruss,
    Finnegan


Log in to reply