Mehrfachvererbung von Klassen mit gemeinsamer Basis



  • Das Projekt ist noch größer, ich umschreib es mal kurz, die Klassenhierarchie sieht folgendermaßen aus (es handelt sich ünbrigens um eine Belegarbeit für "Objektorientiertes Programmieren"):

    class celestialbody
    {
        // Himmelskoerper, ist abstrakt
    }
    
    class planet : public celestialbody
    {
        // Planet ist ein Himmelskoerper 
    }
    
    class star : public celestialbody
    {
        // Stern ist ein Himmelskoerper
    }
    
    class starsystem : public star
    {
        // Menge von Planeten + Muttergestirn
        // m_pvecPlanets = Liste von Pointern auf Objekte des Typs planet
    }
    
    class planetsystem : public virtual planet   
    {
        // Planetensystem
        // Hat(!!) Menge von Monden (Liste)
    }   
    
    class inhabitedplanet : public virtual planet   
    {
        // Bewohnter Planet ist ein Planet mit Bevölkerung und Völkernamen
    }   
    
    class inhabitedplanetsystem : public planetsystem, public inhabitedplanet   
    {
        // Planetensystem mit mindestens einem bewohnten Planet
    }
    

    zwette



  • Weiterhin kann ich Deinem Code entnehmen, daß ein Sternensystem ein Stern ist 😕.
    Egal wie groß das Projekt ist. Die Vererbung ist falsch eingesetzt, da beißt die Maus keinen Faden ab.

    MfG Jester



  • Sorry, aber kannst du mri mal kurz erklaeren warum ein starsystem ein star ist?
    Das kapier ich leider nicht.

    Ich wuerde sagen:
    ein Stern hat 0 bis N Planeten und jeder Planet hat 0 bis N Monde.

    Somit ergibt sich bei mir, dass deine *system Klassen nicht noetig sind.



  • Naja, wenn er mehrere Systeme haben will ist das ja durchaus angebracht, sie als Klassen zu modellieren...



  • Jester schrieb:

    Naja, wenn er mehrere Systeme haben will ist das ja durchaus angebracht, sie als Klassen zu modellieren...

    Kommt alles auf die Definition an.

    Man koennte ja auch sagen:

    Stern ist ein Himmelskoerper

    Sternensystem hat 1 bis N Sterne und 0 bis N Planeten

    Planet ist ein Himmelskoerper
    Planet hat 1 Parent-Himmelskoerper (um den er kreist) und 0 bis N Planeten (Denn ein 'Mond' kann auch wieder Monde haben)

    Aber wir sind uns einig, dass das momentane Design irgendwie nicht ganz passt...



  • Jester schrieb:

    Die Vererbung ist falsch eingesetzt, da beißt die Maus keinen Faden ab.

    Wo ist denn da was falsch? Verwechselst Du das nicht mit "die Vererbung hätte ich logisch anders vorgenommen"? 🕶 Ich möchte das gerne so vererben, und es funktioniert auch, nur eben unten bei der Mehrfachvererbung nicht.

    zwette



  • Ja, das ist klar. nur er könnte mehrere Planetensysteme haben sowas wie das in dem wir leben halt. Und verschiedene Sternensysteme (=Galaxien) wie zum Milchstraße... andere fallen mir grad keine namentlich ein. Aber geben tut's die. Ich glaube das will er modellieren.



  • Galaxie hat 0 bis N Sternensysteme

    Sorry - aber da brauche ich auch wieder keine Ableitung...

    Ich brauche lediglich
    Stern und Planet als Himmelskoerper, wobei Planet ein Parent (uU ist das Parent nicht noetig) und 0 bis N weitere Planeten besitzt. Damit laesst sich so ziemlich alles darstellen.

    Denn vergiss nicht: ein Sternensystem (so wie unseres) kann 1 bis N Sonnen haben (zB eine Doppelsonne)
    Somit kann Sternensystem nicht von Stern erben.



  • Binärsysteme oder höherangige Systeme (Systeme mit mehreren Sonnen) haben höchstwahrscheinlich keine Planeten, da die komplexeren Schwerkraftfelder stabile Planetenbahnen verhindern. 🕶

    zwette



  • @zwette: Willst Du was lernen und es besser machen oder Dein "Design" vor uns verteidigen? Deine Verwendung von Vererbung ist schlicht falsch, warum haben wir schon lange begründet. Wenn Du das so lassen willst ist das okay, hab ich kein Problem damit. Aber tu bitte nicht so, als sei das alles wunderbar in Ordnung und wir sollten uns nicht so damit anstellen.

    MfG Jester



  • zwette schrieb:

    Binärsysteme oder höherangige Systeme (Systeme mit mehreren Sonnen) haben höchstwahrscheinlich keine Planeten, da die komplexeren Schwerkraftfelder stabile Planetenbahnen verhindern. 🕶

    Man beachte deswegen
    Sternensystem hat 1 bis N Sterne und 0 bis N Planeten



  • zwette schrieb:

    (es handelt sich ünbrigens um eine Belegarbeit für "Objektorientiertes Programmieren")

    Da sollte man solche Schnitzer wie IS-A mit HAS-A verwechseln aber tunlichst vermeiden!

    Ich hab eigentlich grad das Composite Pattern auf der Zunge, aber ich denke, ohne die Anforderungen an das Programm zu kennen, bringen konstruktive Vorschläge nicht sehr viel.



  • Bashar schrieb:

    zwette schrieb:

    (es handelt sich ünbrigens um eine Belegarbeit für "Objektorientiertes Programmieren")

    Da sollte man solche Schnitzer wie IS-A mit HAS-A verwechseln aber tunlichst vermeiden!

    Ich hab eigentlich grad das Composite Pattern auf der Zunge, aber ich denke, ohne die Anforderungen an das Programm zu kennen, bringen konstruktive Vorschläge nicht sehr viel.

    Hast Recht, ich werde das Konzept einfach nochmal überdenken, trotzdem danke an Euch alle für die Hilfe, ich komme wieder auf euch zurück (wenn ich darf). 🙂

    zwette



  • Ist euch im wirklichen Leben selbst schonmal eine Diamantstruktur untergekommen? Mehrfachvererbung OK, gibt's gelegentlich, aber ich hatte noch nie mit Diamanten zu tun, außer bei hypothetischen Überlegungen.



  • der_held schrieb:

    Ist euch im wirklichen Leben selbst schonmal eine Diamantstruktur untergekommen?

    Ne, ich habe deshalb auch noch nie virtual vererbt.



  • Ist euch im wirklichen Leben selbst schonmal eine Diamantstruktur untergekommen?

    Sicher. Man schaue sich nur mal die alte iostream-Bibliothek an.



  • der_held schrieb:

    Ist euch im wirklichen Leben selbst schonmal eine Diamantstruktur untergekommen?

    nur in einem test, den ich wieder verworfen habe zugunsten von "if statt virtual". hab noch keine ersthafte verwendung selber gebaut.



  • Hallo,
    hat denn noch keiner von euch ein Amphibienfahrzeug oder ein MitarbeiterAlsKunde modelliert? 😃 😃



  • HumeSikkins schrieb:

    Hallo,
    hat denn noch keiner von euch ein Amphibienfahrzeug oder ein MitarbeiterAlsKunde modelliert? 😃 😃

    aber klar. nur hat bei den kunden die drunterliegende relationale datenbank mir dann jede vererbung verboten.
    ich hab auch schon den MotorSegler, der von Motorboot und Segelboot erbt, gelehrt. lustigerweise hat der von den basisklassen zwei attribute maxGeschwindigkeit, aber nur ein attribut maxZuladung. und beendet hab ich die vorlesung mit "tut sowas ja nicht machen, das wird eh nix. und nächste woche kommt wieder ein sinnvolles thema dran." 😉


Anmelden zum Antworten