これは非常に物議を醸すトピックです。「いいえ」と言う前に、それは本当に、本当に必要なのでしょうか?
私は約 10 年間プログラミングをしていますが、他の方法では解決できなかった問題を継承によって解決したときのことを思い出すことができるとは正直言えません。一方で、継承を使用したときのことを何度も思い出すことができます。それは、そうしなければならないと感じたから、または自分が賢いのにその代償を払ってしまったからです。
実装の観点から、継承の代わりに集約または別の手法を使用できない状況は実際には見当たりません。
これに対する私の唯一の注意点は、インターフェイスの継承を引き続き許可することです。
(アップデート)
「必要な場合もある」と言うのではなく、なぜそれが必要なのか、例を挙げてみましょう。それは本当にまったく役に立ちません。あなたの証拠はどこにありますか?
(更新 2 コード例)
これは、継承のない、より強力でより明示的な IMO である従来の shape の例です。現実の世界では、何かが実際に他の何かの「である」ということはほとんどありません。ほとんどの場合、「Is Implemented in Terms」の方が正確です。
public interface IShape
{
void Draw();
}
public class BasicShape : IShape
{
public void Draw()
{
// All shapes in this system have a dot in the middle except squares.
DrawDotInMiddle();
}
}
public class Circle : IShape
{
private BasicShape _basicShape;
public void Draw()
{
// Draw the circle part
DrawCircle();
_basicShape.Draw();
}
}
public class Square : IShape
{
private BasicShape _basicShape;
public void Draw()
{
// Draw the circle part
DrawSquare();
}
}