ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के साथ डेटा ओरिएंटेड डिज़ाइन कैसे लागू करें? [बन्द है]


17

मैंने डेटा ओरिएंटेड डिज़ाइन (DOD) के बारे में बहुत सारे लेख पढ़े हैं और मैं इसे समझता हूँ लेकिन मैं एक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) प्रणाली को DOD को ध्यान में नहीं रख सकता, मुझे लगता है कि मेरी OOP शिक्षा मुझे रोक रही है। मुझे दोनों को कैसे मिलाना चाहिए? पर्दे के पीछे डीओडी का उपयोग करते समय उद्देश्य एक अच्छा ओओपी इंटरफ़ेस है।

मैंने इसे भी देखा, लेकिन इससे बहुत मदद नहीं मिली: /programming/3872354/how-to-apply-dop-and-keep-a-nice-user-interface


3
तुम कुछ और अधिक विशिष्ट (और खेल से संबंधित), इस सवाल यह है कि पोस्ट करने के लिए की जरूरत है अब तक भी सामान्य।
डेडएमजी

आप सही हैं, लेकिन मैंने गेम प्रोग्रामिंग के अलावा अन्य क्षेत्रों में इस पर चर्चा नहीं की है।
Pombal

4
@ डेडएमजी: मैंने खेल विकास के बाहर डेटा-उन्मुख डिज़ाइन शब्द का उपयोग कभी नहीं देखा है, सिवाय खेल के विकास में उत्पन्न प्रथाओं का उल्लेख करते हुए। यदि आप डेटा-संचालित डिज़ाइन के बारे में सोच रहे हैं, तो यह एक ही बात नहीं है।

जवाबों:


16

मैं कहूंगा कि नोएल ललोपिस का ब्लॉग संभवतः ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग और डेटा-ओरिएंटेड डिज़ाइन के संयोजन के लिए सबसे अच्छा निर्देश है। वह DOD शब्द के प्रवर्तकों में से एक है, एक मजबूत C ++ प्रोग्रामर है, और उसने अपनी शैली के बारे में एक अच्छी बात लिखी है और वह C ++ की OO सुविधाओं का लाभ उठाता है।

मुझे लगता है कि अगर मैं नोएल के अनुसार, उन्हें संयोजन के प्रमुख तत्वों को बाहर करने के लिए था:

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

DOD प्रचार में अभी दूसरा बड़ा नाम Insomniac का माइक एक्टन है, लेकिन जो उसने लिखा है, उसे पढ़कर वह कह सकता है कि वह वास्तव में समर्थक OO (या विरोधी OO नहीं है, जब तक कि यह अभी भी डेटा-उन्मुख है)।


उत्तर के लिए धन्यवाद, लेकिन आप जो कह रहे हैं कि मुझे DOD का उपयोग करने के लिए क्या करना चाहिए, न कि मैं इसके साथ OO का उपयोग कैसे कर सकता हूं। मैंने नोएल के ब्लॉग, माइक एक्टन के किराए (: डी), डीआईसीई के प्रकाशनों को दूसरों के बीच पढ़ा है और मैं समझता हूं कि डीओडी का उपयोग कैसे किया जाए, बस ओओ के साथ नहीं मिला।
पोम्बल

2
आपको क्या लगता है कि OO क्या है? मैं नोएल के अधिकांश कोड OO को कॉल करूंगा, उदाहरण के लिए - अभी भी कक्षाएं और उदाहरण हैं, अभी भी टाइप-आधारित प्रेषण है, वहाँ अभी भी वंशानुक्रम हो सकता है (C ++ 0x की परिभाषा POD को इसे अनुमति देने के लिए बदल दिया गया था)। एक अभी भी मॉडल समस्याओं के बजाय संचालन के बजाय डेटा से शुरू होता है।

उदाहरण के लिए बहुरूपता ओओपी का एक महत्वपूर्ण हिस्सा है, जैसे कि वस्तु के राज्य हैं। डेटा ओरिएंटेड डिज़ाइन को गेम इकाइयाँ जैसे गुणों को देने में सक्षम होना चाहिए, सक्षम करने, बातचीत करने में सक्षम, सक्षम होने ... विरासत का उपयोग करते हुए। यह सब एक चतुर डेटा प्रबंधक पर निर्भर करता है जो भौतिकी या एनीमेशन के लिए प्रत्येक घटक को केवल आवश्यक संस्थाएं प्रदान करता है।
दानीझर १12

@ शेहरथिस: अगर मैं आपकी आपत्ति को समझता हूं, तो यह है कि उप-प्रकार बहुरूपता OO की एक प्रमुख विशेषता है। मैं मानता हूं कि बिना समर्थन के ओओ होने का दावा करने वाली एक भाषा अजीब होगी, लेकिन इसका मतलब यह नहीं है कि यह एक गेम प्रोग्रामिंग ओओ शैली में प्रोग्राम किए जाने पर भी , एक तरह की समस्याओं के लिए पहला सहारा का उपकरण है । मैं यह भी तर्क दूंगा कि DOD वास्तव में विशेष प्रकार के बहुरूपता (नाममात्र उपप्रकार) से बचने के बारे में है, लेकिन दूसरों को प्रोत्साहित करना (C ++ में, ADL के साथ तदर्थ बहुरूपता, या मूल्य प्रतिनिधित्व के बारे में गारंटी के साथ संरचनात्मक बहुरूपता)।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.