Una volta fa ho chiesto una domanda su Stack Overflow sull'ereditarietà.
Ho detto che progettavo il motore degli scacchi in modalità OOP. Quindi eredito tutti i miei pezzi dalla classe astratta di Piece, ma l'eredità va ancora. 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 design un po 'più ingegnoso e hanno suggerito di rimuovere classi di pezzi colorati e mantenere il colore del pezzo come un 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 mantenere la proprietà color che causa le istruzioni nelle implementazioni. Mi fa pensare che abbiamo bisogno di pezzi di colore specifici nella gerarchia dell'ereditarietà.
In questo caso avresti classi come WhitePawn, BlackPawn o andresti a progettare mantenendo la proprietà Color?
Senza vedere un problema come vorresti iniziare la progettazione? Mantieni la proprietà Color o la soluzione di ereditarietà?
Modifica: voglio specificare che il mio esempio potrebbe non corrispondere completamente all'esempio della vita reale. Quindi, prima di provare a indovinare i dettagli di implementazione, concentrati solo sulla domanda.
In realtà sto semplicemente chiedendo se usare la proprietà Color farà sì che le istruzioni migliori usino l'ereditarietà?