2008-10-30 15 views
8

शब्द का अर्थ क्या है, मैं रूबी और संभवतः जावास्क्रिप्ट को "सत्य" ऑब्जेक्ट उन्मुख भाषाओं के रूप में भी सुन रहा हूं, सी ++ और सी # के विपरीत जो वर्ग उन्मुख (या टेम्पलेट आधारित) भाषाएं हैं। सच ओओ का क्या अर्थ है और कक्षा/टेम्पलेट दृष्टिकोण पर इसका क्या फायदे हैं?"सत्य" ऑब्जेक्ट ओरिएंटेशन

उत्तर

13

यह एक विषयपरक शब्द है जो भाषाओं को बढ़ावा देने के लिए उपयोग किया जाता है। मैंने देखा है कि यह सी # और जावा की तुलना में वास्तविक ऑब्जेक्ट उन्मुख भाषाएं कहता है क्योंकि सब कुछ कक्षा में होना चाहिए (कोई वैश्विक कार्य या चर नहीं) और सभी ऑब्जेक्ट्स एक ऑब्जेक्ट क्लास से प्राप्त होते हैं।

रूबी के लिए, यह संदर्भित कर सकता है कि रूबी ऑब्जेक्ट के रूप में सब कुछ कैसे व्यवहार करता है, ताकि आप या String.valueOf(1) जैसे कुछ के बजाय 1.to_s लिख सकें। ऐसा इसलिए है क्योंकि रूबी मूल्य और संदर्भ चर के बीच कोई भेद नहीं करता है। जावास्क्रिप्ट में कोई कक्षा नहीं है और आप केवल एक्स्टेंसिबल ऑब्जेक्ट्स बनाते हैं जिन्हें पुन: उपयोग के लिए क्लोन किया जा सकता है, प्रोग्रामिंग की यह शैली Prototype-based programming के रूप में जानी जाती है।

दूसरी तरफ सी ++ को बहु-प्रतिमान भाषा के रूप में विज्ञापित किया जाता है जो आपको ऑब्जेक्ट उन्मुख, जेनेरिक और प्रक्रियात्मक प्रोग्रामिंग जैसे कई दृष्टिकोणों का उपयोग करने की अनुमति देता है। यह एक प्रतिमान से चिपकता नहीं है।

लेकिन हाँ, यह केवल एक व्यक्तिपरक शब्द है जिसका अर्थ कुछ भी हो सकता है। आम तौर पर यह संदर्भित करता है कि भाषा वस्तुओं पर अधिक जोर देती है जैसे कि अन्य भाषा तत्वों जैसे कि फ़ंक्शंस, टेम्पलेट इत्यादि।Wikipedia's article on SmallTalk यह कॉल एक 'शुद्ध' वस्तु उन्मुख भाषा है, और विवरण के रूप में अच्छी तरह से रूबी पर लागू होता है:

स्मालटाक एक 'शुद्ध' OO भाषा, जिसका अर्थ है कि, जावा और सी ++ के विपरीत, वहाँ कोई अंतर नहीं है है मूल्य जो ऑब्जेक्ट्स और मान हैं जो आदिम प्रकार हैं। स्मालटाक में, , इस तरह के पूर्णांक के रूप में आदिम मूल्यों बूलियन्स और वर्ण भी वस्तुओं, इस अर्थ में कि वे उन पर इसी वर्ग के उदाहरणों, और संचालन भेजने संदेशों द्वारा लाया जाता है कर रहे हैं। एक प्रोग्रामर क्लासेस, आदिम मूल्यों लागू करते हैं ताकि नए व्यवहार उनके उदाहरण के लिए परिभाषित किया जा सकता बदल सकते हैं - उदाहरण के लिए, नए नियंत्रण संरचनाओं को लागू करने - या यहां तक ​​कि इतना अपने मौजूदा व्यवहार बदल हो जाएगा कि । इस तथ्य को में संक्षेप में सुनाया गया है " स्मॉलटॉक सबकुछ एक ऑब्जेक्ट है" (जो अधिक सटीक रूप से "सभी मान ऑब्जेक्ट्स" के रूप में व्यक्त किया जाएगा, चर के रूप में नहीं हैं)।

+1

मैं यह जोड़ना चाहता हूं कि भाषा शुद्ध/सही ऑब्जेक्ट उन्मुख है या नहीं, इसके प्रतिस्पर्धी के बाद भाषा बेहतर या बदतर नहीं होती है। आप पाएंगे कि इसे आमतौर पर बेहतर बनाने के रूप में विज्ञापित किया जाता है, लेकिन यह बहुत ही व्यक्तिपरक है। –

+0

