Era uma vez, fiz uma pergunta no Stack Overflow sobre herança.
Eu disse que projeto um mecanismo de xadrez da maneira OOP. Então, eu herdo todas as minhas peças da classe abstrata Piece, mas a herança ainda continua. Deixe-me mostrar por código
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
Programadores consideraram meu projeto um pouco mais do que engenharia e sugeriram remover classes de peças coloridas e manter a cor das peças como membro da propriedade, como abaixo.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
Dessa maneira, Piece pode conhecer sua cor. Após a implementação, vi a minha implementação como abaixo.
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
{
}
}
}
Agora vejo que manter a propriedade color causando declarações if nas implementações. Isso me faz sentir que precisamos de peças de cores específicas na hierarquia de herança.
Nesse caso, você teria aulas como WhitePawn, BlackPawn ou iria projetar mantendo a propriedade Color?
Sem esse problema, como você gostaria de iniciar o design? Manter a propriedade Color ou ter uma solução de herança?
Editar: quero especificar que meu exemplo pode não corresponder completamente ao exemplo da vida real. Portanto, antes de tentar adivinhar os detalhes da implementação, concentre a questão.
Na verdade, eu simplesmente pergunto se o uso da propriedade Color causará se as instruções usarem melhor a herança?