2010-01-14 13 views
6

कोको विरासत के बजाय प्रतिनिधियों का उपयोग क्यों करता है?कोको विरासत के बजाय प्रतिनिधियों का उपयोग क्यों करता है?

+2

मैं obj-/कोको के बारे में पर्याप्त जानकारी नहीं है ऋण में इस प्रश्न का उत्तर देने के लिए (निश्चित रूप से महान उत्तर का पालन करेंगे) लेकिन आईआईआरसी मुख्य तर्क यह है कि प्रतिनिधियों का उपयोग करके 'एकाधिक' विरासत (ओबीजे-सी में असंभव) का उपयोग करके 'लूसर' युग्मन के लिए अनुमति मिलती है। – ChristopheD

+0

आईआईआरसी क्या है? मैंने इसके बारे में नहीं सुना है। – Casebash

+0

iirc = अगर मुझे सही ढंग से – ChristopheD

उत्तर

6

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

यदि आप इसे सबक्लासिंग के साथ करते हैं, तो आपको प्रत्येक ऑब्जेक्ट को एक सबक्लास बनाना होगा जिसे आप कॉलबैक चाहते थे।

इसके अलावा, इस एक क्लासिक inheritance vs composition सवाल

+0

मुझे लगता है कि यह वास्तव में केवल विरासत बनाम संरचना समस्या – Casebash

+0

आपके इंटरफ़ेस – Casebash

5

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

इस बीच, एक प्रतिनिधि का उपयोग करके आप एक साधारण वस्तु बनाने की अनुमति देते हैं जो कुछ विशिष्ट प्रश्नों का उत्तर देता है या विभिन्न तरीकों से प्रतिक्रिया करता है।

अब जब आप इसे गतिशीलता के साथ जोड़ते हैं जिसे आप फ्लाई पर प्रतिनिधियों को स्वैप करके प्राप्त कर सकते हैं तो यह एक बहुत लचीली मजबूत प्रणाली बना सकता है जो अधिक कोड पुन: उपयोग को बढ़ावा देता है।

इन चीजों के बारे में कुछ सामान्य चर्चाएं here और here हैं। आप कुछ पुराने SO प्रश्न here और here भी पा सकते हैं।

+1

पोस्ट करना चाहिए एक टेम्पलेट उप-वर्ग से बनाने के लिए कम प्रयास कैसे करता है? दूसरी तरफ, फ्लाई पर स्वैप करने की क्षमता कुछ परिस्थितियों में उपयोगी हो सकती है, लेकिन मुझे नहीं लगता कि कोको के लिए यह क्यों जरूरी है। – Casebash

+0

मुझे यह भी इतना यकीन नहीं है कि यह कम काम है, लेकिन विरासत के कम स्तर आमतौर पर सरल डिजाइन की ओर जाता है। सरलता एक अच्छी बात है (टीएम)। –

+0

आवश्यकता के अनुसार। कुछ भी बिल्कुल जरूरी नहीं है, यह ढांचा डिजाइनरों की राय थी जिसने भाषा के बाधाओं को प्रतिनिधिमंडल के माध्यम से रचना दी थी, जो वे कर सकते थे सबसे अच्छा डिजाइन विकल्प था। लगभग एक साल तक इसमें काम करने के बाद मैं इस बात से सहमत हूं कि पसंद एक अच्छा था। लेकिन जब मैं पहली बार कोको में अन्य भाषाओं से आया तो यह मेरे लिए थोड़ा अजीब था। –

0

यहां विस्तार से चर्चा की है: http://www.cocoadev.com/index.pl?ExtendsIsEvil

और जावा लोग यह भी जानते हैं: http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html

+0

में एकाधिक ऑब्जेक्ट्स के लिए एक नियंत्रक लिखने के बारे में अच्छी बात है, अगर आप विस्तृत करने के लिए नहीं जा रहे हैं तो एक टिप्पणी भी दे सकते हैं। क्या होता है यदि ये लिंक मर जाते हैं, पहले की तरह? – pqsk

+0

प्रतिनिधि वर्गों के बीच युग्मन को कम करते हुए ऑब्जेक्ट व्यवहार के अनुकूलन को सरल बनाते हैं। विरासत संकलन समय पर परिभाषित किया गया है, प्रतिनिधिमंडल इस तरह प्रतिबंधित नहीं है और रनटाइम पर किया जा सकता है। – bbaassssiiee

संबंधित मुद्दे