2009-03-27 8 views
7

रखते हुए कक्षाएं शिथिल युग्मित, समझने के लिए, संशोधित करने, और डिबग आसान है कि लेखन कोड का एक महत्वपूर्ण पहलू है। एक नौसिखिया के रूप में, हालांकि, लगभग किसी भी समय मैं संघर्ष के सबसे सरल उदाहरणों से परे मिलता हूं।ढीला युग्मन और OO आचरण शुरुआती

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

कैसे (या क्यों) मैं किसी अन्य वर्ग में बचत, लोड हो रहा है, और स्वरूपण पाठ के सभी कार्य करते हैं जब मैं पहले से ही एक घटक है कि मेरे लिए यह सब करता है?

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

मैं बस 'बेहतर तरीका' कैसे काम करता हूं इस पर संकल्पनात्मक रूप से खो गया हूं। कोई विचार?

उत्तर

5

मुझे विश्वास है कि आप कुछ बुनियादी अवधारणाओं पर चूक गए हैं।

OOP के पीछे विचार तर्क की अलग, पुन: प्रयोज्य इकाइयों से शुरू होता है। आत्मनिर्भर मॉड्यूल बनाने पर जोर देने के साथ।

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

loosely coupled होने के पीछे विचार यह है कि आप उस ज्ञापन नियंत्रण को दूसरे नियंत्रण के साथ प्रतिस्थापित कर सकते हैं जो समान इंटरफ़ेस विनिर्देशों को पूरा करता है। अर्थात्, आप इसे तुरंत चालू कर सकते हैं, उपयोगकर्ता को इसके साथ बातचीत करने दें, और आवश्यक होने पर डेटा खींचें।

कमजोर युग्मित होने के कारण Separation of Concerns (एसओसी) के विचार के साथ हाथ में हाथ जाता है; ओवरलैपिंग कार्यक्षमता को कम करने और प्रबंधित करने में आसान बनाने के लिए एक कार्यक्रम को अलग-अलग विशेषताओं में तोड़ने की प्रक्रिया है। लेकिन वे एक ही बात नहीं हैं। Incidentaly, यह ओओपी में प्रोग्रामिंग की प्रक्रियात्मक शैली से दूर जाने के पीछे मुख्य ड्राइवरों में से एक था। चूंकि ओओपी प्रोग्रामिंग को संबंधित और अलग कार्यक्षमता के संदर्भ में सोचने के लिए मजबूर करता है।

ऐसा लगता है कि आप वास्तव में एसओसी के बारे में पूछ रहे हैं।

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

0

ठीक है, मैं इस सवाल पर पूरी तरह से स्पष्ट नहीं हूं, लेकिन ऐसा लगता है कि रणनीति पैटर्न यहां काम करेगा।

बिल्ड अपने माता पिता आरटीएफ वस्तु पर आधारित है लेकिन भंडारण, अपने स्वयं के तरीकों के साथ परिभाषित वस्तुओं के रूप में आदि के लिए से निपटने के तरीकों की स्थापना की एक वस्तु।

इस सख्ती से सभी माता-पिता के तरीकों इनहेरिट बिना रचना की शक्ति में सक्षम बनाता है और आप एक विशाल कस्टम वस्तु का निर्माण करने के लिए, बस तरीकों आप की जरूरत की जगह नहीं है।

5

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

जब आप निर्भरता इंजेक्शन के साथ इंटरफेस का उपयोग करते हैं, यानी कक्षा को वास्तविक कार्यान्वयन के बजाय काम करना है, यह आपके लिए एक विशेष कार्यान्वयन बनाने के बजाय, आप अपने आवेदन में और भी decoupling प्राप्त करते हैं। अब कक्षा केवल इंटरफेस के बारे में जानता है और यह भी नहीं जानता कि इसे कैसे बनाया जाए, बस इसका इस्तेमाल करें। निर्भरता इंजेक्शन अक्सर बिल्डर या फैक्ट्री जैसे क्रिएशनल पैटर्न के साथ प्रयोग किया जाता है, जहां आप एक वर्ग में वस्तुओं के निर्माण को स्थानीयकृत करते हैं ताकि जब आप अतिरिक्त कक्षाओं के साथ आवेदन बढ़ाते हैं तो केवल उस वर्ग को बदलने की आवश्यकता होती है।

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

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

+0

नहीं, डेल्फी में आप अंडर-इंजीनियर के लिए अधिक संभावना रखते हैं –

0

आपके द्वारा चुने गए उदाहरण अपेक्षाकृत जटिल हैं।

आप सही कह रहे हैं कि आरटीएफ ज्ञापन घटक बहुत कम है। इतनी कमजोर, कि यह व्यावहारिक रूप से विस्तार योग्य नहीं है, और केवल इसका उपयोग किया जा सकता है, क्योंकि यह प्रस्तुति/दृश्य, नियंत्रक और मॉडल को एकीकृत करता है।

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

  • लोड हो रहा है और घटकों डेटा की बचत केवल मतलब अगर तुम नहीं:

    rtf ज्ञापन घटक उपयोग करते हैं, जो आप अच्छी तरह से डिजाइन वर्गों का उपयोग आसपास काम करने के लिए हो सकता है की एक सीमित दायरे है अपने प्रोग्राम में अन्य डेटा को उसी फ़ाइल/डीबी में सहेजना होगा।

  • यह बड़ी मात्रा में डेटा को अच्छी तरह से संभाल नहीं करता है।
  • और यह केवल आरटीएफ के एक छोटे से सबसेट को समझता है।
संबंधित मुद्दे