tl; dr: आप OO के बिना वंशानुक्रम कर सकते हैं, आप OO के बिना इनकैप्सुलेशन हो सकते हैं, आप OO के बिना बहुरूपता हो सकते हैं, आप भी बिना OO के तीनों एक साथ हो सकते हैं। फ्लिपसाइड पर, आप विरासत के बिना OO रख सकते हैं। साथ ही, विभिन्न प्रकार के एनकैप्सुलेशन (ADT- ओरिएंटेड और OO) हैं, IOW नहीं सभी एनकैप्सुलेशन OO हैं।
दीर्घ संस्करण:
शब्द "ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग" का आविष्कार एलन के द्वारा किया गया था, इसलिए उन्हें यह तय करना है कि इसका क्या मतलब है। और वह इसे इस तरह परिभाषित करता है :
ओओपी टू का मतलब केवल मैसेजिंग, लोकल रिटेंशन और प्रोटेक्शन और स्टेट-प्रोसेस को छुपाना, और सभी चीजों की एक्सट्रीम लेट-बाइंडिंग है।
कार्यान्वयन-वार, मैसेजिंग एक लेट-बाउंड प्रक्रिया कॉल है, और यदि प्रक्रिया कॉल लेट-बाउंड हैं, तो आप डिज़ाइन समय पर यह नहीं जान सकते हैं कि आप क्या कॉल करने जा रहे हैं, इसलिए आप राज्य के ठोस प्रतिनिधित्व के बारे में कोई धारणा नहीं बना सकते हैं। इसलिए, यह वास्तव में संदेश देने के बारे में है, देर-बाध्यकारी संदेश का कार्यान्वयन है और इसके परिणामस्वरूप एनकैप्सुलेशन होता है।
बाद में उन्होंने स्पष्ट किया कि " बड़ा विचार 'संदेश' है , और पछतावा होने के कारण इसे" संदेश-उन्मुख "के बजाय" ऑब्जेक्ट-ओरिएंटेड "कहा जाता है, क्योंकि" ऑब्जेक्ट-ओरिएंटेड "शब्द का महत्व महत्वहीन वस्तुओं (वस्तुओं) पर केंद्रित है ) और जो वास्तव में महत्वपूर्ण है (संदेश) से विचलित:
बस एक सौम्य अनुस्मारक जो मैंने पिछले OOPSLA में कुछ दर्द उठाकर सभी को यह याद दिलाने की कोशिश की कि स्मॉलटाक न केवल इसका सिंटैक्स या क्लास लाइब्रेरी है, यह कक्षाओं के बारे में भी नहीं है। मुझे खेद है कि मैंने बहुत पहले इस विषय के लिए "ऑब्जेक्ट" शब्द गढ़ा था क्योंकि यह बहुत से लोगों को कम विचार पर ध्यान केंद्रित करने के लिए मिलता है।
बड़ा विचार "मैसेजिंग" है - जो कि स्मालटाक / स्क्वेक की गुठली के बारे में है (और यह कुछ ऐसा है जो हमारे ज़ेरॉक्स PARC चरण में कभी पूरा नहीं हुआ था)। जापानी के पास एक छोटा शब्द है - मा - "जो कि बीच में है" - शायद निकटतम अंग्रेजी समकक्ष "इंटरस्टिशियल" है। महान और विकसित करने की प्रणाली बनाने की कुंजी डिजाइन करने के लिए बहुत अधिक है कि इसके आंतरिक गुणों और व्यवहारों के बजाय इसके मॉड्यूल कैसे संवाद करते हैं। इंटरनेट के बारे में सोचो - जीने के लिए, (ए) को कई अलग-अलग प्रकार के विचारों और अहसासों की अनुमति देना है जो किसी भी एकल मानक से परे हैं और (बी) इन विचारों के बीच सुरक्षित अंतर की डिग्री को अलग करने की अनुमति देते हैं।
(बेशक, आज, ज्यादातर लोग वस्तुओं पर नहीं बल्कि कक्षाओं पर ध्यान केंद्रित करते हैं, जो और भी गलत है।)
संदेश OO के लिए मौलिक है, दोनों रूपक और एक तंत्र के रूप में।
यदि आप किसी को संदेश भेजते हैं, तो आप नहीं जानते कि वे इसके साथ क्या करते हैं। केवल बात यह है कि आप देख सकते हैं, उनकी प्रतिक्रिया है। आप नहीं जानते हैं कि क्या उन्होंने संदेश को स्वयं संसाधित किया है (अर्थात यदि वस्तु में कोई विधि है), यदि उन्होंने संदेश किसी और (प्रतिनिधि / समीपता) को भेज दिया है, यदि वे इसे समझ भी गए हैं। यही सब कुछ है, यही OO है। आप किसी प्रॉक्सी को वास्तविक चीज़ से अलग भी नहीं कर सकते, जब तक कि वह यह जवाब न दे कि आप उससे कैसे उम्मीद करते हैं।
"मैसेजिंग" के लिए एक अधिक "आधुनिक" शब्द "डायनेमिक विधि प्रेषण" या "वर्चुअल मेथड कॉल" है, लेकिन यह रूपक खो देता है और तंत्र पर ध्यान केंद्रित करता है।
इसी तरह के अंक ऑन अंडरस्टैंडिंग डेटा एबस्ट्रेक्शन, विलियम आर। कुक द्वारा पुनरीक्षित और "ऑब्जेक्ट" और "ऑब्जेक्ट ओरिएंटेड" के सरलीकृत, आधुनिक परिभाषाओं के लिए उनके प्रस्ताव में भी किए गए हैं ।
संचालन का गतिशील प्रेषण वस्तुओं की अनिवार्य विशेषता है। इसका मतलब यह है कि लागू किया जाने वाला ऑपरेशन स्वयं वस्तु का एक गतिशील गुण है। संचालन को सांख्यिकीय रूप से पहचाना नहीं जा सकता है, और किसी भी अनुरोध के जवाब में ऑपरेशन को निष्पादित करने के लिए सामान्य रूप से कोई रास्ता नहीं है, इसे छोड़कर। यह प्रथम श्रेणी के कार्यों के साथ बिल्कुल वैसा ही है, जो हमेशा गतिशील रूप से भेजा जाता है।
स्मालटाक -72 में, कोई वस्तु भी नहीं थी! केवल संदेश धाराएँ थीं , जिन्हें लिखा गया, फिर से लिखा गया और पुन: प्रकाशित किया गया। पहले तरीके आए (संदेश धाराओं को पार्स करने और पुन: व्यवस्थित करने के मानक तरीके), बाद में ऑब्जेक्ट्स (कुछ निजी राज्य को साझा करने वाले तरीकों के समूह) आए। वंशानुक्रम बहुत बाद में आया, और वर्गों को केवल विरासत के समर्थन के तरीके के रूप में पेश किया गया था। अगर Kay के अनुसंधान समूह को पहले से ही प्रोटोटाइप के बारे में पता था, तो उन्होंने शायद पहली बार में कक्षाएं शुरू नहीं की होंगी।
हर प्रोग्रामर को डाटा अंडरस्टैंडिंग, रिविजिटेड को समझना चाहिए । यह विस्तार से बताता है कि वस्तुओं और अमूर्त डेटा प्रकारों के बीच वास्तव में क्या अंतर है। वह जावा का उपयोग करके उदाहरण देता है, और यह इस सवाल के लिए बेहद प्रासंगिक है, क्योंकि एडीटी उदाहरण और ऑब्जेक्ट उदाहरण दोनों में वह विरासत, एनकैप्सुलेशन और बहुरूपता का उपयोग करता है, लेकिन केवल एक उदाहरण ऑब्जेक्ट-ओरिएंटेड है! दूसरे शब्दों में: आपके पास विरासत, एनकैप्सुलेशन और बहुरूपता हो सकते हैं, आप तीनों को एक बार भी देख सकते हैं और अभी भी ओओ नहीं है।
दूसरी ओर, आप विरासत के बिना OO हो सकते हैं। जैसे मैंने ऊपर संकेत दिया था: स्मॉलटॉक के मूल संस्करण (एलन कय द्वारा डिजाइन की गई भाषा, "ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग" शब्द के आविष्कारक के पास विरासत नहीं थी।
अंतिम, लेकिन निश्चित रूप से कम से कम नहीं, ऑरलैंडो की संधि , प्रतिनिधिमंडल को विरासत के विकल्प के रूप में चर्चा करती है और कैसे प्रतिनिधिमंडल और विरासत के विभिन्न रूपों से ऑब्जेक्ट-ऑयंटेड भाषाओं के डिज़ाइन स्थान के भीतर अलग-अलग डिज़ाइन बिंदुओं का नेतृत्व होता है। (ध्यान दें कि वास्तव में जावा की तरह विरासत का समर्थन करने वाली भाषाओं में भी, लोगों को वास्तव में इससे बचने के लिए सिखाया जाता है, फिर से संकेत मिलता है कि यह OO के लिए आवश्यक नहीं है।)