Bu yığın değişiminin hızlı bir araştırması, genel kompozisyonda genellikle mirastan daha esnek olarak kabul edildiğini, ancak her zamanki gibi projeye vb. Bağlıdır ve mirasın daha iyi bir seçim olduğu zamanlar vardır. Her parçanın bir ağ, muhtemelen farklı animasyonlar ve benzeri bir 3D satranç oyunu yapmak istiyorum. Bu somut örnekte, her iki yaklaşım için de dava açabileceğiniz anlaşılıyor muyum?
Kalıtım böyle bir şeye benzeyecektir (uygun kurucu vb. İle)
class BasePiece
{
virtual Squares GetValidMoveSquares() = 0;
Mesh* mesh;
// Other fields
}
class Pawn : public BasePiece
{
Squares GetValidMoveSquares() override;
}
"is-a" prensibine kesinlikle uyurken kompozisyon böyle bir şeye benzeyecektir.
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
}
Bu daha çok kişisel bir tercih midir yoksa bir yaklaşım buradakinden daha akıllıca bir seçim midir?
EDIT: Ben her cevaptan bir şey öğrendim düşünüyorum, bu yüzden sadece bir tane seçmek için kötü hissediyorum. Son çözümüm buradaki birkaç gönderiden ilham alacak (hala üzerinde çalışıyor). Cevap vermek için zaman ayıran herkese teşekkürler.
var Pawn = new Piece(howIMove, howITake, whatILookLike)
kalıtım hiyerarşisinden çok daha basit, daha yönetilebilir ve daha sürdürülebilir görünüyor.