이 스택 교환에 대한 빠른 검색은 일반적으로 일반적으로 상속보다 유연성이 높은 것으로 간주되지만 항상 프로젝트 등에 의존하며 상속이 더 나은 선택 인 경우가 있음을 보여줍니다. 각 조각에 메쉬, 다른 애니메이션 등이있는 3D 체스 게임을 만들고 싶습니다. 이 구체적인 예에서 두 가지 접근법 모두에 대한 사례를 주장 할 수있는 것처럼 보입니다.
상속은 다음과 같이 보일 것입니다 (적절한 생성자 등)
class BasePiece
{
virtual Squares GetValidMoveSquares() = 0;
Mesh* mesh;
// Other fields
}
class Pawn : public BasePiece
{
Squares GetValidMoveSquares() override;
}
"is-a"원칙을 준수하는 반면 구성은 다음과 같습니다.
class MovementComponent
{
virtual Squares GetValidMoveSquares() = 0;
}
class PawnMovementComponent
{
Squares GetValidMoveSquares() override;
}
enum class Type
{
PAWN,
BISHOP, //etc
}
class Piece
{
MovementComponent* movementComponent;
MeshComponent* mesh;
Type type;
// Other fields
}
개인적인 취향의 문제입니까 아니면 한 가지 접근법이 다른 방법보다 분명히 똑똑한 선택입니까?
편집 : 나는 모든 대답에서 무언가를 배웠으므로 하나만 골라서 기분이 좋지 않습니다. 내 최종 솔루션은 여기의 여러 게시물에서 영감을 얻습니다 (여전히 작업 중). 시간을내어 답변을 주신 모든 분들께 감사드립니다.
var Pawn = new Piece(howIMove, howITake, whatILookLike)
상속 계층 구조보다 훨씬 간단하고 관리 가능하며 유지 관리가 용이합니다.