वंशानुक्रम बनाम रचना


16

मैं सी # में अपना पैसा कमाता हूं। आम तौर पर उस भाषा में मैं इंटरफेस का उपयोग करके उच्च स्वर्ग तक सब कुछ कम करना पसंद करता हूं। इसने मुझे एंटरप्राइज़ कोड में अच्छी तरह से सेवा दी है, लेकिन सी # में गेम लिखने में मैं खुद को वंशानुक्रम की ओर रुझान पाता हूं, क्योंकि यह आधार वर्गों के लिए कुछ डिफ़ॉल्ट व्यवहारों को परिभाषित करने में सक्षम है। मुझे ऐसा करने में गन्दा महसूस होता है, जैसे कि मैं कुछ वास्तुकला भगवान की अवज्ञा कर रहा हूँ जिन्होंने एक बार "विरासत पर एहसान रचना" कहा था। मुझे पता है कि यह काला और सफेद नहीं है, लेकिन मुझे यह भी लगता है कि मैं थोड़ी अधिक काम के साथ इंटरफेस का उपयोग कर सकता हूं और लगभग एक ही चीज को प्राप्त कर सकता हूं।

दूसरे लोग क्या करते हैं? क्या खेल के लिए विरासत सही दृष्टिकोण है या मुझे कुछ इंटरफेस में रिफ्लेक्टर करना चाहिए?


1
इंटरफेस रचना भी नहीं हैं, इसलिए यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं।

मैं सिर्फ इस बात का उल्लेख करना चाहता हूं कि जब से आप C # के साथ काम कर रहे हैं, तो आपके पास एक कठिन समय होगा, जब आपने C # से विरासत का उपयोग करने का विकल्प चुना होगा, क्योंकि यह सच एकाधिक उत्तराधिकार का समर्थन नहीं करता है। जब तक आप 4-5 इंटरफ़ेस रेंज में नहीं आते हैं, तब तक कई इंटरफ़ेस विधि का उपयोग करना ठीक है और समान क्रियान्वयन को साझा करने वाले प्रत्येक वर्ग के बीच कोड की 25+ लाइनों को काटना / पेस्ट करना है। कुछ काम-काज हैं, लेकिन वे उतने ही बदसूरत हैं क्योंकि भाषा प्रत्यक्ष समर्थन नहीं देती है।
NtscCobalt

जवाबों:


23

खेल में विरासत वास्तव में सबसे खराब चीजों में से एक है जो आप कर सकते हैं - विशेष रूप से संस्थाओं के संबंध में। इसके लिए इसे क्यों पढ़ें । वंशानुक्रम पर रचना आपको खेलों के साथ एक लंबा रास्ता तय करती है। आपके इंजन के अन्य क्षेत्रों के लिए, यह वास्तव में मायने नहीं रखता है। उदाहरण के लिए कहें कि आप किसी प्रकार की बाह्य नेटवर्क सेवा पर कॉल कर रहे हैं, तो आप एक जेनेरिक प्रकार की सेवा को इनहेरिट कर सकते हैं। HTTPService और SocketService - आपके द्वारा उपयोग किए जाने वाले एंटरप्राइज़ ऐप में बहुत अधिक है।

जब तक अपने खेल वास्तव में आसान है, आप होगा एक घटक आधारित इकाई (CBE) वास्तुकला का उपयोग करना चाहते। सामान्य विचार यह है कि संस्थाओं के साथ, कारण वे आमतौर पर विरासत में मिलने के बजाए बनाए जाते हैं, क्योंकि आप यह नहीं जान सकते कि रनटाइम तक किसी इकाई की क्या क्षमताएं होंगी। उदाहरण के लिए, खिलाड़ी के जहाज को एक अंतरिक्ष शूटर में ले जाएं। आप गेमप्ले के दौरान कुछ बिंदु तक नहीं जानते हैं कि कौन से हथियार, कवच, सिस्टम (घटक) जो खिलाड़ी को लेने, खरीदने, बेचने, खोने, नष्ट करने आदि हैं, इसलिए इसे मॉडल करने का एकमात्र यथार्थवादी तरीका है। वस्तु रचना के माध्यम से। इस परिदृश्य में दूसरा पक्ष यह है कि आपके पास पूरी तरह से अनुकूलन योग्य दुश्मन भी हो सकते हैं, जो दुश्मनों के बजाय हमेशा उसी तरह से निर्मित होते हैं, जब आप हर बार दुश्मन के प्रकार को देखते हैं। CBEs के साथ, आप शायद एक मार्टियन फ्रीटर को देख सकते हैं और सोच सकते हैं, "आह, इसमें केवल छोटे लेजर हैं, मैं इसे नीचे ले जाऊंगा", और आमतौर पर यह सच होगा लेकिन जब आप अचानक सीमा में हो जाते हैं तो आपको एहसास होता है कि यह एक बड़ा गधा है वर्महोल बंदूक। अचंभा अचंभा!

