Bir zamanlar Stack Overflow ile ilgili miras hakkında bir soru sordum .
Satranç motorunu OOP tarzında tasarladığımı söyledim. Bu yüzden bütün parçalarımı Parça soyut sınıfından miras alıyorum ama kalıtım hala devam ediyor. Kodla göstereyim
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
Programcılar tasarımımı mühendislik üzerine biraz buldular ve renkli parça sınıflarını kaldırmayı ve parça rengini aşağıdaki gibi bir özellik üyesi olarak tutmayı önerdiler.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
Bu şekilde Piece rengini bilebilir. Uygulamadan sonra uygulamamın aşağıdaki gibi gittiğini gördüm.
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
{
}
}
}
Şimdi görüyorum ki renk özelliğini uygulamalarda if ifadelerine neden oluyor. Kalıtım hiyerarşisinde belirli renk parçalarına ihtiyacımız olduğunu hissettiriyor.
Böyle bir durumda WhitePawn, BlackPawn gibi sınıflarınız olur mu veya Color özelliğini tutarak tasarıma gider misiniz?
Böyle bir problem görmeden tasarıma nasıl başlamak istersiniz? Color özelliğini mi yoksa devralma çözümünü mü kullanıyorsunuz?
Düzenleme: Örneğimin gerçek hayat örneğiyle tamamen eşleşmeyebileceğini belirtmek istiyorum. Bu yüzden uygulama detaylarını tahmin etmeden önce sadece soruyu konsantre edin.
Aslında sadece renk özelliği kullanarak ifadeler miras kullanmak daha iyi neden olur diye soruyor?