2013-02-17 44 views
6

मैं एक साधारण खेल लिख रहा हूं और बहुत सारी गेम ऑब्जेक्ट्स विशेषताएँ साझा करता हूं। इसके लिए मेरे पास दो संभावित कार्यान्वयन हैं।क्या मुझे इस मामले में विरासत या संरचना का उपयोग करना चाहिए?

पहले विरासत उपयोग कर रहा है निम्न छवि में निर्दिष्ट है:

Class Hierarchy

बोल्ड कक्षाएं सार वर्ग हैं, जैसा कि आप उम्मीद कर सकते हैं। शाखाएं व्युत्पन्न कक्षाएं हैं जिनका वास्तव में उपयोग किया जाता है। यह ध्यान रखना महत्वपूर्ण है कि इन कक्षाओं में वस्तुओं के बारे में डेटा है, उनके साथ कोई कार्यक्षमता नहीं है।

ट्रूप और वाहन, उदाहरण के लिए, एक आम इंटरफ़ेस है कि वे दोनों हमले() और move() जैसी चीजों को करने के लिए उपयोग करते हैं। उपरोक्त उल्लिखित वर्ग पदानुक्रम केवल कच्चे आंकड़े हैं। इसके अलावा, वे सभी असली आईएसए संबंध हैं।

दूसरा कार्यान्वयन संरचना का उपयोग करता है। उपरोक्त वर्ग पदानुक्रम के बजाय, प्रत्येक अमूर्त वर्ग इसके बजाय 'मॉड्यूल' हैं जो कुछ डेटा सदस्यों को पकड़ते हैं। तो स्पेशल एबिलिटी के पास पॉइंट्सवेल्यू ऑब्जेक्ट नामक डेटा सदस्य होता है (हालांकि मैंने अपने मॉड्यूलर/एट्रिब्यूट प्रकृति को प्रतिबिंबित करने के लिए सार के नाम बदल दिए हैं (हालांकि वे अब सार नहीं हैं) कक्षाएं)। और ट्रूप के पास डेटा सदस्य हैं: पॉइंट्स वेल्यू ऑब्जेक्ट, फिजिकऑब्जेक्ट, फिजिकएटैक ऑब्जेक्ट, और बैटलऑब्जेक्ट, उनमें से प्रत्येक मॉड्यूल हैं जो सेना के बारे में डेटा रखती हैं। दोबारा, इन मॉड्यूल में कोई कार्यक्षमता मौजूद नहीं है, उनका उपयोग केवल डेटा को स्टोर करने के लिए किया जाता है। व्यवहार और कार्यक्षमता अभी भी इंटरफेस कक्षाओं के माध्यम से लागू की जाती है।

मेरा प्रश्न यह है: लोग आम तौर पर विरासत पर संरचना पसंद करते हैं, लेकिन इस मामले में, मैं विरासत से चिपकने के इच्छुक हूं, क्योंकि आईएसए रिश्ते हैं और पदानुक्रम में व्यवहार नहीं होता है, केवल डेटा। क्या यह पदानुक्रम अच्छा ओओडी है या गुण 'मॉड्यूल' का उपयोग कर कक्षाओं का निर्माण कर रहा है?

+1

'मॉड्यूल' दृष्टिकोण एक घटक आधारित [इकाई प्रणाली] के समान है (http://t-machine.org/index.php/2007/09/03/entity-systems-are-the- भविष्य- -मोगोग-विकास-भाग -1 /) आमतौर पर गेम विकास में उपयोग किया जाता है। यह कुछ अतिरिक्त जटिलता को दर्शाता है, लेकिन यह पुन: प्रयोज्यता और विस्तारशीलता के लिए वास्तव में अच्छा है। मुझे नहीं पता कि कौन सा बेहतर होगा, प्रत्येक दृष्टिकोण के पास यह पेशेवर और विपक्ष है, लेकिन यह आप पर निर्भर है कि आप उन्हें संतुलित करें और निर्णय लें कि कौन सी दृष्टिकोण आपकी समस्या के लिए उपयुक्त है। – asermax

उत्तर

4

यदि कोई कोड पुन: उपयोग नहीं किया जा रहा है, तो आप विरासत का उपयोग करने में क्या लाभ देखते हैं? जब व्यवहार समान होता है, तो डीआरवाई के लिए विरासत उपयोगी होती है (लेकिन स्वयं को दोहराएं), लेकिन व्यवहार के बिना आप जो भी कर रहे हैं वह संभावित रूप से सीमित है - यदि आप बाद में निर्णय लेते हैं कि आपके पास उप पदानुक्रम है जिसके लिए कम डेटा की आवश्यकता है, तो कोई अच्छा समाधान नहीं है ऐसा करने के लिए।

+0

क्षमा करें, DRY का क्या अर्थ है? – Slims

+0

अपने आप को दोहराना मत करो – KidTempo