संघटन तर्क के निहित युग्मन को हटा रहा है, और यह अच्छा है।


सलाह दोस्त के लिए धन्यवाद :) यह जानकर अच्छा लगा कि मुझे आवाजें सुनाई नहीं दे रही थीं!
पीटर शॉर्ट

1
+1 लेख के लिए धन्यवाद, मैं काफी समय से अपने खेल में ऐसा करने के लिए अर्थ रखता हूं
जॉन मैकडॉनल्ड्स

3
ध्यान दिया जाना चाहिए कि खेल संस्थाओं की उच्च अंतर-निर्भरता के कारण जो विरासत में अक्सर चीजों को जटिल करती है और स्थिरता बनाए रखती है और एक बोझिल कार्य का विस्तार करती है। घटक प्रणालियाँ इस समस्या से अच्छी तरह से निपटती हैं और अन्य अतिरिक्त लाभ वह है जो ऊपर दिए गए उत्तर में सूचीबद्ध है;)
जेम्स

यह भी ध्यान दिया जाना चाहिए कि "लेकिन जब आप अचानक सीमा में हो जाते हैं तो आपको एहसास होता है कि इसमें एक बड़ा गधा वर्महोल बंदूक है। आश्चर्य चकित!" डी: बुरा खेल डिजाइन है
जोनाथन Connell

1
आश्चर्य मजेदार है, लेकिन इसका मतलब है कि आप चेतावनी के बिना मर जाते हैं, जैसे कि निम्न स्तर का जहाज, जो आपको ओहको कर सकता है, बस निराशा होती है;) बेशक यह वह नहीं हो सकता है जो आपके उत्तर में था। इसके अलावा, सिर्फ गेम डिज़ाइन की तुलना में गेम के लिए बहुत कुछ है।
जोनाथन कॉनेल

3

जर्मन बोलने वालों के लिए एक दिलचस्प किताब: http://www.amazon.com/Architektur-Kerns-einer-Game-Engine-Implementierung/dp/3639324471/ref=sr_1_1?ie=UTF8&qid=1314875533&sr=8-1

कब और क्यों यहाँ वास्तुकला का उपयोग किया जा सकता है के बारे में एक करीब देखो: /programming/1901251/component-based-game-engine-design

अपने स्वयं के लिए मैं परियोजना के आकार और कोड का विस्तार या पुन: उपयोग करने की संभावना के आधार पर अपनी वास्तुकला तय करता हूं। माइक्रो प्रोजेक्ट की वास्तुकला में घंटे और घंटे का निवेश क्यों करें जहां कोई मौका नहीं है कि आप फिर से कोड का उपयोग करें? एक ही समय में आप इस परियोजना को समाप्त कर सकते हैं।

रचना बनाम घटक घटक शांत फैंसी सामान हैं लेकिन अधिकांश परियोजनाओं / वास्तुकला में रचना सामान (घटक-आधारित ओवरहेड के बिना) भी करेगी। यह निर्भर करता है कि आपका कंपोनेंट-सिस्टम उस रचना को क्या प्रदान कर सकता है।


उदाहरण के लिए, खिलाड़ी के जहाज को एक अंतरिक्ष शूटर में ले जाएं। आप गेमप्ले के दौरान कुछ बिंदु तक नहीं जानते हैं कि कौन से हथियार, कवच, सिस्टम (घटक) जो खिलाड़ी को लेने, खरीदने, बेचने, खोने, नष्ट करने आदि हैं, इसलिए इसे मॉडल करने का एकमात्र यथार्थवादी तरीका है। वस्तु रचना के माध्यम से।

यह सब कुछ एक लंबे समय पहले भी घटकों के बिना संभव था


-1, घटक रचना का एक रूप है।

ठीक है, लेकिन एक जैसा नहीं है क्योंकि वे अलग-अलग सुविधाएँ प्रदान करते हैं। (इसलिए मैं आपकी टिप्पणी और -1 को नहीं समझता हूं)
विचारधारा

1
जब आप "रचना बनाम घटक" कहते हैं, तो यह स्पष्ट नहीं होता है कि आप किस घटक की तुलना कर रहे हैं । क्या आपके पास गतिशील घटकों बनाम स्थिर घटकों का मतलब है? या तो उन प्रकारों की रचना से संबंधित है जो न तो पारिवारिक और न ही संरचनात्मक रूप से संबंधित हैं? "घटक-आधारित ओवरहेड" क्या है? स्थिर घटक प्रणालियों (और कई गतिशील वाले) में ओवरहेड लगभग शून्य है।

हम्म, दिलचस्प अंक। क्या आपको कुछ और विस्तृत चर्चा करने का मन है? यदि नहीं, तो मैं आपको अपना मेल पता दूसरे प्लेटफ़ॉर्म पर भेजना चाहूंगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.