Una volta ho fatto una domanda su Stack Overflow sull'ereditarietà.
Ho detto che progetto il motore di scacchi alla moda OOP. Quindi eredito tutti i miei pezzi dalla classe astratta di Piece ma l'eredità continua. Fammi mostrare per codice
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
I programmatori hanno trovato il mio progetto un po 'più ingegneristico e mi hanno suggerito di rimuovere le classi di pezzi colorate e mantenere il colore del pezzo come membro della proprietà come di seguito.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
In questo modo Piece può conoscere il suo colore. Dopo l'implementazione ho visto che la mia implementazione va come di seguito.
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
{
}
}
}
Ora vedo che mantieni la proprietà color causando if istruzioni nelle implementazioni. Mi fa sentire che abbiamo bisogno di pezzi di colore specifici nella gerarchia ereditaria.
In tal caso avresti lezioni come WhitePawn, BlackPawn o andresti a progettare mantenendo la proprietà Color?
Senza aver visto un tale problema, come vorresti iniziare a progettare? Mantenere la proprietà Color o avere una soluzione ereditaria?
Modifica: voglio specificare che il mio esempio potrebbe non corrispondere completamente all'esempio della vita reale. Quindi, prima di provare a indovinare i dettagli dell'implementazione, basta concentrare la domanda.
In realtà sto semplicemente chiedendo se l'uso della proprietà Color provocherà se le dichiarazioni utilizzeranno meglio l'ereditarietà?