@he_the_great: यह सच है, लेकिन विचार है कि एक भाषा है कि केवल एक रूपक/प्रतिमान इस प्रकार को समझने के लिए और केवल कि अलग मानदंड घुलमिल से जानने के लिए आसान है। इसलिए, यदि विभिन्न प्रतिमानों को मिलाकर कोई अभिव्यक्ति शक्ति नहीं जोड़ती है, तो यह केवल जटिलता को जोड़ती है। उदा।, तथ्य यह है कि जावा आदिम प्रकार वस्तुएं नहीं हैं केवल अभिव्यक्ति शक्ति जोड़ने के बिना भाषा में जटिलता जोड़ती हैं। – Giorgio

-1

प्रदान किए गए उदाहरणों के बाद होने वाले भेद के बारे में निश्चित नहीं है। लेकिन मुझे पता है कि यह क्या नहीं है! जब ओओ को किसी भाषा के बाद एक भाषा के रूप में बोल्ड किया जाता है, उदा। पर्ल ओओ

2

सी ++ समस्या निम्न है। सी ++ वर्ग केवल स्रोत वाक्यविन्यास में मौजूद हैं। गुणों और विधियों के साथ कोई रन-टाइम क्लास ऑब्जेक्ट नहीं है।

पायथन में, सब कुछ एक वस्तु है। एक ऑब्जेक्ट की कक्षा एक और वस्तु है, इसकी अपनी विधियों और विशेषताओं के साथ। यह छोटे-छोटे वातावरण के बारे में भी सच है, जो ऑब्जेक्ट-ओरिएंटेशन का एक प्रकार का बेंचमार्क है।

मुझे लगता है कि "सत्य" ऑब्जेक्ट-ओरिएंटेशन उन परिवेशों को संदर्भित करता है जहां सब कुछ एक वस्तु है।

[जावा इस क्योंकि यह आदिम प्रकार है की कम पड़ता है।]

+0

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

2

मुझे लगता है कि यह Prototype Based Programming की चर्चा करते हुए किया जा सकता है, जिसमें एक Programming Paradigm:

वर्ग मौजूद नहीं हैं, और व्यवहार का पुन: उपयोग (कक्षा-आधारित भाषाओं में विरासत के रूप में जाना जाता है) मौजूदा वस्तुओं को क्लोन करने की प्रक्रिया के माध्यम से किया जाता है जो प्रोटोटाइप के रूप में कार्य करता है। इस मॉडल को कक्षा-रहित, प्रोटोटाइप-उन्मुख या इंस्टेंस-आधारित प्रोग्रामिंग के रूप में भी जाना जा सकता है।

Ruby singleton methods भी देखें।

1

एक "सत्य" या "शुद्ध" ऑब्जेक्ट उन्मुख भाषा आमतौर पर उन भाषाओं को संदर्भित करती है जिनमें सबकुछ प्राथमिक श्रेणी सहित प्रथम श्रेणी की वस्तु है। उदाहरण के लिए सी ++ और जावा में, आदिम प्रकार int, char, आदि वस्तुएं नहीं हैं। रुबी में, उदाहरण के लिए, सब कुछ एक वस्तु है। कभी-कभी अतिरिक्त मानदंड परिभाषा के साथ निहित होते हैं कि आप किसके साथ बात कर रहे हैं।

1

कि शब्द "सच वस्तु उन्मुखीकरण 'की एक और व्याख्या यह है कि आप कुछ भाषा है कि अपने दम पर OOP का समर्थन नहीं करता ले जा सकते हैं, और ऑन शीर्ष इसके बारे में काम करने के लिए एक OOP तरह से चिपके रहते हैं, है। उदाहरण के लिए आप विरासत को लागू करने और बहुरूपता उपयोग में एक लंबा समय हो गया है के लिए

typedef struct foo_ { 
    T1 (*getA)(foo * self); 
    void (*setA)(foo * self, T1 a_); 

/* private: */ 
    T1 a_; 
} foo; 

T1 foo_getA(foo * self) { 
    return self->a_; 
} 

void foo_setA(foo * self, T1 a_) { 
    self->a_ = a_; 
} 

foo * foo_create() { 
    foo * f = malloc(sizeof(foo)); 
    f->getA = foo_getA; 
    f->setA = foo_setA; 
    return f; 
} 

void foo_destroy(foo * f) { 
    free (f); 
} 

void doSomething(T1 a) { 
    foo * f = foo_create(); 
    f->setA(f, a); 
    foo_destroy(f); 
} 

तकनीक की तरह सी में कैप्सूलीकरण मॉडल कर सकते हैं। एक उदाहरण GObject फ्रेमवर्क gtk + के आधार के रूप में उपयोग किया गया है।

अब, जब आप किसी ऑब्जेक्ट उन्मुख तरीके से प्रोग्राम कर सकते हैं, सी ऑब्जेक्ट ओरिएंटेशन का समर्थन नहीं करता है, लेकिन केवल आपको कुछ डिग्री तक अनुकरण करने की अनुमति देता है। तो आपके पास सही वस्तु अभिविन्यास नहीं है। सी ++/जावा/सी # को देखते हुए, आपको इन सभी प्रकार की चीजों जैसे विरासत/डेटा encapsulation और सामान पहले हाथों के लिए समर्थन है।

