इस स्टैकएक्सचेंज की एक त्वरित खोज से पता चलता है कि सामान्य रचना में आमतौर पर विरासत की तुलना में अधिक लचीला माना जाता है लेकिन हमेशा की तरह यह परियोजना आदि पर निर्भर करता है और ऐसे समय होते हैं जब विरासत बेहतर विकल्प होता है। मैं एक 3 डी शतरंज खेल बनाना चाहता हूं, जहां प्रत्येक टुकड़े में एक जाल है, संभवतः विभिन्न एनिमेशन और इतने पर। इस ठोस उदाहरण में ऐसा लगता है जैसे आप दोनों दृष्टिकोणों के लिए एक मामला बहस कर सकते हैं क्या मैं गलत हूं?
वंशानुक्रम कुछ इस तरह दिखेगा (उचित निर्माणकर्ता आदि के साथ)
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)
एक विरासत पदानुक्रम की तुलना में मेरे लिए बहुत सरल, अधिक प्रबंधनीय और अधिक रखरखाव योग्य लगता है।