क्या कोई वस्तु-उन्मुख प्रोग्रामिंग भाषाएं हैं जो वर्ग प्रतिमान पर आधारित नहीं हैं?
क्या कोई वस्तु-उन्मुख प्रोग्रामिंग भाषाएं हैं जो वर्ग प्रतिमान पर आधारित नहीं हैं?
जवाबों:
जहाँ तक मुझे पता है, स्व मूल भाषा है जिसने प्रोटोटाइप के आधार पर "क्लास-फ्री" प्रतिमान का आविष्कार किया था । यह पहले से ही अस्तित्व में है (एक प्रायोगिक चरण में) 1980 के दशक में और स्मॉलटाक के प्रोटोटाइप पैटर्न के सुरुचिपूर्ण उपयोग को चरम पर धकेलता है , जैसे कि कक्षाएं पूरी तरह से समाप्त हो जाती हैं।
इसने अन्य सभी "वर्ग-मुक्त" OO भाषाओं को प्रभावित किया, जिनके बारे में मुझे पता है:
जावास्क्रिप्ट जैसी भाषाएं प्रोटोटाइप पर आधारित हैं , जहां मौजूदा वस्तुओं के क्लोनिंग द्वारा व्यवहार का पुन: उपयोग किया जाता है। विकिपीडिया लेख जिसे मैंने जोड़ा था वह बताता है कि लुआ, एक्शनस्क्रिप्ट और कई अन्य भाषाएं इस प्रतिमान का अनुसरण करती हैं।
दुनिया में सबसे लोकप्रिय वस्तु-उन्मुख प्रोग्रामिंग भाषा में कक्षाएं नहीं हैं, इसे जावास्क्रिप्ट कहा जाता है और यह प्रोटोटाइप आधारित है: http://en.wikipedia.org/wiki/Prototyp-based_programming
ऑब्जेक्ट-ओरिएंटेशन कई महत्वपूर्ण अवधारणाओं के लिए एक छत्र शब्द है जो केवल एक दूसरे पर आंशिक रूप से आकस्मिक हैं। उदाहरण के लिए, विरासत को वर्गों के बीच के उदाहरणों के बीच केस-बाय-केस के आधार पर घोषित किया जा सकता है, या पूरी कक्षा को ठोस prototype
वस्तु द्वारा दर्शाया जा सकता है , जैसा कि थॉमस ने लिखा है। उदाहरण रचना से संरचना विवरण को अलग करना सामान्य है। इसी तरह, लेट बाइंडिंग का अर्थ है कि समान रूप से एक ही विधि वाली वस्तुएं अनिवार्य रूप से एक ही काम नहीं करती हैं जब इसे लागू किया जाता है, और यह निर्णय रनटाइम पर किया जाता है। इसी तरह प्रोटोटाइप आधारित दृष्टिकोण के साथ संभव है। और एनकैप्सुलेशन अनिवार्य रूप से पूरी तरह से स्वतंत्र है कि क्या आपकी वस्तुएं घोषित वर्गों के उदाहरण हैं या नहीं।
उस ने कहा, अधिकांश ओओ भाषा वर्ग-आधारित शिविर में दृढ़ता से हैं। लेकिन फिर भी ऐसे मुहावरे हैं जो लाइन को धुंधला करते हैं: डोमेन-चालित डिज़ाइन अक्सर उन प्रणालियों की ओर जाता है जिसमें स्थिर वर्ग आरेख की तुलना में विशेष वस्तुओं की पहचान बहुत अधिक महत्वपूर्ण होती है, और सज्जाकार एक ही वर्ग या इंटरफ़ेस की वस्तुओं को बहुत अधिक होने की अनुमति देते हैं अलग व्यवहार।
किले कक्षाओं के बजाय लक्षणों के आधार पर एक वस्तु-उन्मुख भाषा है। अंतर मुख्य रूप से कार्यान्वयन रचना में है। एक वस्तु का व्यवहार (विधि परिभाषाएं) अभी भी कार्यक्रम पाठ में एक विशिष्ट बिंदु पर घोषणाओं द्वारा निर्धारित किया जाता है। तो इस मायने में यह क्लास-आधारित सिस्टम के समान है।
ऑब्जेक्ट कैलकुली (कार्डेली द्वारा, मुझे लगता है) हैं, जो विशुद्ध रूप से ऑब्जेक्ट-आधारित हैं। हर विधि एक उदाहरण सदस्य है। आप किसी मौजूदा ऑब्जेक्ट की सामग्री लेकर और उसके कुछ सदस्यों को जोड़ने, हटाने या बदलने के द्वारा नई वस्तुओं का निर्माण करते हैं। यह प्रोटोटाइप से थोड़ा अलग है, क्योंकि नई वस्तु का पुरानी वस्तु से कोई लिंक नहीं है, बस इसकी कुछ सामग्री है।
IIRC, पायथन और अन्य हैशटेबल-उन्मुख भाषाओं का उपयोग करके एक समान तरीके से प्रोग्राम करना संभव है: आप एक फ़ंक्शन को एक उदाहरण सदस्य के रूप में जोड़ सकते हैं और फिर इसे एक विधि के रूप में कॉल कर सकते हैं।
Ada, 1995 के संशोधन के रूप में, Ada ऑब्जेक्ट-ओरिएंटेड है, लेकिन कई अन्य OO भाषाओं के विपरीत यह ऑब्जेक्ट-ओरिएंटेड प्रकार और मॉड्यूल को एक "क्लास" नामक एकल निर्माण में संयोजित नहीं करता है। एक प्रकार को "वर्ग फू" घोषित करने के बजाय, और सभी संबंधित विधि घोषणाओं को वर्ग घोषणा के अंदर रखकर, आप एक पैकेज घोषित करते हैं record
और पैकेज के अंदर प्रकार (ए ) और अन्य चीजों की घोषणा करते हैं । यह उस तरह से "क्लास-फ्री" नहीं है जैसे कि कुछ अन्य उल्लेखित भाषाएं हैं, यह चीजों को व्यवस्थित करने का सिर्फ एक अलग तरीका है।
Ada 95 के ऑब्जेक्ट-ओरिएंटेड फीचर्स को भाषा के मौजूदा 1983 संस्करण में जोड़ा गया था; इसने मौजूदा रिकॉर्ड और पैकेज निर्माणों का विस्तार किया जो विरासत वगैरह का समर्थन करता है।
Io एक और प्रोटोटाइप-आधारित ऑब्जेक्ट-ओरिएंटेड भाषा है। यह वास्तव में कई भाषाओं से प्रेरणा लेता है जो पहले से ही अन्य उत्तरों में उल्लिखित हैं।
Io एक गतिशील प्रोटोटाइप-आधारित प्रोग्रामिंग भाषा है। Io में विचार ज्यादातर स्मॉलटाकल (सभी मूल्य वस्तुएं), स्व (प्रोटोटाइप-आधारित), न्यूटनस्क्रिप्ट (अंतर वंशानुक्रम), Act1 (संक्षिप्तता के लिए अभिनेता और वायदा) से प्रेरित हैं, लिस्प (कोड एक रनवे निरीक्षण योग्य / परिवर्तनीय पेड़ है) और लुआ (छोटा, एम्बेड करने योग्य)।
Erlang। और हाँ, Erlang है एक वस्तु उन्मुख भाषा, के रूप में यह OO की परिभाषा के सभी तीन अंक पूरा करता है।