Unterschied zwischen einem Objekt und einer Klasse??



  • Hallo,
    ich bin neu sowohl hier als auch in der Objektorientierten Programmsprache 😃

    Also, bitte verzeiht mir diese dämliche Frage 😮

    Aber was ist der Unterschied zwischen einem Objekt und einer Klasse??

    In der UML wird ja ein Objekt und eine Klasse durch ein Rechteck repräsentiert. Das weist ja schonmal darauf hin dass es da nicht viele unterschiede gibt.
    Unterschied in UML: Objekt --> Name unterstrichen, Klasse --> NICHT unterstrichen

    Wo liegt jetzt der Unterschied im C++ 😕

    danke

    gruß mercer



  • OK, hier etwas OOP-Grundlage für dich:

    Eine Klasse ist eine allgemeine Beschreibung eines Datentyps (z.B. "Auto" oder "Mensch") mit allen wichtigen Funktionalitäten (Methoden, Membervariablen etc).
    Ein Objekt ist ein konkreter Gegenstand, der einer bestimmten Klasse angehört (z.B. "mein Skoda" oder "mercer") - wie das Objekt prinzipiell aufgebaut ist und was es kann, bestimmt seine Klasse, aber anhand seiner Elemente (z.B. Farbe, Kennzeichen oder Hubraum) ist jedes Objekt "besonders".



  • Ok,

    Ein Objekt ist demnach einfach ein Teil einer Klasse???

    Kann eine Klasse auch mehrere Objekte Beinhalten???

    gruß mercer



  • mercer schrieb:

    Ein Objekt ist demnach einfach ein Teil einer Klasse???

    Nein, ein Objekt ist die Konkretisierung einer Klasse. "Du" bist das Objekt, "Mensch" ist die Klasse. Du bist kein Teil von Mensch.

    Kann eine Klasse auch mehrere Objekte Beinhalten???

    Ein Objekt kann andere Objekte beinhalten, wenn auch nicht von derselben Klasse. Welche anderen Objekt ein Objekt beinhaltet, ist durch die Klasse festgelegt.



  • Was ich fast vergessen hab:

    Danke CStoll 👍

    Und noch ne weitere Frage:

    Kennt jemand gute eBooks für mich, mit denen man die OOP lernen kann??

    gruß



  • Ist Objekt ein anderes Wort für Instanz? 😕



  • estartu schrieb:

    Ist Objekt ein anderes Wort für Instanz? 😕

    Genau 😃



  • Ah jetzt ja... 😃



  • Klasse verhält sich zu Objekt, wie Typ zu Variable.



  • MFK schrieb:

    Ein Objekt kann andere Objekte beinhalten, wenn auch nicht von derselben Klasse.

    warum nicht von derselben klasse? vielleicht nicht in c++ aber in der theorie doch schon, oder?

    zum thema: ich kenn' so'n typ der gibt java-kurse für einsteiger, der sagt immer zu seinen schülern: "eine klasse ist ein 'bauplan' für objekte"



  • Wenn wir schonmal so schön dabei sind 😃

    Was sind Attribute und was sind Methoden 😕

    gruß mercer

    PS: wäre nett wenn mir jemand nen gutes eBook oder nen guten Link empfehlen könnte mit dessen hilfe ich mir die OOP etwas besser aneignen kann

    Danke



  • mercer schrieb:

    Was sind Attribute und was sind Methoden 😕

    Attribut = Membervariable
    Methode = Memberfunktion

    PS: wäre nett wenn mir jemand nen gutes eBook oder nen guten Link empfehlen könnte mit dessen hilfe ich mir die OOP etwas besser aneignen kann

    Hast du schon da geguckt? http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index



  • Danke erstmal 👍

    [quote="estartu"]
    Attribut = Membervariable
    Methode = Memberfunktion
    [quote]

    Membervariable: sind das die Variablen der Klasse ???

    Kann mir jemand die funktion der Memberfunktion etwas genauer erklären???

    gruß



  • mercer schrieb:

    Membervariable: sind das die Variablen der Klasse ???

    Ja.

    Kann mir jemand die funktion der Memberfunktion etwas genauer erklären???

    Um es mit deinen Worten zu sagen: Das sind die Funktionen der Klasse. 🙂



  • Klasse, Danke 👍 👍

    vlg
    mercer



  • Um beim Bsp 'Mensch' zu bleiben, hier wäre es vieleicht sinnvoll für diese Klasse eine MemberFunktion 'Gehen' einzubauen. Für Dich als Objekt hieße das dann als QuellText:

    Mensch mercer; // Mensch erzeugen *hüstl*
    mercer.Gehen(); //   :D
    

    Ist halt immer so eine Sache mit solchen Beispielen 😉

    Und ja, MemberVariablen sind Variablen, i.d.R. sogar private Variablen, der Klasse.



  • Klassen sind nichts anderes als "Baupläne" für Objekte / Instanzen. Das Objekt "SuperHero" ist eine Variable vom Typ "krieger", "Hans" ein Objekt vom Typ "Mensch". Die Klasse ist abstrakt, das Objekt konkret (Adresse des Objekts: this-Zeiger im realen bzw. virtuellen Speicherraum).

    Klassen enthalten Member-Funktionen (Methoden) und Member-Variablen (Attribute).
    Der "Bau" der Objekte erfolgt in der Konstruktor-Funktion (kurz. Konstruktor).
    Der Konstruktor hat den gleichen Namen wie die Klasse.

    Der Zugriff auf Funktionen und Variablen wird bei deren Deklaration erledigt:
    public, protected oder private.

    Bei private kann nur von innerhalb der Klasse zugegriffen werden.
    Bei public kann man auch von außen auf die Daten der Klasse zugreifen.
    Bei protected können abgeleitete Klassen von außen zugreifen.

    Der Destruktor ist die "Abrissbirne". 😉

    Damit das nicht so trocken 'rüber kommt, ein kleines Konsolen-Beispiel:

    #include <iostream>
    #include <string>
    using namespace std;
    
    void wait()
    {
        std::cin.clear();
        std::streambuf* pbuf = std::cin.rdbuf();
        std::streamsize size = pbuf->in_avail();
        std::cin.ignore(size);
        std::cin.get();
    }
    
    class krieger
    {
      private:
        static int count_;
        string name_;
        int gesundheit_;
        int kraft_;
        int ruestung_;
        void holeAdresse() const;
      public:
        krieger();
        ~krieger();
        //get-Methoden inline
        string getName()    const {return name_;}
        int getGesundheit() const {return gesundheit_;}
        int getKraft()      const {return kraft_;}
        int getRuestung()   const {return ruestung_;}
        //set-Methoden inline
        void setName(string name)   {name_       = name;}
        void setGesundheit(int val) {gesundheit_ = val;}
        void setKraft(int val)      {kraft_      = val;}
        void setRuestung(int val)   {ruestung_   = val;}
    
        void angreifen( krieger& gegner );
    };
    
    int krieger::count_ = 0x40; 
    
    krieger::krieger()
    {
      cout << "ctor von: ";   
      holeAdresse();
      name_ = ++count_; 
      gesundheit_ = 100;
      ruestung_   =  30;
      kraft_      =  10;   
    }   
    
    krieger::~krieger()
    {
      cout << "dtor von: ";
      holeAdresse();     
    }   
    
    void krieger::angreifen( krieger& gegner )
    {
      cout << "Krieger " << name_ << " greift Krieger "
           << gegner.name_ << " an.\n";
      gesundheit_-=5;
      gegner.gesundheit_-= int( 3*kraft_ - 2*gegner.kraft_ - 0.1*gegner.ruestung_ );       
    }
    
    void krieger::holeAdresse() const
    {
      cout << this << '\n';
    }
    
    int main()
    {
      int n;
      cout << "Wieviele Krieger? ";
      cin  >> n;
      krieger* k = new krieger[n];
    
      for(int i=0; i<(n-1); ++i)  
      {   
          cout << endl;
          k[i].angreifen(k[i+1]);
          for(int j=0; j<(n); ++j)  
              cout << k[j].getName() << ": Gesundheit: " << k[j].getGesundheit() << "%\n";
      }  
      cout << endl;
      delete[] k;
    
      wait();
      wait();
    }
    
    #include <iostream>
    #include <vector> //STL
    using namespace std;
    
    void wait()
    {
        std::cin.clear();
        std::streambuf* pbuf = std::cin.rdbuf();
        std::streamsize size = pbuf->in_avail();
        std::cin.ignore(size);
        std::cin.get();
    }
    
    class Lampe
    {   
        private:
            int helligkeit_;
    
        public:
            Lampe() : helligkeit_(0){}
    
            void dimmen(int wert)
            {
                helligkeit_ = wert;
            }
    
            bool getEin() const {return getHelligkeit();}
            int  getHelligkeit() const {return helligkeit_;}
    };
    
    class Schalter
    {   
        private:
            bool ein_;
    
        public:
            Schalter() : ein_(false){}    
            void schalten()    
            {
                ein_ = !ein_;
            }
            bool getEin() const {return ein_;}  
    };
    
    class Beleuchtung
    {
        private:
            vector<Schalter> v_;
            Lampe l_;
    
        public:
            Beleuchtung( vector<Schalter> v, Lampe l ) : v_(v),l_(l){}
    
            void schalten(int i)
            {
                v_[i].schalten();
                if( 
                    (  v_[0].getEin() &&  v_[1].getEin() &&  v_[2].getEin() )   ||
                    (  v_[0].getEin() && !v_[1].getEin() && !v_[2].getEin() )   ||
                    ( !v_[0].getEin() &&  v_[1].getEin() && !v_[2].getEin() )   ||
                    ( !v_[0].getEin() && !v_[1].getEin() &&  v_[2].getEin() )   
                  )
                    l_.dimmen(100);
                else 
                    l_.dimmen(0);
            }
    
            void status() const
            {
                cout << "S1: "   << (v_[0].getEin()?"an ":"aus") << "  " 
                     << "S2: "   << (v_[1].getEin()?"gerade  ":"gekreuzt") << "  "
                     << "S3: "   << (v_[2].getEin()?"an ":"aus") << "  " 
                     << "Lampe: "      << (l_.getEin()?"an ":"aus") << " "
                     << "Helligkeit: " << l_.getHelligkeit() << endl;      
            }    
    };    
    
    int main()
    {
        Lampe l1;
        Schalter s1,s2,s3;
        vector<Schalter> v;
        v.push_back(s1);
        v.push_back(s2); 
        v.push_back(s3); 
        Beleuchtung b1(v,l1);
        for(int i=0; i<3; ++i)
        {
            b1.schalten(0);
            b1.status();
            b1.schalten(1);
            b1.status();
            b1.schalten(2);
            b1.status();
        }    
        wait();
        wait();
    }
    

    Hier siehst Du, wie aus abstrakten Konzepten konkrete Objekte werden. Man versucht mit OOP reale "Objekte" nachzubilden. In der MFC findest Du eine ganze Klassenhierarchie, die "nur auf dem Bildschirm lebende" Objekte aus der Windows-Welt nachbilden (Fenster, Buttons, Listen, Dialoge, Scrollbalken, ...)

    Hier Links zu zwei sehr guten C++-Tutorials:
    http://www.cpp-tutor.de
    http://www.volkard.de/vcppkold/klassen.html



  • 😮 😮 😮

    SCHLUCK,

    naja, bis ich so'n Prog hinbekommen dauerts wohl noch 😮

    Danke für die zahlreichen Beispiele. 👍
    Und Danke für den Link, werd die so schnell wie möglich durchgehen! 🕶

    gruß mercer

    PS:
    Ich bin ein VB/VBA-HobbyProgger, möchte aber auf cpp umsteigen.
    Vielleicht hat ja jemand nen Tipp wie ich das am besten anstelle 😕
    Danke!


  • Administrator

    Ich war vorher VBA mit Excel progger und bin auch auf cpp umgestiegen. Mir ging das sehr leicht mit folgendem Buch:
    Microsoft Visual C++ Schritt für Schritt
    Ist von Chuck Sphar und von der Microsoft Press.

    Da lernst du zuerst Grundlagen zu C++ und dann auch noch etwas von der MFC. Am Ende, wenn das Buch durch hast, hast du eine Art von Paint selber geproggt 😉
    Im Buch ist im übrigen noch eine Autorenversion von Visual Studio 2003 dabei.

    Bzw. allgemein empfiehlt es sich halt ein paar Tutorials zu machen. Gibt nichts schlimmeres als wenn man sich einfach an das Proggen macht, meiner Meinung nach ist das viel zu frustrierend und viel zu gefährlich ^^

    Grüssli



  • Heißt das "Paint" zufällig Scribble?
    Wenn das Buch dann noch auf Deutsch ist, muss ich mir das holen. Ich habe das nämlich mal auf Englisch (gibts in der MSDN kostenlos) durchgearbeitet, das ist genial.


Anmelden zum Antworten