2010-09-08 6 views
22

रूबी का आविष्कार करने वाले मत्ज़ ने कहा कि उन्होंने भाषा को पाइथन से अधिक ऑब्जेक्ट-ओरिएंटेड बनाने के लिए डिज़ाइन किया है। रूबी पाइथन से अधिक वस्तु-उन्मुख कैसे है?रूबी पाइथन से अधिक वस्तु-उन्मुख कैसे है?

उत्तर

9
WikiVS से

,

है & hellip; जहां रूबी में सभी कार्यों और अधिकांश ऑपरेटर वास्तव में किसी ऑब्जेक्ट के तरीके हैं, कई पायथन फ़ंक्शन विधियों के बजाय प्रक्रियात्मक कार्य होते हैं।

रूबी के निर्माता मैटज़ के साथ निम्नलिखित interview, आपके प्रश्न और उपरोक्त बिंदु पर अतिरिक्त संदर्भ प्रदान करता है।

और नरकिप;

स्टीवर्ट: चलिए थोड़ा इतिहास शुरू करते हैं। आपने रूबी लिखने का फैसला क्यों किया?

मैट: 1 99 3 में, मैं स्क्रिप्टिंग भाषाओं के बारे में एक सहयोगी के साथ बात कर रहा था। मैं उनकी शक्ति और उनकी संभावनाओं से बहुत प्रभावित था। मुझे लगा कि स्क्रिप्टिंग जाने का रास्ता था।

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

तब मैं पाइथन में आया। यह एक व्याख्यात्मक, वस्तु उन्मुख भाषा थी। लेकिन मुझे ऐसा नहीं लगता था कि यह एक "पटकथा" भाषा थी। इसके अलावा, यह प्रक्रियात्मक प्रोग्रामिंग और ऑब्जेक्ट उन्मुख प्रोग्रामिंग की एक संकर भाषा थी।

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

और नरक;

+0

* कई पायथन फ़ंक्शन प्रक्रियात्मक हैं *: मुझे लगता है कि इसका अर्थ है 'लेन' या '<'; वे क्रमशः विधियों ('__len__' और' __lt__') के रूप में लागू किए जाते हैं। –

15

आमतौर पर दिया गया एक उदाहरण len है, जो पाइथन में एक अंतर्निहित कार्य है। आप अपनी वस्तुओं में एक विशेष __len__ विधि लागू कर सकते हैं जिसे len द्वारा बुलाया जाएगा, लेकिन len अभी भी एक फ़ंक्शन है। रुबी में, ऑब्जेक्ट्स में केवल .length प्रॉपर्टी/विधि है, इसलिए के बजाय obj.length कहने पर यह अधिक ऑब्जेक्ट उन्मुख दिखाई देता है, हालांकि हुड के नीचे गहराई बहुत कुछ होती है।

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

पायथन के भारी उपयोग में मुझे कभी भी ओओ विभाग में कमी नहीं मिली है। यह सबकुछ कर सकता है जो मैं वस्तुओं के साथ करना चाहता हूं। सच है, रुबी कुछ हद तक पूरी तरह ओओ लगता है, लेकिन कम से कम मेरे अनुभव में यह वास्तव में व्यावहारिक चिंता नहीं रही है।

+3

मुझे 'लेन' उदाहरण भ्रामक लगता है। उस अर्थ में ऑपरेटर ओवरलोडिंग ऑब्जेक्ट उन्मुख नहीं है, क्योंकि 'ए + बी' विधि कॉल की तरह नहीं दिखता है। महत्वपूर्ण बात यह है कि इसे एक विधि के रूप में लागू किया जाता है। – nikow

+3

@nikow: बिंदु यह है कि 'लेन' एक वास्तविक कार्य है। ऑपरेटर अधिभार केवल सिंटैक्टिक चीनी है - संकलक वास्तव में एक विधि कॉल उत्पन्न करता है। यह पायथन के 'लेन' –

+1

के मामले में नहीं है जैसा कि आपने स्वयं लिखा है 'लेन' आमतौर पर '__len__' विधि को कॉल करता है। एक समारोह के रूप में 'लेन' होने के कारण ऑपरेटर ओवरलोडिंग की तरह सिंटैक्टिक चीनी होती है। – nikow

22

यदि आप 1 99 3 से पायथन लेते हैं और रूबी के साथ तुलना करते हैं तो बाद वाला ऑब्जेक्ट उन्मुख होता है। हालांकि, overhaul in Python 2.2 के बाद यह अब सत्य नहीं है। मैं कहूंगा कि आधुनिक पायथन ऑब्जेक्ट उन्मुख के रूप में है।

+10

+1। यह बहुत महत्वपूर्ण है। मैटज़ ने 23 फरवरी, 1 99 3 को रूबी की घोषणा की। मौजूदा भाषाओं के उनके सर्वेक्षण ने उन्हें रूबी पर काम करना शुरू कर दिया, इससे पहले भी वह पहले से ही रहे थे। इसलिए, आपको ऐतिहासिक संदर्भ को ध्यान में रखना होगा, आप केवल पायथन 3.2 के साथ तुलना नहीं कर सकते हैं, आपको 1992/93 में जो भी व्यापक रूप से उपलब्ध संस्करण था, उसे देखने की आवश्यकता है। इसके अलावा, आपको खाते में "सांस्कृतिक" संदर्भ लेना होगा: मैट स्मॉलटॉक से बहुत परिचित है। कोई भी जिसने कभी भी स्मॉलटाक का उपयोग किया है, आमतौर पर उन लोगों की तुलना में ओओ पर अधिक मजबूत विचार हैं। जैसे एलन के कहते हैं कि सभी राज्य निजी होना चाहिए। –

-3

यह आसान है, लगभग सब कुछ रूबी (संख्याओं सहित) में एक वस्तु है; कोई स्केलर मूल्य नहीं हैं।

+4

... जैसा कि पायथन में है। –

+2

@ बायो, AFAIK, पायथन में, आप अंतर्निहित कक्षाओं (इंटीजर, स्ट्रिंग) में अपने कार्यों को इंजेक्ट नहीं कर सकते हैं ... इसलिए इस संबंध में रूबी अधिक ओओपी है। – st0le

+4

@ st0le: मुझे नहीं लगता कि यह रूबी _more_ ऑब्जेक्ट उन्मुख बनाता है। सिर्फ इसलिए कि रूबी अधिक कक्षाओं को जोड़ने के लिए सभी वर्गों को फिर से खोल सकता है (आईएमएचओ) ओओ-नेस का एक उपाय नहीं है। जावा "कक्षाओं के तरीकों को जोड़ नहीं सकता"। [विश्वास नहीं कर सकता मैंने कभी जावा को एक उदाहरण के रूप में इस्तेमाल किया है!]। बंदर-पैच/डक-पंच में सक्षम होने के कारण ओओ-नेस की तुलना में गतिशीलता के बारे में अधिक जानकारी है। –

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