अंतर यह है कि कुछ क्या है, और कैसे है कुछ व्यवहार करता है।
बहुत सारी भाषाएं दोनों को एक साथ जोड़ने का प्रयास करती हैं, लेकिन वे काफी अलग चीजें हैं।
यदि कैसे है, और कैसे है ...
यदि सब कुछ विरासत में मिलता है object
तो कुछ लाभ होते हैं जैसे: वस्तु का कोई भी चर किसी भी मूल्य को कभी भी धारण कर सकता है। लेकिन यह भी रगड़ना है, सब कुछ ( एक ) की तरह व्यवहार करना चाहिए ( और क्या )object
object
।
परंतु:
- क्या होगा यदि आपकी वस्तु में समानता की सार्थक परिभाषा नहीं है?
- अगर इसके पास कोई सार्थक हैश न हो तो क्या होगा?
- क्या होगा यदि आपकी वस्तु को क्लोन नहीं किया जा सकता है, लेकिन ऑब्जेक्ट हो सकते हैं?
या तो object
प्रकार अनिवार्य रूप से बेकार हो जाता है - वस्तु के कारण सभी संभावित उदाहरणों में कोई समानता नहीं प्रदान करता है। या ऐसी वस्तुएं मौजूद होंगी जिनके पास कुछ प्रकल्पित सार्वभौमिक संपत्ति की टूटी हुई / जूता-सींग वाली / बेतुकी परिभाषा है, object
जिस पर लगभग साबित होता है को छोड़कर सार्वभौमिक व्यवहार होता है।
अगर व्हाट्स अप के साथ बाउंड नहीं है
वैकल्पिक रूप से आप क्या और कैसे अलग रख सकते हैं । तब कई अलग अलग प्रकार (कम से आम में कुछ भी नहीं के साथ सभी क्या ) कर सकते हैं उसी तरह से सब व्यवहार सहयोगी से देखा कैसे । इस अर्थ में एक Iterator
का विचार एक विशिष्ट नहीं है , लेकिन कैसे है । विशेष रूप से आप किसी चीज़ के साथ कैसे बातचीत करते हैं जब आप अभी तक नहीं जानते हैं कि आप किसके साथ बातचीत कर रहे हैं।
जावा (और इसी तरह) इंटरफेस का उपयोग करके इस तक पहुंचने की अनुमति देता है। इस संबंध में एक इंटरफ़ेस संचार के साधनों का वर्णन करता है, और इसके बाद संचार और कार्रवाई का एक प्रोटोकॉल होता है। किसी भी क्या है जो अपने आप वाणी एक दिया की हो कैसे , कहा गया है कि यह प्रासंगिक संचार और कार्रवाई प्रोटोकॉल द्वारा उल्लिखित का समर्थन करता है। यह किसी भी सहयोगी पर भरोसा करने की अनुमति देता है कैसे और नहीं वास्तव में कौन-निर्दिष्ट द्वारा झमेले में क्या इस्तेमाल किया जा सकता है।
C ++ (और समान) बतख टाइपिंग द्वारा इस के लिए दृष्टिकोण की अनुमति देते हैं। एक टेम्पलेट परवाह नहीं करता है अगर सहयोगी प्रकार घोषित करता है कि यह एक व्यवहार का अनुसरण करता है, बस एक दिए गए संकलन संदर्भ में, कि वस्तु के साथ एक विशेष तरीके से बातचीत की जा सकती है। यह C ++ पॉइंटर्स, और ऑब्जेक्ट्स को एक ही कोड द्वारा उपयोग किए जाने वाले विशिष्ट ऑपरेटरों की सवारी करने की अनुमति देता है। क्योंकि वे चेक-लिस्ट को समतुल्य मानने के लिए मिलते हैं।
- * a, a->, ++ a, और a ++ -> इनपुट / फॉरवर्ड इटरेटर का समर्थन करता है
- * a, a->, ++ a, a +, --a, और a-- -> द्विदिश पुनरावृत्ति का समर्थन करता है
अंतर्निहित प्रकार भी बार-बार दोहराना एक कंटेनर हो सकता है, यह किसी भी हो सकता है नहीं है क्या । इसके अतिरिक्त यह कुछ सहयोगियों को और भी सामान्य होने की अनुमति देता है, केवल एक फ़ंक्शन की आवश्यकता की कल्पना करें a++
, एक पुनरावृत्तिकर्ता उसे संतुष्ट कर सकता है, इसलिए एक संकेतक, तो एक पूर्णांक, तो किसी भी वस्तु को लागू कर सकता है operator++
।
अंडर और ओवर स्पेसिफिकेशन
दोनों दृष्टिकोणों के साथ समस्या अंडर और ओवर स्पेसिफिकेशन है।
एक इंटरफ़ेस का उपयोग करने के लिए ऑब्जेक्ट को घोषित करने की आवश्यकता होती है यह एक दिए गए व्यवहार का समर्थन करता है, जिसका अर्थ यह भी है कि निर्माता को शुरुआत से ही इसे लागू करना होगा। इस कारण कुछ क्या 'कटौती नहीं करने के लिए है, के रूप में वे यह घोषणा नहीं की थी। इसका अर्थ यह भी है कि कभी-कभी एक सामान्य पूर्वज क्या होता है, इंटरफ़ेस हाउ का प्रतिनिधित्व करता है । यह प्रारंभिक समस्या का हल करता है object
। यह सहयोगियों को उनकी आवश्यकताओं को अधिक निर्दिष्ट करने का कारण बनता है, साथ ही साथ कुछ वस्तुओं को घोषणा की कमी के कारण या तो अनुपयोगी होना पड़ता है, या एक अपेक्षित व्यवहार के रूप में छिपे हुए गोचरों को खराब परिभाषित किया जाता है।
टेम्पलेट का उपयोग करने के लिए यह आवश्यक है कि सहयोगी पूरी तरह से अज्ञात व्हाट्स के साथ काम करता है , और अपनी बातचीत के माध्यम से यह एक हाउ को परिभाषित करता है । कुछ हद तक यह बनाता है, कठिन सहयोगियों लेखन के रूप में यह विश्लेषण करना चाहिए क्या अपने संचार पुरातन के लिए बाहर (कार्यों / क्षेत्रों / आदि), जबकि संकलन त्रुटियों से परहेज, या कम से कम बात कैसे एक दिया क्या के लिए अपनी आवश्यकताओं को मेल नहीं खाता कैसे । यह सहयोगी किसी भी से निरपेक्ष न्यूनतम आवश्यकता होती है की अनुमति देता है क्या , का व्यापक रेंज की अनुमति देता है क्या 'प्रयोग की जाने वाली है। दुर्भाग्यवश इसमें वस्तुओं के निरर्थक उपयोग की अनुमति देने का नकारात्मक पहलू है जो तकनीकी किसी दिए गए संचार प्राइमेटिव प्रदान करते हैंकैसे , लेकिन निहित प्रोटोकॉल का पालन न करें ताकि सभी प्रकार की बुरी चीजें घटित हो सकें।
iterators
इस मामले में एक Iterator
है एक यह कैसे बातचीत के विवरण के लिए आशुलिपि है। जो कुछ भी उस विवरण से मेल खाता है वह परिभाषा ए है Iterator
। यह जानते हुए कि कैसे हमें सामान्य एल्गोरिदम लिखने और की 'एक छोटी सूची के लिए अनुमति देता है कैसे ' एक विशिष्ट दिया रहा है क्या 'की जरूरत आदेश एल्गोरिथ्म काम करने के लिए में प्रदान किया जाना है। उस सूची में समारोह / गुण / आदि, उनके क्रियान्वयन पर ध्यान देता है विशिष्ट हैं क्या कि एल्गोरिथ्म द्वारा के साथ निपटा जा रहा है।