Pencarian cepat dari stackexchange ini menunjukkan bahwa secara umum komposisi umumnya dianggap lebih fleksibel daripada warisan tetapi seperti biasanya tergantung pada proyek dll dan ada kalanya pewarisan adalah pilihan yang lebih baik. Saya ingin membuat permainan catur 3D di mana setiap bagian memiliki jala, animasi yang mungkin berbeda dan sebagainya. Dalam contoh konkret ini, sepertinya Anda bisa memperdebatkan kasus untuk kedua pendekatan, apakah saya salah?
Warisan akan terlihat seperti ini (dengan konstruktor yang tepat, dll)
class BasePiece
{
virtual Squares GetValidMoveSquares() = 0;
Mesh* mesh;
// Other fields
}
class Pawn : public BasePiece
{
Squares GetValidMoveSquares() override;
}
yang tentu saja mematuhi prinsip "is-a" sedangkan komposisi akan terlihat seperti ini
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
}
Apakah ini lebih merupakan masalah pilihan pribadi atau apakah satu pendekatan jelas merupakan pilihan yang lebih cerdas daripada yang lain di sini?
EDIT: Saya pikir saya belajar sesuatu dari setiap jawaban jadi saya merasa tidak enak karena hanya memilih satu. Solusi terakhir saya akan mengambil inspirasi dari beberapa posting di sini (masih mengerjakannya). Terima kasih kepada semua orang yang meluangkan waktu untuk menjawab.
var Pawn = new Piece(howIMove, howITake, whatILookLike)
tampaknya jauh lebih sederhana, lebih mudah dikelola dan lebih bisa dikelola bagi saya daripada hierarki warisan.