Frage

Ich diskutiere Mehrfachvererbung vs. einfache Vererbung mit einem Freund von mir, und entdecken, dass klar, meine Vorstellung von Object-Oriented Design als seine völlig anders. Ich bin meistens ein Obj-C-Programmierer, so Mehrfachvererbung ist nicht etwas, das ich täglich benutzen. Er ist vor allem ein C ++ Programmierer unter Windows / PSP, also verwenden wir wahrscheinlich unterschiedliche Konzepte an einem Tag zu Tag.

Er brachte tatsächlich das folgende Thema: Was einen neuen Menschen macht erbt von

Meine Vorstellung davon war, dass es eine menschliche Klasse sein würde und das neue Wesen von dieser Klasse erben würde und einige Instanzvariablen (wie seine DNA und andere) von seinen beiden Eltern erhalten.

Seine Auffassung war, dass das Kind von seinen beiden Eltern erben würde, um die Methoden seiner Eltern zu erhalten.

Und jetzt ich bin ein bisschen verwirrt, weil ehrlich ... Vererben von Objekten? Ist das nicht Vererbung verwendet von Klassen erben die Methoden gemeinsam zu einer bestimmten Gruppe von Objekten enthalten? Dieses Argument verwirrte mich wirklich zu keinem Ende.

War es hilfreich?

Lösung

Die Eltern sind auch Menschen, die ein Teil der Familie von Kreaturen namens Säugetiere sind. Ihre Gedanken scheinen logischste für mich.

public class Human extends Mammal implements HunterGatherer, Speech, CognitiveThought {

    public Human(Human mother, Human father) {
        super(mother, father);
        // ...
    }

    // ...
}

Sicher kann ich nicht sehen:

public class Human extends Mother, Father { ... }

sehe ich die Mutter und Vater als vielmehr ist bei der Konstruktion ihres Kindes beteiligt sind, alle drei sind Menschen.

Andere Tipps

die Analogie frontal zu nehmen, die neuen Menschen von den Eltern erzeugte seine Züge aus einem Paar von Zygote bekommen, die auf den Eltern eigene DNA nur lose basieren.

Realistisch gesehen, ich denke, das nur eine schlechte Analogie ist. (? Oder Testamenten und Vertragsrecht), nur weil „Erbe“ ein geliehenen Begriff von der Genetik ist, bedeutet nicht, es konzeptionell 1 muss Übereinstimmen. 1 mit Software-Entwicklung, und in der Tat sind sie nur oberflächlich ähnliche Konzepte

Zum Beispiel, mein Vater ist ein Rechtsanwalt, und meine Mutter ist ein Schullehrer. Ich war nicht mit den Fähigkeiten geboren (Verhaltensweisen, Methoden ...) von entweder.

Sie sind beide falsch ... Beide Kind und Eltern sind Fälle von Menschen .... Als Beispiel wird in einer möglichen Klassenstruktur, humanbeing (alle) alle erben von „Primas“, die von „Säugetier“ Erbt die von „Animal“ Erbt ...

Mensch erbt alle Verhalten von Primaten, wie „WalkUpright ()“ usw.
Primas Erbt alle Verhalten von Säugetieren, wie „Lactat ()“ „Lebendgeburt (), etc ... Säugetier Erbt Verhalten von Tiere ...

Jede Instanz von humanbeing könnte zwei Eigenschaften genannt Vater und Mutter, die jeweils eine Instanz von humanbeing ist ...

und vielleicht eine andere Eigenschaft namens Kinder, das enthält eine Sammlung von Instanzen von humanbeing Objekte ...

Vereinbaren Sie mit JeeBee, die Eltern eine Konstruktion Rolle haben!

public Class HumanFactory(Human mother, Human father)
{
    public Human NewHuman()
    {
        while(!mother.IsPregnant)  // may loop infinitely in the infertile case
            father.Mate(mother)
        while(mother.IsPregnant)
            System.Threading.Sleep(1000); // may take some months, get comfortable
        return mother.DeliverBaby();
    }
}

Ein Mensch würde eine Klasse sein, und alle Menschen Wesen gehören zu der gleichen Klasse.

Das Kind, der Vater und die Mutter sind nur Instanzen dieser Klasse.

Die Mutter und Vater sind nur Fabriken (die der Mensch selbst Composite)

Wir erben von dem „missing link“ aber hängt es von der Domäne.

Aber Ihr Freund hat einen Punkt, Achilles zum Beispiel erben von einer Nymphe und ein Mensch. S daher Mehrfachvererbung bewiesen

Superman erben Kriptonian während Spiderman ein Mensch ist, der Spinne implementiert! : P

Nun, ich denke die Eltern auch menschlich sind. So Eltern ist eine Eigenschaft des Menschen. Es hat nichts mit OOP Vererbung zu tun. Es kann dies tun, wenn Sie Arten von menschlichen beziehen, wie durch Rasse vertreten wie Europäische Menschen erstreckt

In Bezug auf die objektorientierte Verhalten Konzeption Ihres Freundes ist falsch. Eine Person erbt nicht Verhaltensweisen von ihren Eltern in der gleichen Art und Weise, dass eine Klasse der Fall ist. Eine Person erbt Gene - die Hälfte von jedem Elternteil - und diese Gene kombinieren Verhaltensweisen verursachen. Zum Beispiel, auch wenn beiden Eltern eine bestimmte Augenfarbe haben, das Kind nicht notwendigerweise die gleiche Augenfarbe (rezessive Gene aussehen, wenn Sie nicht High-School-Biologie nehmen haben).

Kurz gesagt, glaube nicht, über die menschliche Vererbung, wenn Sie sich Gedanken über Klassenvererbung. Es ist fast sicher nicht hilfreich sein.

Die kurze Antwort ist, dass sowohl Ihre und Konzeption Ihres Freundes der Vererbung von vielen Menschen gehalten wurde, und sind gleichermaßen legitim.

Konzeption Ihres Freundes ist näher an „Objektvererbung“ in „Prototyp basiert“ OO-Sprachen (z. B. Selbst und Javascript). Dein ist mehr im Einklang mit „Klassenvererbung“, die von Smalltalk, Java typisch ist und, ja, C ++.

Java (vor allem vor kurzem) neigte dazu Erbe als alle zu sehen Typen über die Verwaltung und fordert nun „Zusammensetzung“ anstelle von Vererbung für Code-Wiederverwendung, Dies ist zum Teil, weil Vererbung in Java weniger flexibel ist als die Zusammensetzung so „Bevorzugung der Zusammensetzung“ ist gute Übung. Und zum Teil wegen des „brüchigen Basis-Klasse-Problems“.

Aber wenn dein Freund mehr gebraucht wird „Mixins“ zur Schaffung er gut Erbe mehr als eine Art Bibliothek sehen kann. Das mag nicht die beste Praxis sein, entweder in Java oder C ++, aber es ist eine Art und Weise, dass Vererbung oft verstanden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top