Brauche ein Objektorientiertes Beispiel



  • Hallo, ich möchte gerne für den Anfang OOP lernen, nun möchte ich mehrere Klassen erstellen die von einer Basis Klasse abgeleitet werden. Was ich brauche sind Ideen, was kann man so für den Anfang erstellen, z.B. Fahrzeug ist die Basisklasse und Auto & LKW sind abgeleitete Klassen.

    Gibts noch andere Ideen??


  • Administrator

    Klar, es gibt tausende, millionen, millarden und womöglich noch mehr an Möglichkeiten. Ich verstehe nicht so recht, was du mit den Ideen willst. Aber naja, wenn du willst, hier noch zwei, welche ich immer wieder sehr gut finde.

    <|-- UML "erbt von" Pfeil
    
    EventConsumer <|-- Widget
    Widget <|-- TextEdit
    Widget <|-- Label
    Widget <|-- ListCtrl
    usw.
    
    Ship <|-- Fighter
    Ship <|-- Trader
    Ship <|-- Drone
    usw.
    

    Grüssli



  • Schnapp dir ein Vogellexikon und modellier die Arten nach (Kannst natürlich auch bei "Tier" anfangen und irgendwann die Säugetiere implementieren).



  • Wie wärs vllt. mit ganz simplen objekten ...
    Wäre am besten habe ich auch gemacht^^
    Beispiel:

    // Basisklasse:
    Fahrzeug
    // Weitere Klassen:
    PKW, LKW
    // Die könen wieder weiter gemacht werden.
    Kabrio, normales Auto, smart, etc...
    12t LKW, 20t LKW, Sattelzug, Kamion, etc...
    

    So wärs auch möglich, das du eine Basisklasse machst einige klassen davon vererben lässt und andere klassen wieder bon denen...

    Ich selber hab das mit mathematischen objekten gemacht wie Quadrat, Rechteck, etc.

    Noch einfacher währe vllt so hier:

    Basis:
    Mensch
    Klassen die Verben:
    Genauere Rassen...
    

    Sich selber(Mensch) kann man nemlich auch am besten Klassifiezieren(Daher auch klasse..) da man selber ein objekt der instanz ist^^ (xD) Was du auch reinmachen könntest währen z.b die 5 Sinne als Klassenmethoden.

    Mfg Wikinger75!



  • Wikinger75 schrieb:

    Noch einfacher währe vllt so hier:

    Basis:
    Mensch
    Klassen die Verben:
    Genauere Rassen...
    

    Sich selber(Mensch) kann man nemlich auch am besten Klassifiezieren(Daher auch klasse..) da man selber ein objekt der instanz ist^^ (xD) Was du auch reinmachen könntest währen z.b die 5 Sinne als Klassenmethoden.

    Mfg Wikinger75!

    Wieso erben Rassen von mensch? Soweit ich weiß, sind alle Menschen gleich! Und wir unterscheiden uns lädiglich in den Values der Attribute. Insofern sehe ich dein Beispiel als falsch im OO-Sinne. Es reicht eigentlich eine Klasse!

    class mensch
    {
        farbe haut;
        farbe augen;
        farbe haare;
        kg gewicht;
        cm hoehe;
    };
    

    Ich vererbe nicht um Unterschiede zu kennzeichnen! Sondern dann, wenn unterschiedliche Fähigkeiten (Methoden) oder andere Attribute vorhanden sind. Ich könnte mir höchstens vorstellen, das man Mann und Frau von mensch ableitet, weil Mann und Frau gewisse unterschiedliche Sexualorgane haben:

    class frau : public mensch
    {
        char koerbchen; // ;-)
        cm   brustumfang;
    };
    
    class mann : public mensch
    {
        bool penis_errektion; // ;-)
    };
    

    Naja, wenns denn sein muß! 😃

    Jedenfalls ein klassischer Fehler zu vererben, wenn eigentlich nur Values sich unterscheiden.

    Dein Autobeispiel ist genauso falsch wie dein Rassenbeispiel. Das ist falsch:

    // FALSCH:
    class automobil;
    class bmw : public automobil;
    class vw : public automobil;
    

    So muß das sein:

    // Richtig:
    class automobil
    {
        string markenname; // keine Vererbung bei der Marke!
        string modell;
        farbe  lack;
        farbe  sitzbezug;
        cm     radstand;
    };
    


  • Grundsätzlich kann man fast alles nehmen. Haushaltgerät als Basis von Mikrowelle, Mixer, Kochtopf. Gebäude als Basis von Turnhalle, Atombunker und Rathaus. So schwierig kann es doch nicht sein, ein Beispiel zu finden?

    Wikinger75 schrieb:

    Noch einfacher währe vllt so hier:

    Basis:
    Mensch
    Klassen die Verben:
    Genauere Rassen...
    

    Rassen? Vielleicht solltest du mit solchen Begriffen etwas aufpassen...



  • naja gut das mit dem mensch ist vllt. daneben 😃
    Aber das mit dem autospiel seh ich net so verkehrt den zu nem 12t LKW kann man mehr erzählen als zu nem normalen lkw, da man da genau auf 12t eingeht...^^

    Mfg Wikinger75.

    @Nexux
    Ja ich weiß es hört sich bisjen kacke an...^^
    Aber es stimmt... (Wissenschaftlich gesehen)



  • Bulli schrieb:

    Dein Autobeispiel ist genauso falsch wie dein Rassenbeispiel.

    Wieso soll Vererbung denn falsch sein und Kennzeichnung per Attribut richtig? Ein BMW ist ein Automobil, genauso wie ein VW einer ist. Je nach Kontext muss man halt abwägen, ob die Unterschiede so gross sind, ob sich Abspaltung eigener Klassen lohnt. Bei diesem Beispiel käme es drauf an, wie genau man Autos spezifizieren will. Aber Vererbung hier grundsätzlich als falsch zu kennzeichnen ist nicht gerechtfertigt.

    Wikinger75 schrieb:

    Ja ich weiß es hört sich bisjen kacke an...^^
    Aber es stimmt... (Wissenschaftlich gesehen)

    Wissenschaftlich gesehen? Wenn du nicht gerade Nazi-Wissenschaftler meinst, dann wohl eher nicht...



  • Wieso soll Vererbung denn falsch sein und Kennzeichnung per Attribut richtig? Ein BMW ist ein Automobil, genauso wie ein VW einer ist. Je nach Kontext muss man halt abwägen, ob die Unterschiede so gross sind, ob sich Abspaltung eigener Klassen lohnt. Bei diesem Beispiel käme es drauf an, wie genau man Autos spezifizieren will. Aber Vererbung hier grundsätzlich als falsch zu kennzeichnen ist nicht gerechtfertigt.

    Sehe ich genau so...

    Wissenschaftlich gesehen? Wenn du nicht gerade Nazi-Wissenschaftler meinst, dann wohl eher nicht...

    Wie kommst du auf Nazi? xD



  • Nexus schrieb:

    Bulli schrieb:

    Dein Autobeispiel ist genauso falsch wie dein Rassenbeispiel.

    Wieso soll Vererbung denn falsch sein und Kennzeichnung per Attribut richtig? Ein BMW ist ein Automobil, genauso wie ein VW einer ist. Je nach Kontext muss man halt abwägen, ob die Unterschiede so gross sind, ob sich Abspaltung eigener Klassen lohnt. Bei diesem Beispiel käme es drauf an, wie genau man Autos spezifizieren will. Aber Vererbung hier grundsätzlich als falsch zu kennzeichnen ist nicht gerechtfertigt.

    Wikinger75 schrieb:

    Ja ich weiß es hört sich bisjen kacke an...^^
    Aber es stimmt... (Wissenschaftlich gesehen)

    Wissenschaftlich gesehen? Wenn du nicht gerade Nazi-Wissenschaftler meinst, dann wohl eher nicht...

    interessantes thema. gibt es menschliche rassen überhaupt? falls ja, darf man die unterschiede untersuchen oder ist das ein tabu?
    aber das erfordert einen anderen thread in einem anderen forum.



  • Wikinger75 schrieb:

    Wie kommst du auf Nazi? xD

    Überleg doch mal, wie der Begriff "Rasse" auf Menschen angewandt verstanden wird.

    Ich will im Übrigen keine Diskussion darüber losbrechen, sondern nur dich am Rande darauf hinweisen.



  • Wikinger75 schrieb:
    Wie kommst du auf Nazi? xD

    Überleg doch mal, wie der Begriff "Rasse" auf Menschen angewandt verstanden wird.

    Ich will im Übrigen keine Diskussion darüber losbrechen, sondern nur dich am Rande darauf hinweisen.

    Gut ich will hier keine Diskussion anfangen, ich sag nur ma warum ich auf Rassen gekommen bin...
    Na Klar der Mensch unterscheidet sich nicht groß auser paar äusere Sachen wie Haut, etc. Ich will hier auch nicht näher drauf eingehen, aber z.b schwarze Haut hat andere eigenschaften und somit methoden als weiße haut(Die hat auch wieder andere), Schwarze haut hat z.b den effekt das sie besser wärme speichert als weiße und auch schwärer verbrennt wie die weiße (z.b durch UV Licht).

    Das meinte ich damit im OOP Rahmen...
    Ich wollte auch kein streit anfangen oder so damit das geklärt ist^^

    Ich würd sagen hier ist das Them azuende da alles gesagt ist...

    Mfg Wikinger75.



  • Wikinger75 schrieb:

    Wikinger75 schrieb:
    Wie kommst du auf Nazi? xD

    Überleg doch mal, wie der Begriff "Rasse" auf Menschen angewandt verstanden wird.

    Ich will im Übrigen keine Diskussion darüber losbrechen, sondern nur dich am Rande darauf hinweisen.

    Gut ich will hier keine Diskussion anfangen, ich sag nur ma warum ich auf Rassen gekommen bin...
    Na Klar der Mensch unterscheidet sich nicht groß auser paar äusere Sachen wie Haut, etc. Ich will hier auch nicht näher drauf eingehen, aber z.b schwarze Haut hat andere eigenschaften und somit methoden als weiße haut(Die hat auch wieder andere), Schwarze haut hat z.b den effekt das sie besser wärme speichert als weiße und auch schwärer verbrennt wie die weiße (z.b durch UV Licht).

    Ich will mal weg von dem Rassen-Thema... deshalb gleich mal zu deinem Beispiel, wie sich die Hauttypen unterschiedlich bei Sonne verhalten. Und schon müsstest du an dem Begriff erkennen, wie man sowas modellieren würde: Hauttyp. Fällt dir was auf? Genau! Immer noch kein Grund einen anderen Menschen zu klassifizieren!

    class haut
    {
        public:
           void sonnen_einstrahlung(int uv_wert) = 0;
    };
    
    // nachfolgende Klassen implementieren obere abstrakte Funktion:
    class schwarze_haut : public haut;
    class weisse_haut : public haut;
    

    Und dann:

    class elf
    {
        haut hauttyp;
    public:
         // Ctor:
         elf(haut typ) : hauttyp(typ) {}
    
         // Gesetz von Demeter:
         void sonnen_einstrahlung(int uv_wert)
         {
             hauttyp.sonnen_einstrahlung(uv_wert);
         }
    };
    

    Man sollte bei der Modellierung von Mensch, Auto usw. nicht vergessen, das die Attribute auch komplexe Typen sein können oder gar sollten. Denn Mensch und Auto bestehen aus Kompositionen - aus mehreren komplexen Teilen.
    Ich sehe bei den verschiedenen Hauttypen immer noch keinen Grund für Vererbung.

    edit von volkard: im code elf statt mensch. weiterführung der fachdiskussion mit elfen unterliegt keinem tabu und man kann elfenrassen frei definieren.



  • Nachtrag: der obere Code ist mehr Pseudocode... das hauttyp-Attribut müsste natürlich ein Pointer sein. 😉



  • Bulli schrieb:

    Man sollte bei der Modellierung von Mensch, Auto usw. nicht vergessen, das die Attribute auch komplexe Typen sein können oder gar sollten. Denn Mensch und Auto bestehen aus Kompositionen - aus mehreren komplexen Teilen.
    Ich sehe bei den verschiedenen Hauttypen immer noch keinen Grund für Vererbung.

    das (mit pointer) scheint mir naheliegend, wenn ein elf seine haut nachträglich ändern kann.

    normale elfen können das nicht. trotzdem ist der hauttyp zu unwesentlich für eine vererbung. vielleicht

    template<typename hauttyp=hautgruen>
    class elf///*evtl*/:public class basiself
    

    oder ref nehmen statt pointer, um unveränderlichkeit zu machen.

    uups, jetzt hat schon wieder die verwendete sprache meine modellierung beeinflußt. wenn das mein uml-liebender programmierprofessor wüßte, müßte er mir glatt nachträglich einen notenpunkt abziehen.



  • Hem, ist in OO überhaupt sowas wie Template bekannt? Mit C++-Fähigkeiten kann man sicherlich vieles anders lösen, als im ursprünglichen OO-Sinne.



  • Nexus schrieb:

    Rassen? Vielleicht solltest du mit solchen Begriffen etwas aufpassen...

    Nexus schrieb:

    Wenn du nicht gerade Nazi-Wissenschaftler meinst, dann wohl eher nicht...

    Überleg doch mal, wie der Begriff "Rasse" auf Menschen angewandt verstanden wird.

    was ist das denn jetzt schon wieder für ein unsinn?!

    http://www.bpb.de/publikationen/EMOIKU,0,0,Rasse.html schrieb:

    Naturwissenschaftler definieren Rasse als eine Gruppe von Lebewesen, die sich durch gemeinsame Erbanlagen von anderen Art-Angehörigen unterscheidet.

    Grundgesetz Artikel 3 schrieb:

    Niemand darf wegen seines Geschlechtes, seiner Abstammung, seiner Rasse, seiner Sprache, seiner Heimat und Herkunft, seines Glaubens, seiner religiösen oder politischen Anschauungen benachteiligt oder bevorzugt werden.

    menschen gehören rassen an. so ist das nun mal, daran ist wirklich nichts verwerflich.
    das kollektive schuldbewusstsein nimmt ja immer groteskere züge an...





  • Boah, ich beobachte solche Diskusionen des öfteren. Muss es denn immer sein, das wirklich Qualifizierte Benutzer wie volkard, Nexus und der Rest der Jungs bei normalen Fragen immer so krass vom Thema abweichen? Ohne euch anzufahren oder irgendwas, ich bin immer wieder von eurem Wissen über C++ begeistert, aber dann dieses "sinnlose" abschweifen und "Jedes-Wort-auf-die-Goldwaage" gelege ist irgendwo belastend.



  • elise schrieb:

    http://www.inidia.de/rasse-begriff-unesco.htm

    ist imho zwar populistischer unfug, spielt aber auch keine rolle. die dümmliche nazikeule braucht man trotzdem nicht auspacken, dafür gibt es nun wirklich keinen grund.


Anmelden zum Antworten