2012-04-29 6 views
2

私が読んだ記事の中で、多重継承を実装すると複雑さが増していると言われています。しかし、コンシューマ開発者側や言語開発者側の複雑さが増すのではないかと思います。複数の継承は言語消費者または言語の開発者にとって複雑ですか?

我々は曖昧さを乗り越えるために、このような何かを行うことができ、言うことができます:

ここ
class Artist{ 
    public void Draw(){ } 
} 

class Cowboy { 
    public void Draw() { } 
} 

class Person : Artist, Cowboy{ 

} 

我々は2つの同じsignatured方法、などthis.base.Artist.Draw()this.base.Cowboy.Draw()しかし構文ともタイプの外を持っているようですそれのインスタンスからperson.base.Cowboy.Draw()はこの曖昧さを解決するのに十分なように見えます。

ここで私たちが話しているあいまいさと複雑さは何ですか?そこにはたくさんの商品がありますが、消費者の視点から見ると、それほど複雑ではありません。

baseキーワードは、多くの場合、あいまいさを防ぐことができます。

  1. person.base.Cowbow.Draw();
  2. (new Person()).base.Cowboy.Draw();
  3. ((Person) someInstance).base.Cowboy.Draw();
  4. this.base.Cowboy.Draw();
  5. など
+2

すてきな質問です。 –

+0

どうやってクラス外のあいまいさを解決するのですか? –

+0

どのような(新しいPerson())。Draw()do? – sisve

答えて

0

基本クラスメンバーへのアクセスのたびに、適切な基本クラス名の前に付ける必要がある場合は、基本クラスから継承するポイントは何ですか?基本的にPersonクラスの基本クラス属性を作ることと基本的に同じであると主張できます。

複数の継承を使用する場合、仮想テーブルの複雑さも考慮する必要があります。例としてC++を使用すると、複数の継承が仮想テーブルのサイズと複雑さを増やし、ルックアップのパフォーマンスが低下します。

最近、私は複数の継承を持つ2つの異なるクラス(8つのクラスから継承されたクラスと6つのクラスから継承されたクラス)を持つプロジェクトを引き継いだ。 「IS-A」関係の代わりに「HAS-A」関係を使用するようにクラスをリファクタリングするだけで、私は5%のパフォーマンス向上を達成しました。これは極端なケースではあるが、複数の継承が持つ可能性のある影響を実証するのに役立ちます。

関連する問題