Vor einiger Zeit habe ich eine Frage zu Stack Overflow über die Vererbung gestellt.
Ich habe gesagt, ich entwerfe Schachmaschine in OOP-Mode. Also erbe ich alle meine Stücke von Piece Abstract Class, aber die Vererbung geht immer noch. Lassen Sie mich durch Code zeigen
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
Programmierer haben mein Design ein wenig über das Engineering hinaus gefunden und vorgeschlagen, farbige Stückklassen zu entfernen und Stückfarbe als Eigenschaftsmitglied wie unten zu halten.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
Auf diese Weise kann Piece seine Farbe erkennen. Nach der Implementierung habe ich gesehen, dass meine Implementierung wie folgt verläuft.
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
{
}
}
}
Jetzt sehe ich, dass die Farbeigenschaft if-Anweisungen in Implementierungen verursacht. Ich habe das Gefühl, wir brauchen bestimmte Farbstücke in der Vererbungshierarchie.
Hätten Sie in einem solchen Fall Klassen wie WhitePawn, BlackPawn oder würden Sie zum Design gehen, indem Sie die Color-Eigenschaft beibehalten?
Wie würden Sie ohne ein solches Problem mit dem Design beginnen wollen? Farbeigenschaft behalten oder Vererbungslösung haben?
Bearbeiten: Ich möchte angeben, dass mein Beispiel möglicherweise nicht vollständig mit dem Beispiel aus dem wirklichen Leben übereinstimmt. Bevor Sie also versuchen, Implementierungsdetails zu erraten, konzentrieren Sie sich einfach auf die Frage.
Ich frage eigentlich nur, ob die Verwendung der Color-Eigenschaft dazu führt, dass Anweisungen die Vererbung besser verwenden.