1

私は友人と多重継承と単一継承について話し合っていましたが、明らかに、私のオブジェクト指向設計の概念は彼の概念とは完全に異なっていることがわかりました。私は主に Obj-C プログラマーなので、多重継承は日常的に使用するものではありません。彼は主に Windows/PSP での C++ プログラマーであるため、日常的にさまざまな概念を使用している可能性があります。

彼は実際に次の主題を持ち出しました: 新しい人間は何から受け継ぐのか?

私の考えでは、Human クラスが存在し、新しい存在はそのクラスを継承し、2 つの親からいくつかのインスタンス変数 (彼の DNA など) を取得するというものでした。

彼の考えは、子供が両親の方法を得るために、2 人の両親から継承するというものでした。

正直なところ、オブジェクトから継承しているのでしょうか。オブジェクトの特定のグループに共通のメソッドを含むクラスから継承するために継承が使用されていませんか? この議論は本当に私を際限なく混乱させました。

4

8 に答える 8

7

真正面から例えると、新しい人間は、親によって生成された接合子のペアからその特性を取得しますが、これは親自身の DNA に大まかに基づいているだけです。

現実的には、これは悪い例えだと思います。「継承」が遺伝学 (または遺言と契約法?) から借用された用語であるからといって、ソフトウェア開発と概念的に 1 対 1 で一致する必要があるわけではなく、実際、それらは表面的に類似した概念にすぎません。

たとえば、私の父は弁護士で、母は学校の先生です。私はどちらかのスキル (行動、方法...) を持って生まれてきたわけではありません。

于 2008-11-28T15:49:57.297 に答える
7

親も人間で、哺乳類と呼ばれる動物の仲間です。あなたの考えは私には最も論理的に思えます。

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

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

    // ...
}

確かに私は見ることができません:

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

私は、母親と父親がどちらかといえば子供の構築に関与していると考えています。3 人とも人間です。

于 2008-11-28T15:53:37.180 に答える
4

JeeBee に同意します。親には建設の役割があります。

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();
    }
}
于 2008-11-28T16:00:01.787 に答える
3

あなたは両方とも間違っています... 子供と親の両方が人間のインスタンスです... . 例として、1 つの可能なクラス構造では、HumanBeing (それらすべて) はすべて、「動物」から継承する「哺乳類」から継承する「霊長類」から継承します...

人間は「WalkUpright()」などの
霊長類のすべての動作を継承します。霊長類は「Lactate()」「LiveBirth()」などのように哺乳類からすべての動作を継承します...

HumanBeing の各インスタンスは、それぞれ HumanBeing のインスタンスである父と母と呼ばれる 2 つのプロパティを持つことができます...

そしておそらく、HumanBeing オブジェクトのインスタンスのコレクションを含む Children と呼ばれる別のプロパティ...

于 2008-11-28T15:50:21.713 に答える
1

人間はクラスであり、すべての人間は同じクラスに属します。

子、父、母はそのクラスのインスタンスにすぎません。

父と母はただの工場(人間そのものの複合体)

「ミッシングリンク」から継承する場合もありますが、それはドメインによって異なります。

しかし、あなたの友人にはポイントがあります。たとえば、アキレスはニンフと人間から継承します:S したがって、多重継承が証明されました。

スーパーマンはクリプトニアンを継承し、スパイダーマンはスパイダーを実装した人間です! :P

于 2008-11-28T20:17:18.913 に答える
0

親も人間だと思います。つまり、親は人間の所有物です。OOP 継承とは関係ありません。白人が人間を拡張するなど、人種によって表される人間のタイプに言及している場合は、そうなる可能性があります。

于 2008-11-28T15:50:01.433 に答える
0

簡単に言えば、あなたとあなたの友人の継承の概念は、多くの人々によって保持されており、等しく正当であるということです.

あなたの友人の概念は、「プロトタイプベース」のオブジェクト指向言語 (Self や Javascript など) の「オブジェクト継承」に近いものです。あなたのものは、Smalltalk、Java、そしてそうです、C++ に典型的な「クラス継承」とより一致しています。

Java (特に最近) は、継承を型の管理に関するものと見なす傾向があり、コードの再利用のために継承ではなく「合成」を推奨しています。そして、部分的には「脆弱な基本クラスの問題」が原因です。

しかし、あなたの友人が「ミックスイン」の作成に慣れている場合は、継承を一種のライブラリ インクルードと見なす可能性があります。これは Java や C++ のベスト プラクティスではないかもしれませんが、継承がよく理解されている方法です

于 2009-01-03T00:39:04.857 に答える
0

オブジェクト指向の振る舞いに関しては、あなたの友人の考えは間違っています。人は、クラスと同じように親から振る舞いを継承しません。人はそれぞれの親から半分ずつ遺伝子を受け継いでおり、これらの遺伝子が組み合わさって行動を引き起こします。たとえば、両方の親が特定の目の色を持っていても、子供は必ずしも同じ目の色を持っているとは限りません (高校の生物学を受講していない場合は、劣性遺伝子を調べてください)。

つまり、クラスの継承について考えるときは、人間の継承について考えてはいけません。ほぼ確実に役に立ちません。

于 2008-11-28T16:04:09.187 に答える