Pewnego razu zadałem pytanie na temat przepełnienia stosu dotyczące dziedziczenia.
Powiedziałem, że projektuję silnik szachowy w stylu OOP. Więc odziedziczyłem wszystkie moje dzieła z klasy Abstract, ale dziedziczenie wciąż trwa. Pokaż mi kod
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
Programiści odkryli, że mój projekt jest nieco przerobiony inżynieryjnie i zasugerowali usunięcie klas kolorowych elementów i zachowanie koloru elementu jako elementu właściwości, jak poniżej.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
W ten sposób Piece mogą poznać jego kolor. Po wdrożeniu zauważyłem, że moje wdrożenie przebiega jak poniżej.
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
{
}
}
}
Teraz widzę, że zachowują właściwość koloru powodującą, że instrukcje w implementacjach. Czuję, że potrzebujemy określonych kolorów w hierarchii dziedziczenia.
W takim przypadku czy miałbyś takie klasy jak WhitePawn, BlackPawn czy też zająłby się projektowaniem, zachowując właściwość Color?
Nie widząc takiego problemu, jak chciałbyś zacząć projektowanie? Zachować właściwość Color lub mieć rozwiązanie do dziedziczenia?
Edycja: Chcę określić, że mój przykład może nie pasować całkowicie do przykładu z życia. Więc zanim spróbujesz odgadnąć szczegóły implementacji, skoncentruj się na pytaniu.
Właściwie po prostu pytam, czy użycie właściwości Kolor spowoduje, że jeśli oświadczenia lepiej użyć dziedziczenia?