Klassenbibliothek KJ-Classes so richtig auseinander nehmen



  • Hallo,
    Ich habe gerade angefangen an einer Klassenbibliothek zu schreiben. Da es hier eine rege Community gibt, würde ich sie gern von euch Stück für Stück Mal auseinander nehmen lassen. Da ich es in Stücken erledigen will, würde ich das Klasse für Klasse, oder namespace für namespace tun, je nachdem, wie groß der Teil der Klassenbibliothek ist.
    Anfangen würde ich gern mit dem Exception Handling:
    kjException.hpp:

    //==============================================================================
    #ifndef KJExceptionHPP
    #define KJExceptionHPP
    //==============================================================================
    /*
              |---------------------------------------------------------|
              |                  KJ-Classes Infokasten                  |
              |---------------------------------------------------------|
              |   Beschreibung : Exception-Verwaltungsklasse kjException|
              |                  und abgeleitete speziellere Exception- |
              |                  Verwaltungsklassen                     |
              |   Copyright By : Kevin Jakob                            |
              |   Datei        : KJException.hpp                        |                            
              |   Version      : 1.0A in KJ-Classes 1.0A                | 
              |---------------------------------------------------------|
    */
    //==============================================================================
    //Globale Includes
    //==============================================================================
    #include <string>
    #include <Windows.h>
    //==============================================================================
    
    //==============================================================================
    //Lokale Includes
    //==============================================================================
    //==============================================================================
    
    //==============================================================================
    namespace kjExcHandling
    {
        //==========================================================================
        class kjException
        {
            protected:
                std::string  cExc_name;
            public:
                             kjException();
                virtual void ExceptionMessage();
        };
        //==========================================================================
        class kjExcInit:public kjException
        {
            private:
            public:
                             kjExcInit();
                void         ExceptionMessage();
        };
        //==========================================================================
        class kjExcExit:public kjException
        {
            private:
            public:
                             kjExcExit();
                void         ExceptionMessage();
        };
    }
    //==============================================================================
    #endif
    

    kjException.cpp:

    //==============================================================================
    /*
              |---------------------------------------------------------|
              |                  KJ-Classes Infokasten                  |
              |---------------------------------------------------------|
              |   Beschreibung : Exception-Verwaltungsklasse kjException|
              |                  und abgeleitete speziellere Exception- |
              |                  Verwaltungsklassen                     |
              |   Copyright By : Kevin Jakob                            |
              |   Datei        : KJException.cpp                        |                            
              |   Version      : 1.0A in KJ-Classes 1.0A                | 
              |---------------------------------------------------------|
    */
    //==============================================================================
    //Globale Includes
    //==============================================================================
    //==============================================================================
    
    //==============================================================================
    //Lokale Includes
    //==============================================================================
    #include "KJException.hpp"
    //==============================================================================
    kjExcHandling::kjException::kjException()
    {
        cExc_name="GENERAL_EXCEPTION";
    }
    //==============================================================================
    void kjExcHandling::kjException::ExceptionMessage()
    {
        std::string cBuffer="kjException: \""+cExc_name+"\" wurde ausgelöst!";
        MessageBox((HWND)NULL,"Diese Exception ist nicht näher definiert. Sie wurde geworfen, da kein weiter definierter Fehler aufgetreten ist. ",cBuffer.c_str(),MB_OK|MB_ICONERROR);    
    }
    //==============================================================================
    kjExcHandling::kjExcInit::kjExcInit()
    {
        cExc_name="INIT_EXCEPTION";
    }
    //==============================================================================
    void kjExcHandling::kjExcInit::ExceptionMessage()
    {
        std::string cBuffer="kjException: \""+cExc_name+"\" wurde ausgelöst!";
        MessageBox((HWND)NULL,"Diese Exception wurde geworfen, da die \"init\" Funktion einer Klasse fehlgeschlagen ist.",cBuffer.c_str(),MB_OK|MB_ICONERROR);
    }
    //==============================================================================
    kjExcHandling::kjExcExit::kjExcExit()
    {
        cExc_name="EXIT_EXCEPTION";
    }
    //==============================================================================
    void kjExcHandling::kjExcExit::ExceptionMessage()
    {
        std::string cBuffer="kjException: \""+cExc_name+"\" wurde ausgelöst!";
        MessageBox((HWND)NULL,"Diese Exception wurde geworfen, da die \"exit\" Funktion einer Klasse fehlgeschlagen ist.",cBuffer.c_str(),MB_OK|MB_ICONERROR);
    }
    //==============================================================================
    

    Alle Arten von Kritik sind erwünscht, solange sie konstruktiv sind.
    MfG Kevinus.



  • Hi!

    Hier ein paar Punkte dir mir aufgefallen sind:

    -Die windows.h würde ich erst in der CPP Datei inkludieren, da du sie im Header nicht brauchst und damit die Kompilierungszeit unnötig erhöhst.

    -Ich würde bei einem Fehler keine MessageBox erstellen, sondern stattdessen einfach einen string zurückgeben und derjenige, der die Exception fängt wird dann schon wissen was er damit anstellen will.

    -Weiterhin würde ich deinen Exceptions einen Konstruktor mit einem string spendieren, damit jemand der die Exception wirft auch mitteilen kann was denn überhaupt passiert ist, denn ein ExceptionInit sagt mir noch lange nicht was überhaupt schief gegangen ist.

    -Der namespace ist gut, aber dann kannst du auch dein kj vor den einzelnen Klassen weglassen, sieht IMHO nicht besonders hübsch aus und umgeht quasi auch wieder die Idee des namespace.

    Hoffe das kann dir ein wenig weiterhelfen!

    KaPtainCugel



  • Hallo,

    zusätzlich würde ich die riesigen Kommentarkasten wegmachen, zumindest die | und - drumherum. Denn wenn du mal was (größeres) änderst, hast du viel Aufwand mit rumformatieren, ein einfaches:

    /**
     *
     *
     */
    

    tut's auch 🙂

    MfG

    GPC



  • So ich habe mein Exception Handling nach euren Vorgaben verändert, aber den Info Kasten möchte ich gern so beibehalten, auch wenn es mir mehr Arbeit bringt. Hier nun der neue Code:
    kjException.hpp:

    //==============================================================================
    #ifndef KJExceptionHPP
    #define KJExceptionHPP
    //==============================================================================
    /*
              |---------------------------------------------------------|
              |                  KJ-Classes Infokasten                  |
              |---------------------------------------------------------|
              |   Beschreibung : Exception-Verwaltungsklasse kjException|
              |   Copyright By : Kevin Jakob                            |
              |   Datei        : KJException.hpp                        |                            
              |   Version      : 1.0A in KJ-Classes 1.0A                | 
              |---------------------------------------------------------|
    */
    //==============================================================================
    //Globale Includes
    //==============================================================================
    #include <string>
    //==============================================================================
    
    //==============================================================================
    //Lokale Includes
    //==============================================================================
    //==============================================================================
    
    //==============================================================================
    class kjException
    {
        protected:
            std::string cExc_name;
            std::string cExc_reason;
        public:
                        kjException(std::string cExc_reason_input="Kein näher definierter Grund.",std::string cExc_name_input="GENERAL_EXCEPTION");
            std::string ExceptionMessage();
    };
    //==============================================================================
    #endif
    

    Exception.cpp

    //==============================================================================
    /*
              |---------------------------------------------------------|
              |                  KJ-Classes Infokasten                  |
              |---------------------------------------------------------|
              |   Beschreibung : Exception-Verwaltungsklasse "Exception"|
              |                  und abgeleitete speziellere Exception- |
              |                  Verwaltungsklassen                     |
              |   Copyright By : Kevin Jakob                            |
              |   Datei        : KJException.cpp                        |                            
              |   Version      : 1.0A in KJ-Classes 1.0A                | 
              |---------------------------------------------------------|
    */
    //==============================================================================
    //Globale Includes
    //==============================================================================
    //==============================================================================
    
    //==============================================================================
    //Lokale Includes
    //==============================================================================
    #include "KJException.hpp"
    //==============================================================================
    kjException::kjException(std::string cExc_reason_input,std::string cExc_name_input):cExc_reason(cExc_reason_input),cExc_name(cExc_name_input)
    {
    }
    //==============================================================================
    std::string kjException::ExceptionMessage()
    {
        return "Exception \""+cExc_name+"\" wurde ausgelöst! Grund: "+cExc_reason;    
    }
    //==============================================================================
    

    Der Code ist, wie ihr sicher seht, um einiges entschlackter. Da ich mir die abgeleiteten Klassen sparen kann und auch die Windows.h nicht mehr verwenden muss.


Anmelden zum Antworten