Wie macht man aus einer Abfrage eine Klasse?



  • Eigentlich ist ja eine Abfrage von Daten aus einer Datei eher etwas mit einem Vorgang zu tun, und nicht so sehr mit einem Objekt. Trotzdem ist mir plötzlich der Einfall gekommen, dass so eine Abfrage irgendwie auch ein Objekt ist, dessen Elemente z.B. vom Typ HFILE* oder DLGPROC sein könnten, weil ja irgendwie erreicht werden soll, dass die Abfrage für den Anwender wahrnehmbar ist.
    Habt ihr schon einmal etwas von 'Abfrageklassen' gehört, oder ist eine Abfrage eine so offensichtlich prozedurale Angelegenheit, dass meine Idee Unsinn ist? Hört sich irgendwie nämlich so an, als wollte man aus einem Vorgang ein Objekt machen. Andererseits kann ich mir gut vorstellen, dass man sinnvoll konkrete Abfrageklassen von einer Basisklasse ableiten könnte?



  • Versteh überhaupt nicht was du meinst.
    Versuche dich ein bisschen klarer aust´zudrücken.
    Z.b. Definiere Abfrageklasse genauer
    mfg



  • Eine Anwendung kann zum beispiel eine Dialogbox anbieten, die eine Eingabemaske für Daten in eine Datei sind. Ein Datensatz nach dem anderen. Natürlich sollte der Anwender später die Daten wieder sinnvoll abfragen können, um etwa einen speziellen Datensatz zu löschen oder auch nur einzelne Teile eines Datensatzes zu löschen, wofür die Anwendung auch gleich eine extra Dialogbox bereitstellen müsste. Jetzt können aber Abfragen so unvorhersehbar verschieden geartet sein, dass man natürlich nicht für jede eventuelle Abfrage die passieren könnte, auch gleich die passende Dialogbox bereitstellen wird können. Man wird eher zunächst einmal für die typischen Abfragen (etwa zum Zwecke des Entfernens einzelner Datensätze etc.), die der Anwender in jedem Fall wird haben wollen, eine Dialogbox-Resource plus der zugehörigen Prozedur für die Messages bereitstellen, richtig?
    Natürlich passiert jetzt, dass der Anwender gerne alle möglichen Abfragen, etwa, wieviele Kunden er in einem speziellen Zeitraum hat gewinnen können (nur als Beispiel), plötzlich auch ganz gerne hätte - was wieder eine neuerliche Dialogbox plus zugehörige Prozedur für die Messages der aufs Neue wieder total anders funktionierenden Controls erforderlich macht.
    Was mir da auffällt, ist, dass alle Abfragen dann zwei Dinge gemeinsam haben:

    1. Sie arbeiten mit der selben Datei.
    2. Sie alle brauchen eine Behandlungsprozedur für eine Dialogbox, die natürlich
      jedes Mal anders implementiert ist.

    Das hat mich irgendwie an Polymorphismus erinnert: Gemeinsame Elemente (HFILE*) und gleich lautende Funktionen, die aber je nach Spezialfall etwas anderes machen (DlgProc).

    Ich bin leider in punkto Dateiverarbeitung ein Totalanfänger, möchte aber, um es zu lernen, zur Übung ein gut erweiterbares datenbankähnliches Programm schreiben, drum interessiert mich Eure Meinung, ob ich da an das Problem total verkehrt rangehe, wenn ich sowas mache wie:

    class Query{
     HFILE* FileOfInterest;
     public:
     Query(HFILE*,HWND DiaBox);
     virtual  BOOL InterfaceManager(HWND hDlg, UINT message, WPARAM wParam,
                                    LPARAM lParam){
       // Und hier erst einmal eine Implementierung für die Dialogbox, die
       // für das Löschen einzelner Datensätze zuständig ist
       }
    

    Natürlich nicht genau so, wie das da steht, mir ging's mehr über die prinzipielle Idee, eine Abfrage als Klasse aufzufassen, die durch Ableitung dann spezialisierbar ist.



  • Totalanfänger schrieb:

    Jetzt können aber Abfragen so unvorhersehbar verschieden geartet sein, dass man natürlich nicht für jede eventuelle Abfrage die passieren könnte, auch gleich die passende Dialogbox bereitstellen wird können.

    Nein. Man kann doch einfach eine Dialogbox erstellen und je nachdem mit Inhalt füllen 😉

    Natürlich nicht genau so, wie das da steht, mir ging's mehr über die prinzipielle Idee, eine Abfrage als Klasse aufzufassen, die durch Ableitung dann spezialisierbar ist.

    Du bindest eine Klasse die nichts mit GUI zu tun hat, fest an die GUI. das gefällt mir nicht.

    zumal es dir nichts bringt. was kannst du damit, was du sonst nicht kannst?



  • Totalanfänger schrieb:

    class Query{
     HFILE* FileOfInterest;
     public:
     Query(HFILE*,HWND DiaBox);
     virtual  BOOL InterfaceManager(HWND hDlg, UINT message, WPARAM wParam,
                                    LPARAM lParam){
       // Und hier erst einmal eine Implementierung für die Dialogbox, die
       // für das Löschen einzelner Datensätze zuständig ist
       }
    

    Gefällt mir gut. 100% OOP. Mach weiter so.
    @Shade HERR Mod, wo gibt's denn hier PM?


Log in to reply