2

सी ++ समस्या निम्न है। सी ++ वर्ग केवल स्रोत वाक्यविन्यास में मौजूद हैं। गुणों और विधियों के साथ कोई रन-टाइम क्लास ऑब्जेक्ट नहीं है।

बेशक

, कि शासन द्वारा वहाँ एक पारंपरिक मशीन वास्तुकला पर वस्तु उन्मुख प्रोग्रामिंग जैसी कोई चीज नहीं है, के बाद से वहाँ मशीन-कोड के स्तर पर गुण और तरीकों के साथ कोई रन टाइम वर्ग वस्तु है। (या, कम से कम, वहाँ वर्ष System/38 या AS/400 जैसे विशेष आर्किटेक्चर के लिए छोड़कर नहीं है।)

क्या "object oriented" का अर्थ है तीन बातें होने के रूप में बहुत पहले बस गया था: abstract data types, inheritance, और polymorphism साथ। (विकिपीडिया लेख से जुड़े हुए कुछ हद तक लाभ के साथ OO के गुणों confuses। लेकिन महत्वपूर्ण अंतर OO और "object based" प्रणालियों के बीच है।)

आम तौर पर, क्या "एक्स नहीं , वास्तव में वस्तु उन्मुख है के विपरीत वाई "वास्तव में मतलब है" मैं आपको बेचने की कोशिश कर रहा हूं। "

+0

मशीन स्तर पर बहुत सी चीजें जैसी कोई चीज नहीं है। हालांकि, विषय भाषा और रनटाइम के स्तर के बारे में प्रतीत होता है। – yfeldblum

+0

मुझे यकीन है कि आपको लगता है कि टिप्पणी समझ में आता है और मूल्य जोड़ता है, लेकिन यह मुझे कैसे बचता है। –

+0

एडीटी और ऑब्जेक्ट्स काफी सटीक रूप से दूसरे के पूरक हैं। विलियम कुक '_ समझना डेटा एब्स्ट्रक्शन, Revisited_, या पीटर वैन रॉय के _Programming पैराडिगम्स Dummies_ के लिए देखें। –

0

शब्द "असली ऑब्जेक्ट-ओरिएंटेशन" का अर्थ समान शब्द "ऑब्जेक्ट-ओरिएंटेशन" के समान है।

क्वालीफायर "सत्य" को "विषय पर" में जोड़ते समय, एक प्रवक्ता के वर्तमान ब्रह्मांड के भीतर, पाठक को उपस्थिति के बारे में चेतावनी देने का प्रयास कर रहा है, जो कि एक या अधिक "अपूर्ण अनुकरण" विषय के विषय में है, एक दूसरे के लिए इस्तेमाल किया जा रहा है, लेकिन इस विषय की तुलना में, प्रवचन के महत्व के एक या अधिक गुणों की कमी है।

इस तरह के प्रयोग सामान्य रूप से विषय के गुणों का वर्णन, या "नकली विषय" में लापता गुण का विवरण, या दोनों के द्वारा पालन किया जाना चाहिए; इस प्रकार पाठक को समझने के लिए, या कम से कम विचार, भेद (ओं) का नेतृत्व करना। (वस्तुओं) में (डेटा + व्यवहार) की

  • Encapsulation (संदेश) के माध्यम से संपर्क अकेले:

    वस्तु उन्मुखीकरण, के रूप में जो व्यक्ति वाक्यांश गढ़ा द्वारा प्रयोग किया जाता है, तो निम्न गुण शामिल करने के लिए लगता है।

  • (वस्तुओं) का प्रतिनिधित्व करते थे स्मृति का स्वत: सुधार,
    जब कहा (वस्तुओं) नहीं रह गया है संदर्भित कर रहे हैं।
  • वस्तुओं की (अर्थ) (प्रतिनिधित्व) पर के बंधन विलंबित। (ऑब्जेक्ट के गुणों) से (वस्तु) से
  • रन-समय प्रतिबिंब।

भी आवश्यक के रूप में

अभ्यास और अनुभव सिखाया है,,

  • क्लोजर (कभी कभी "सच बंद" कहा जाता है को शामिल करना,
        अर्थ (बंद) औपचारिक अर्थ में ,
        और (तुतलाना) में बंद के उदाहरण का अनुसरण।
    )
+0

जहां तक ​​मुझे पता है, बंद और वस्तुओं प्रोग्रामिंग के दो वैकल्पिक तरीके हैं (लेक्सिकल बाध्यकारी बनाम गतिशील प्रेषण): कुछ भाषाएं पूर्व प्रदान करती हैं, कुछ बाद वाले, कुछ दोनों प्रदान करते हैं। लेकिन बंद ऑब्जेक्ट ओरिएंटेशन के लिए एक वैकल्पिक दृष्टिकोण है, वे इसका हिस्सा नहीं हैं। – Giorgio

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