옛날 옛적에 나는 상속에 대해 Stack Overflow 에 대해 질문했다 .
체스 엔진을 OOP 방식으로 디자인한다고 말했습니다. 그래서 나는 조각 추상 클래스에서 모든 조각을 상속 받지만 상속은 여전히 계속됩니다. 코드로 보여 드리겠습니다
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
프로그래머는 저의 디자인이 엔지니어링보다 약간 이상하다는 것을 알았으며 아래 그림과 같이 색상 조각 클래스를 제거하고 조각 색상을 속성 멤버로 유지하는 것이 좋습니다.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
이런 식으로 Piece는 그의 색을 알 수 있습니다. 구현 후 내 구현이 아래와 같이 진행되는 것을 보았습니다.
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
{
}
}
}
이제 구현에서 if 문을 유발하는 색상 속성을 유지하는 것을 볼 수 있습니다. 상속 계층 구조에서 특정 색상 조각이 필요하다고 생각합니다.
이 경우 WhitePawn, BlackPawn과 같은 클래스가 있습니까? 아니면 Color 속성을 유지하여 디자인을 하시겠습니까?
그런 문제를 보지 않으면 어떻게 디자인을 시작하고 싶습니까? 색상 속성을 유지하거나 상속 솔루션이 있습니까?
편집 : 내 예제가 실제 예제와 완전히 일치하지 않도록 지정하고 싶습니다. 따라서 구현 세부 정보를 추측하기 전에 질문에 집중하십시오.
실제로 Color 속성을 사용하면 if 문이 상속을 더 잘 사용할 수 있는지 묻습니다.