3

私が読んだことと見たことから、多重継承はそれ自体ではなく、初心者がよりエレガントなデザインパターンが有用でより意味のあるあらゆる場所で使用するようになるため、悪い習慣だと考えています。

一部の言語は、多重継承を実装しないことを選択し、その後トレイトを実装することを選択しました (例: PHP)。多重継承と特性の唯一の興味深い実質的な違いは、言語的なものです。「継承」はある種の共有された性質を示しますが、「特性」はより機能を表します。

多重継承が不適切であり、今では特性が適切であると考える理由を説明する、私が見逃している他の重要な違いはありますか?

4

1 に答える 1

2

トレイトを使用して多重継承を偽装することもできますが、基本的な違いは概念的なものだと思います。親子関係は「is-a」関係です。

Table の子と PicknickTable の子を持つ Furniture クラスがある場合、Picknicktable は Table は Furniture です (うーん、家具はそのように数えられますか? nvrmnd)。

トレイトの場合は、次のように言うだけです。サーフェスに何かを配置するコードを書き続けるのは嫌いなので、"putStuffOnThisThing" トレイトを書きます。これは継承ではありません!このような推論の背後にある基本的な誤りは、階層を示す別の方法として特性を見て、そうすべきではないということです。これは、実際の優れた設計の代わりになるものではありません。これはツールボックスのトリックであり、複数の継承を誤用する可能性がありますが、いくつかの行を何度も書くことを避ける方法として使用する方がよい場合があります。

したがって、比較を弁護するために: トレイトには多重継承と同じ問題がいくつかあります。たとえば、同じ名前を持つものが複数ある場合にエイリアシングで対処する必要がある問題などです。これは正確にはダイヤモンドの問題ではありませんが、非常に近いものです。

于 2013-12-11T22:12:47.923 に答える