Warum OOP und nicht einfach Funktionen ????



  • Hi,

    ich weis das OOP zu denn Grundlagen einer guten Programmierung zählt aber warum sollten man denn OOP Programmieren wenn man das ganze auch einfacher mit Funktionen lösen kann ? Kann mir das mal jemand erklären ?



  • Zum Üben höchstens. Wenn dein Problem tatsächlich besser prozedural gelöst wird, dann machst du das auch.



  • also sollte man nicht unbedingt oop lernen ?
    ich bin halt leider der einzigste entwickler und muss mir jede kleinigkeit selber beibringen 😞 das kostet sehr viel zeit. bei guten programmieren wie ihr hier hört man immer oop daher dachte ich das man da schon umsteigen sollte ...



  • Weil prozedurale Projekte ab einer bestimmten Größe (hab mal was von einige 10k zeilen unter C++ gelesen) auf eine "magische Grenze" stoßen: das sind zum einen fast unlösbare Namensraumskonflikte, zum anderen ist der mögliche Abstraktionsgrad einfach zu niedrig - das notwendige Kontextwissen, um einen beliebigen Codeabschnitt zu pflegen wird so umfangreich, daß selbst der ursprüngliche Architekt auf Hoffnungslosem posten steht.

    Soll natürlich nicht heißen, das unterhalb von 10k zeilen prozedural ohne probleme geht - die Probleme laufen halt auf, und irgendwann gehts nicht mehr weiter.



  • OOP ist einfach genial, wenn auch viel Tipparbeit. Kapselung, Polymorphie, Abbildung der Realität.



  • oop schrieb:

    also sollte man nicht unbedingt oop lernen ?

    Doch, aber du nicht so absolutistisch wie in deiner Frage angedeutet. OO ist ein Werkzeug, ein sehr gutes sogar, das man auf jeden Fall in seine Werkzeugkiste aufnehmen sollte. Aber es ist nicht das einzige, und wenn eine prozedurale Lösung tatsächlich besser und einfacher ist, dann bringt es nichts, der ganzen Sache mit Gewalt ein OO-Kostüm überzuziehen.



  • ja wie sollte ich denn eurer meinung nach vorgehen um richtig c++ zu lernen?
    hab mir ein bischen was zu zeigern und referenzen angekuckt, dann ein bischen oop und nun ?



  • Eben wolltest du noch OOP lernen, jetzt C++ 😕



  • sagmal ist das so eigentlich überhaupt ein richtiger anfang für eine registry klasse ?

    #include "Registry.hpp"
    class Registry
    {
    
      public:
    
         // Konstruktor TRegistry Objekt erzeugen
         Registry()
         {
            TRegistry *Reg = new TRegistry;
         }
    
         // Dekonstruktor TRegistry Objekt löschen
         ~Registry()
         {
            delete Reg;
         }
    
    ....
    


  • Wie meinst du das?
    Die new/delete-Zeilen könnten wegfallen.



  • Du willst eine Registry Klasse und benutzt dann intern eine Registry Klasse von Borland? Sehr sinnig. 🤡



  • oje, ich kann wohl garnix 😞
    ich will halt einfach ein paar funktionen schreiben um das arbeiten mit der registry zu vereinfachen ...

    kann mir mal jemand ne datenbankklasse posten oder ein link schicken damit ich mir das mal ansehen kann. ich muss halt erstmal sehen wie das profies machen, wie soll ich auch ne klasse coden wenn ich noch nie eine gesehen habe und keiner mir was erklärt ...



  • Shau Dich mal hier um:

    http://c-plusplus.net/tutorials.htm





  • Hi,

    Ich empfehle "Jetzt lerne ich C++" von Jesse Liberty".



  • sin schrieb:

    Du willst eine Registry Klasse und benutzt dann intern eine Registry Klasse von Borland? Sehr sinnig. 🤡

    Wieso nicht? schon mal was von Adaptern gehört? Oder vielleicht hat er noch 'n paar helper für die Registry o.ä. und möchte sich jetzt ne Facade dazu stricken?
    Obwohl du in diesem Fall natürlich recht haben könntest... 😉



  • ok, ich schreib mal kurz was ich eigentlich will und wie ich es bisher gemacht habe.

    ich schreibe gerade eine kleine anwendung mit einem formular wo ich jeweils die verschiedenen frames ein oder ausblende. auf jeder frame müssen aber daten aus der db geladen werden.

    z.b. kunden anlegen, ändern, löschen.

    grundlage des ganzen ist eine ms access datenbank wo ich mittels ado komponente über jet engine 4 draufzugreife:

    Da das Programm ja an jeden beliebigen ort installiert werden kann muss ich also denn pfad zur db auch dynamisch halten und das versuche ich hiermit zu erreichen:

    AnsiString DB_Pfad = ExtractFilePath(Application->ExeName) + "\Database\\Kunden.mdb";

    AnsiString JET = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DB_Pfad + ";Persist Security Info=False";

    Falls diese Verbindung fehl schlägt, sprich eine Exception auslöst versuch ich mittels catch(...) anweisung eine Verbindung über denn MS Access Treiber herzustellen:

    AnsiString Access = "Provider=MSDASQL.1;Persist Security Info=False;User ID=Admin;Extended Properties=\"DSN=Microsoft Access-Datenbank;DBQ=" + DB_Pfad + ";DefaultDir=" + Pfad + ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;\"";

    Meine ganzen Datenbankkomponenten (ADOConnection, ADOQuery und DataSource) liegen auf einen Datenmodul. Dieses Datenmodul include ich nun in jede Frame und greife dadurch auf die Datenbank zu. Da ich hinter jeden Button aber eigentlich fast immer denn selben code (bis eben auf denn sql selbst) habe möchte ich dies in einer funktion oder klasse verarbeiten.

    Beispiel: Anzeige aller Personen in einer Combo Box.

    AnsiString Name, Vorname;
    
       cboxPersonal->Clear();
       lblInfo->Visible = false;
    
       Cursor = crHourGlass;
    
       // alte SQL bereinigen
       frmDB->ADOQuery1->Close();
       frmDB->ADOQuery1->SQL->Clear();
    
       // SQL Abfrage erstellen
       frmDB->ADOQuery1->SQL->Add("SELECT Name, Vorname FROM Personal");
       frmDB->ADOQuery1->SQL->Add("WHERE Status = 'on'");
       frmDB->ADOQuery1->SQL->Add("ORDER BY Name");
    
       // SQL an die DB übertragen
       frmDB->ADOQuery1->Open();
    
       frmDB->ADOQuery1->First();
       while(!frmDB->ADOQuery1->Eof)
       {
          // Inhalte auswerten und an Combobox übergeben ...
          Name    = frmDB->ADOQuery1->FieldByName("Name")->AsString;
          Vorname = frmDB->ADOQuery1->FieldByName("Vorname")->AsString;
    
          cboxPersonal->Items->Add(Name + " - " + Vorname);
    
        frmDB->ADOQuery1->Next();
       }
    
      Cursor =  crDefault;
    

    So, nun steht z.b. das ganze Personal in mit Vor und Nachnamen in einer ComboBox. Wenn nun z.b. die zweite Person ausgewählt wurde hole ich mir einfach denn zweiten satz aus der Query

    frmDB->ADOQuery1->RecNo = cboxPersonal->ItemIndex + 1;
    

    und führe dann erneut einen sql aus der mir die kompletten daten der person holt und in textfelder läd ...

    da ich einfach die ganzen abfragen nur auf denn sql und die auswertung beschränken will und nichtmal weis ob das was ich mach optimal ist bin ich hier um euch um rat zu fragen ...

    ist das richtig oder wie sollte man sowas denn anstellen ???
    wie könnte man denn das obige verbessern ??

    bin für jeden tipp echt dankbar ..


Log in to reply