むかしむかし、継承についてStack Overflowで質問しました。
私はチェスエンジンをOOPファッションで設計すると言った。だから私はピースの抽象クラスからすべてのピースを継承しますが、継承はまだ続きます。コードで表示させてください
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
プログラマーは私の設計を少しエンジニアリングよりも見つけており、色付きのピースのクラスを削除し、以下のようなプロパティメンバーとしてピースの色を保持することを提案しました。
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
このようにして、ピースは彼の色を知ることができます。実装後、実装が次のようになることを確認しました。
public abstract class Pawn: Piece
{
public override void MakeMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
public override void TakeBackMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
}
今度は、色のプロパティが原因でifステートメントが実装されていることがわかります。継承階層に特定のカラーピースが必要だと感じます。
そのような場合、WhitePawn、BlackPawnのようなクラスを持っているでしょうか、それともColorプロパティを保持してデザインに行きますか?
このような問題がなければ、どのように設計を開始したいですか?Colorプロパティを保持するか、継承ソリューションを持っていますか?
編集:私の例が実際の例と完全に一致しない可能性があることを指定したいと思います。したがって、実装の詳細を推測する前に、問題に集中してください。
Colorプロパティを使用すると、ifステートメントで継承を使用した方がよいかどうかを確認するだけです。