क्या विभिन्न प्रोग्रामिंग भाषाओं पर OOP सीखने में कोई अंतर है? [बन्द है]


9

मैं OOP सीखना चाहता हूं। मैं पायथन को जानता हूं और मुझे OOP के बारे में बहुत कम चीजें पता हैं।

लेकिन जब मैंने मंचों में "लर्न ओओपी" की खोज की तो मैंने एक आदमी को यह कहते हुए देखा कि "पायथन इतना नया है कि आप पायथन पर ओओपी नहीं सीख सकते। आपको जावा सीखना चाहिए फिर जावा पर ओओपी को समझना चाहिए"

क्या यह सच है? क्या विभिन्न प्रोग्रामिंग भाषाओं पर OOP को समझने में कोई अंतर है? जैसे जावा, C #, C ++, पर्ल या पायथन पर इसे जानें?


12
"पायथन इतना नया है कि आप Pyton पर OOP नहीं सीख सकते हैं। आप जावा सीखते हैं तो Java पर OOP को समझें" इससे मुझे कोई मतलब नहीं है। यदि आप पायथन का उपयोग करके ओओपी सीखना चाहते हैं, तो मुझे कोई कारण नहीं दिखता है कि क्यों नहीं। इसका लाभ उठाएं!
FrustratedWithFormsDesigner

13
क्या अजगर जावा से बड़ा नहीं है? मेरे सिर के ऊपर से मेरा मानना ​​है कि यह है, लेकिन मैं कुछ साल से बंद हो सकता है।
जिमी होफा

2
@ जिमीहॉफ यह वास्तव में है। विकिपीडिया के अनुसार 91 बनाम 95।
एविक्टाटोस

2
@ जिमीहॉफ़: आओ, यह सच नहीं हो सकता, यह हो सकता है! हम सभी जानते हैं कि जावा पहली ओओ भाषा थी। "सूर्य जोर से जावा की नवीनता हेराल्ड करता है" ... - सवाल के लिए ... आप ओओ सीखने के लिए क्यों दृढ़ हैं? कि तुम पर जल्द ही मजबूर हो जाएगा। कई प्रोग्रामिंग प्रतिमानों के लाभों के लिए अंतर्दृष्टि प्राप्त करने के लिए पायथन एक उत्कृष्ट प्रारंभिक बिंदु है।
लेफ्टनैबाउट

जवाबों:


10

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

ऑब्जेक्ट सिस्टम दो बड़ी श्रेणियों के संबंध में भिन्न होते हैं: इनहेरिटेंस और एक्सेस।

कुछ, जैसे जावा या सी ++, क्या आपने उन कक्षाओं की घोषणा की है जो ऑब्जेक्ट के लिए "ब्लूप्रिंट" के रूप में कार्य करते हैं जो तब आवंटित हो जाते हैं। इन वर्गों और उनकी वस्तुओं को संरचित रूप से एक बार तात्कालिक रूप से संशोधित नहीं किया जा सकता है। वे अपनी सामग्री को इस अर्थ में ओवरराइड कर सकते हैं कि चर बदल सकते हैं लेकिन उनकी संरचना स्थिर है। उदाहरण के लिए, आप जावा में HashMap के लिए नए तरीके नहीं जोड़ सकते। आप इंटरफ़ेस का विस्तार कर सकते हैं (मूल रूप से अनुबंध के रूप में काम करने वाले वर्गों को आंशिक रूप से लागू किया जाता है) या प्रश्न में विशेष वर्ग के मूल चर और तरीकों के साथ-साथ अतिरिक्त तरीकों या चर को प्राप्त करने के लिए एक उपवर्ग बना सकते हैं।

अन्य वर्ग आधारित भाषाएं, सबसे आम तौर पर रूबी होने का हवाला देते हुए, आप एक मौजूदा वर्ग को आसानी से खोल सकते हैं और जैसे ही आप फिट होते हैं, तरीकों में जोड़ते हैं। यह एक विवाद की हड्डी है और बहुत से, बहुत खतरनाक होने के लिए माना जाता है।

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

एक्सेस कंट्रोल विभिन्न भाषाओं के बीच अंतर का दूसरा बड़ा बिंदु है।

जावा जैसी कुछ भाषाओं में "प्राइवेट" और "प्रोटेक्टेड" जैसे एक्सेस मोडिफाइर्स को बहुत सख्ती से लागू किया गया है, जो यह परिभाषित करते हैं कि किसी वर्ग और उपवर्ग किसी दिए गए चर या विधि का उपयोग कर सकते हैं।

अन्य, जैसे कि पायथन कम औपचारिक हैं, यह इंगित करने के लिए कि यह निजी है विधि या चर नाम से पहले एक अंडरस्कोर के सम्मेलन का उपयोग करना।

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


इस प्रश्न के लिए थोड़ा बहुत तकनीकी हो सकता है।
ज़ेरोथ

@ अक्ष, और बहुत विशिष्ट भी। 'स्वयं' (या 'यह') पैरामीटर सार्वभौमिक से बहुत दूर है।
जेवियर

@ जेवियर यही कारण है कि मैंने कहा कि यह पायथन में स्पष्ट है और कहीं और निहित है।
वर्ल्ड इंजीनियर

सवाल OOP सीखने के बारे में है और मुझे लगता है कि चर्चा करना कि कैसे एक भाषा कुछ अवधारणाओं को पूरा करने के लिए लिखी जाती है जैसे कि एनकैप्सुलेशन जहां हम privateजावा के लिए हैं और __पायथन के लिए अंडरस्कोर ( ) काफी महत्वपूर्ण है। मुझे लगता है कि पायथन का अमूर्त स्तर इसे शुरुआत के लिए थोड़ा अधिक चुनौतीपूर्ण बना सकता है, लेकिन निश्चित रूप से असंभव नहीं है। जावा इसे प्रोग्रामर के लिए मंत्र देता है जो कुछ अवधारणाओं को थोड़ा और आसानी से छड़ी कर सकता है।
डेरेक डब्ल्यू

@WorldEngineer मैं स्पष्ट / निहित होने के बारे में बात नहीं कर रहा हूं (साथ ही, पायथन इस पर असामान्य नहीं है), लेकिन केवल एक अवधारणा के रूप में मौजूद है। कुछ भाषाएं सभी मापदंडों पर बहुरूपी प्रेषण करती हैं, न कि केवल पहले पर। कुछ विशिष्ट संस्करण के लिए अन्य संकेत का उपयोग करते हैं, और मुख्य शैली 'इस' के रूप में एक तर्क को विशेषाधिकार नहीं दे सकती है।
जेवियर

18

ओओपी सिद्धांतों को सीखना बिल्कुल भी विशिष्ट नहीं है, इसलिए यदि "ओओपी सीखें" से आपका मतलब है "सीखें कि शब्दावली का क्या अर्थ है, ओओपी क्या है और मैं इसका उपयोग क्यों करना चाहता हूं" तो भाषा कोई मायने नहीं रखती।

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

"पायथन इतना नया है कि आप Pyton पर OOP नहीं सीख सकते हैं। आप जावा सीखते हैं तो Java पर OOP समझें"

यह सिर्फ मेरे सिर को चोट पहुंचाता है। इतना गलत एक वाक्य में crammed।

पायथन की तारीख 1989 है।

http://python-history.blogspot.com/2009/01/brief-timeline-of-python.html

जावा 1995 तक।

http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html

आप सलाह के उस बिट की वैधता पर अपना निष्कर्ष निकाल सकते हैं ...


1
हाँ, लेकिन पायथन 1.0 1994 तक नहीं था। जावा भी जारी होने से पहले काफी समय से विकास में था। लेकिन मैं मानता हूं कि पायथन में OO है और आप OO की अवधारणाओं को सीख सकते हैं। अन्यथा कहना बेतुका है।
चूबसॉन्डब्स

2
@chubbsondubs हां, यह अभी भी जावा से पहले है! ;)
इज़काता

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

@KRyan: यदि आप परवाह करते हैं, तो एक अन्य प्रोटोटाइप आधारित OO भाषा है जिसका नाम Self है।
जेरी कॉफिन

ActionScript में प्रोटोटाइप और क्लास दोनों हैं।
ऑरेंजडॉग

8

मुझे लगता है कि आप जिस व्यक्ति को उद्धृत कर रहे हैं, वह भाषा भाषावाद प्रदर्शित कर रहा था।

वास्तव में, OOP की अवधारणाओं और OOP के कार्यान्वयन के बीच अंतर है । कवि की दृष्टि से, यह सबसे अच्छी तरह से समझा जाता है, जब आपके पास ओओपी की कुछ अवधारणाओं का एक बेहतर समझ है।

बहुत सारे प्रोग्रामर बस कुछ समान भाषाओं के साथ सहज हो जाते हैं, इसलिए उन्हें अपनी क्षमताओं का विस्तार नहीं करना पड़ता है या एक समय के लिए सक्षम नहीं होना पड़ता है।

तो सवाल यह है कि क्या वास्तव में पायथन आपको OOP की अवधारणा सिखाएगा ?

मैं कहूंगा कि आप प्रदान कर सकते हैं, बशर्ते आपके पास सीखने का पर्याप्त समर्थन हो, जो आपको उन चीजों की कोशिश करने के लिए प्रेरित करता है जो आप सामान्य रूप से स्व-निर्देशित सीखने में नहीं खोज पाएंगे। एक किताब या किसी प्रकार का एक संरक्षक सबसे अच्छा होगा। मार्क लुट्ज़, पायथन पर बहुत गहराई से, बहुत विस्तृत और बहुत उत्कृष्ट किताबें लिखता है, और मैं उनकी पुस्तकों की सिफारिश करूंगा क्योंकि वे आपको अधिक करने और सीखने के लिए धक्का देंगे।

आपको याद रखना होगा कि पायथन का रास्ता एकमात्र रास्ता नहीं है, न ही यह एकमात्र सही मार्ग है। आप जितनी अधिक प्रोग्रामिंग प्रतिमानों में महारत हासिल करेंगे, आप उतने ही बेहतर प्रोग्रामर बनेंगे। जिस तरह से पायथन ओओपी करता है ठीक उसी तरह से सी ++ या जावा नहीं करता है, लेकिन अवधारणाएं अच्छी तरह से स्थानांतरित होती हैं।


4
OOP के संदर्भ में, जावा और C ++ एक दूसरे से उतना ही भिन्न होते हैं जितना या तो पायथन से भिन्न होते हैं।
रोबोट

एक हद तक, लेकिन यह काफी हद तक बदलती भाषा डिजाइन ज्ञान और विभिन्न बाधाओं के कारण है।
ज़ेरोथ

और स्पष्ट रूप से, ओओपी अवधारणाओं का 90% उनके बीच अच्छी तरह से स्थानांतरित होता है, लगभग अदृश्य रूप से भी।
ज़ेरोथ

हाँ, मैं सहमत हूँ। मुझे OOP के संदर्भ में जावा और C ++ को "समान" होने के बारे में सोचना थोड़ा अजीब लगता है।
रोबोट

4

हां, OOP कार्यान्वयन बहुत अलग हैं। सिद्धांत और सिद्धांत समान हैं, लेकिन इतने सारे लोग केवल "वास्तविक ओओपी" पर विचार करते हैं कि जावा और सी ++ क्या करते हैं, कि आपको कई संदर्भ मिलते हैं जो "भाषा अज्ञेय" माना जाता है लेकिन वास्तव में वर्ग-आधारित, सांख्यिकीय रूप से टाइप की गई भाषाएं मानते हैं ।

इसका मतलब यह नहीं है कि वे संदर्भ खराब हैं, या सीमित भी हैं; उदाहरण के लिए "गैंग ऑफ़ फोर" (GoF) सेमिनल बुक "डिज़ाइन पैटर्न: रियूजेबल ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर के तत्व" एक महान कार्य का एक प्रमुख उदाहरण है जो "OOP" कहता है जब वास्तव में इसका अर्थ है "स्थिर वर्ग आधारित OOP"।

इसलिए, मेरी राय में: हाँ, आप पायथन, जावास्क्रिप्ट, सी, और कई अन्य भाषाओं पर बहुत कुछ सीख सकते हैं; लेकिन कुछ लोग (शायद भविष्य के नियोक्ता) जब "ओओपी अनुभव" का मतलब जावा / सी ++ / सी # से पूछते हैं। इसलिए, यह देखने के लिए बुद्धिमान होगा कि अन्य दृश्य भी।

(और वे OOP के केवल दो 'प्रकार' नहीं हैं ...)


2
विडंबनापूर्ण रूप से स्थिर, वर्ग-आधारित OOP वह नहीं है जिसे एलन कुंजी ने मूल रूप से OOP के रूप में सुझाया था। लेकिन "सीखने" का एक बहुत OOP लर्निंग डिज़ाइन / कोडिंग-सेंस के बारे में है जो कड़ाई से एक विशेष OOP के लिए सीमित नहीं है
डैनियल ग्रैज़र

2
सीएलओएस को देखने के लिए यह भी समझ में आता है: मुझे नहीं लगता कि कई भाषाएं / रूपरेखा मल्टीमिथोड प्रदान करती हैं।
जियोर्जियो

2
@jozefg: सही है, एलन के ने एक बार कहा था "वास्तव में मैंने" ऑब्जेक्ट-ओरिएंटेड "शब्द बनाया है, और मैं आपको बता सकता हूं कि मेरे मन में C ++ नहीं था।"
जेवियर

1
@ जियोर्जियो वास्तव में डायलन सीएलओएस का थोड़ा सरल संस्करण प्रदान कर सकता है (यह निर्दिष्ट करने का कोई तरीका नहीं है कि मल्टीमिथोड कब चलाया जाता है, लेकिन दृष्टिकोण के लिए बहुत सरल है)
डैनियल ग्रैज़र

4

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग एक विचार है कि कैसे प्रोग्रामिंग भाषा को कम युग्मन, सूचना छिपाने (उर्फ एन्कैप्सुलेशन) को बढ़ावा देने के लिए, डेटा और विधियों को एक साथ जोड़ने और कोड पुन: उपयोग करने के तरीके। भाषा के बहुत सारे लोग इन विचारों पर अपना अमल करते हैं, इसलिए भाषाओं के बीच भिन्नता है कि वे ऑब्जेक्ट ओरिएंटेशन कैसे लेते हैं। उदाहरण के लिए, जावा केवल एक वर्ग को 1 वर्ग का विस्तार करने की अनुमति देता है। हालाँकि, पायथन और सी ++ आपको किसी भी संख्या में वर्गों का विस्तार करने की अनुमति देते हैं। जावा की अपनी सीमाओं के लिए विशिष्ट कारण हैं। सीमाएँ जो सी ++ से चीजों को सही करने के लिए होती हैं, लेकिन यह भी क्योंकि स्मॉलटाक केवल एक एकल आधार वर्ग का समर्थन करता है।

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

अन्य परिवार ओओपी आधारित प्रोटॉयपे है। ये भाषाएँ उनके OOP कार्यान्वयन में बहुत भिन्न दिखती हैं। संभवतः इसका सबसे अच्छा ज्ञात उदाहरण जावास्क्रिप्ट है, लेकिन जावास्क्रिप्ट ने इन विचारों को स्कीम और ऑब्जेक्ट LISP से कॉपी किया। ये कम ज्ञात भाषाएँ हैं और आमतौर पर गतिशील रूप से टाइप की जाती हैं। मैं सांख्यिकीय रूप से टाइप किए गए प्रोटोटाइप आधारित भाषा के बारे में नहीं सोच सकता, लेकिन इसका मतलब यह नहीं है कि कोई एक नहीं है। आप इस पर यहाँ पढ़ सकते हैं: http://en.wikipedia.org/wiki/Prototype-based_programming । मुद्दा यह है कि वे कक्षा आधारित भाषाओं की तुलना में बहुत अलग तरीके से ओओपी के पास हैं। इसका मतलब है कि अवधारणाएं इन दोनों परिवारों के बीच उतनी पोर्टेबल नहीं हैं। सिर्फ इसलिए कि आप जानते हैं कि एक परिवार में OO का मतलब यह नहीं है कि आप आसानी से उन विचारों को दूसरे परिवार में बदल देंगे।

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


मैं स्मॉलटॉक परिवार में C ++ की गिनती नहीं करूंगा। स्मॉलटाकल सिमूला पर आधारित है, और एलन के ने जानबूझकर सिमूला -2 के अधिकांश परिवर्तनों को नजरअंदाज कर दिया है, जबकि C ++ उसी पर आधारित है। C # अजीब है, इसे C ++ उपयोगकर्ताओं और पास्कल डिजाइनरों द्वारा जावा की तरह डिजाइन किया गया था।
जार्ज डब्ल्यू मित्तग

1

OOP प्रोग्रामिंग का एक सिद्धांत है - यह मौलिक रूप से एक विचार है। OOP का कार्यान्वयन पूरे प्रोग्रामिंग भाषाओं में भिन्न होता है - लेकिन OOP के स्तंभ (Abstraction, Inheritance, Encapsulation और Polymorphism) आमतौर पर किसी न किसी रूप में मौजूद होते हैं।

मैं या तो भाषा के लिए वरीयता के बिना कहूंगा, कि जावा प्रोग्रामर को पाइथन कहने के बजाय शब्दार्थ पर थोड़ा जोर देता है।

उदाहरण के लिए,

जावा कोड: class Cat extends Animal {}

चीजों के OOP के दृष्टिकोण में आप जो कर रहे हैं, उससे थोड़ा अधिक स्पष्ट है:

पायथन कोड: class Cat(Animal):

यकीन है कि वे दोनों एक वर्ग पदानुक्रम को परिभाषित करते हैं जिसमें कैट पशु से विरासत में मिला है। लेकिन मुझे लगता है कि एक प्रोग्रामर के लिए ओओपी में शुरुआत करना, ओओपी विचारों के आवेदन और निहितार्थ जावा में थोड़ा बेहतर हो सकता है क्योंकि यह प्रोग्रामर के लिए इसे वर्तनी कर रहा है।


1

आप स्पष्ट रूप से पूछ रहे हैं कि ओओपी अवधारणाओं को जानने के लिए सबसे आसान भाषा क्या है। मुझे लगता है कि उत्तर स्पष्ट है: अजगर

ऐसा क्यों है यह दिखाने के लिए, आइए जावा बनाम पायथन में विशिष्ट शुरुआती कार्यक्रम को देखें। चलो एक सरल उच्च-निम्न अनुमान लगाने का खेल बनाते हैं।

जावा

जावा में, आप एक गेम क्लास लिखेंगे।

public class Game {
    public int secretNumber;
    public int tries;

    public Game(int tries, int secretNumber) {
        this.tries = tries;
        this.secretNumber = secretNumber;
    }

    public void guess(int myNumber) {
        if(myNumber > secretNumber)
            System.out.println("Your guess is too high!");
        else if (myNumber < secretNumber)
            System.out.println("Your guess is too low!");
        else
            System.out.println("You win!!");
        tries = tries - 1;
        if(tries == 0) {
            System.out.println("No more tries: you lose :(");
        }
    }

    public static void main(String[] args) {
        Game game = new Game(10, 47);
        while(true) {
            // how do I read a newline again? Something with BufferedInputStreamReader?
            // how do I convert a String to a number?
        }
    }
}

मैं एक अनुभवी प्रोग्रामर हूं, और यहां तक ​​कि मुझे मुश्किलें भी आ रही हैं। इसके अलावा, इस साधारण कार्यक्रम के लिए संभावित शिष्य को समझाने के लिए आपको क्या करना चाहिए:

  • स्थैतिक तरीके
  • दृश्यता (सार्वजनिक बनाम निजी)। आपको हमेशा फ़ील्ड को निजी के रूप में चिह्नित करना चाहिए।
  • this. जब वे दूसरों द्वारा मुखौटे किए जाते हैं तो चर का उल्लेख करने के लिए अंकन
  • कंस्ट्रक्टर एक विधि जैसा दिखता है, लेकिन एक विधि नहीं है।
  • System.outएक आउटपुटस्ट्रीम है। और हाँ, यह एक क्षेत्र है, लेकिन यह एक staticक्षेत्र है।
  • कभी-कभी, आप कर्ली कोष्ठक को छोड़ सकते हैं यदि केवल एक ही कथन हो
  • String[]एक सरणी है। यह एक विशेष प्रकार की वस्तु है, लेकिन तब फिर से, वास्तव में नहीं।
  • intएक आदिम प्रकार है। यह विशेष है।
  • आपको बहुत सारी रूपरेखा विधियों की आवश्यकता है

अजगर

अजगर एक बहुत 'प्यूरर' है। कोई आदिम प्रकार नहीं हैं। एक निर्माणकर्ता मौजूद नहीं है, केवल एक विशेष विधि है जिसे आरंभीकरण में कहा जाता है।

आपको कंसोल के साथ सहभागिता करने की आवश्यकता नहीं है, क्योंकि आपके पास ए REPL। आप बस g.guess(35)एक स्ट्रिंग का उपयोग करके और वापस खेल खेल सकते हैं ।

यह मूल OOP अवधारणाओं को सीखने और समझने में भाषा को आसान बनाता है।


0

OOP में मुख्य विचार एन्कैप्सुलेटिंग (जिसका अर्थ है बंडलिंग या छिपाना) चर और तरीकों को एक साथ कक्षाओं के अंदर (जो कि अजगर बिल्कुल समर्थन करता है)। यह Nouns के आसपास अपना कोड डिजाइन करने के बारे में है। फिर यह वहां से चलता है।

हालांकि, कार्यान्वयन अंतर हैं (उदाहरण के लिए, अजगर दृश्यता का समर्थन नहीं करता है जिस तरह से जावा करता है) और वाक्यविन्यास अंतर (जावास्क्रिप्ट में, आपको खुद को विरासत में प्राप्त करना होगा), मूल डिजाइन समान रहता है।

मुझे लगता है कि जावा जैसी भाषा में ओओपी सीखना आसान है, हालांकि, क्योंकि भाषा को इसकी आवश्यकता है और समुदाय की तुलना में कम प्रतिकूल है, कहते हैं, अजगर समुदाय।

लेकिन वहाँ OOP डिजाइन और प्रथाओं के बारे में लेखन के टन है, और यह बर्बाद प्रयास नहीं पढ़ रहा है। यहां तक ​​कि जब मैं अजगर (जो बहुत कुछ है) लिखता हूं, तो मैं बहुत सारी वस्तुओं को लिखता हूं, और मैं तीसरे पक्ष के पुस्तकालयों से बहुत सारी वस्तुओं का उपयोग करता हूं।


कोड आइडिया मैसेज पासिंग है। इसके अलावा कोई स्रोत नहीं।
यूजर

1
OOP कक्षाओं के बारे में नहीं है।
Jörg W Mittag

1
@User एलन Kay का मूल विचार संदेश देने के बारे में था, लेकिन तब से OO की प्रथा संज्ञा या वस्तुओं के वर्गों द्वारा डिजाइन में विकसित हुई। उदाहरण के लिए, डॉ। Kay ने यह भी माना है कि जावा ऑब्जेक्ट ओरिएंटेड नहीं है, क्योंकि यह देर से बाध्यकारी का समर्थन नहीं करता है। @ जोर्ज लोल ये
रॉब

0

जब आप एक भाषा में OOP सीखते हैं तो आप इस भाषा में सोचना शुरू करते हैं। भाषा प्रभावित करती है कि आप क्या सोचते हैं और कैसे किया जा सकता है और ओओपी में एक स्वाद भी जोड़ता है।

  • क्या एक कचरा संग्रह होना चाहिए?
  • क्या मैं पूर्णांकों में विधियाँ जोड़ सकता हूँ?
  • क्या मैं कक्षाओं या प्रोटोटाइप का उपयोग करता हूं?
  • वस्तुएं अपने आप को कैसे दर्शाती हैं?

कुछ लोग बिना कक्षाओं के OOP नहीं कर सकते। कुछ को इस प्रक्रिया से अपनी वस्तुओं को मारना चाहिए।

OOP का एक मूल और इसके बारे में मूल विचार हैं। आप स्मालटाक, सेल्फ, सिमूला, एलआईएसपी, समाचारपत्र पर भी एक नजर डाल सकते हैं। और गैर-ओओपी भाषा प्रकारों पर भी एक नज़र डालें जैसे डेटाफ्लो लैंग्वेज बैश, एपीएल, जे। लॉजिकल लोग प्रोलॉग। हास्केल (प्रकार कक्षाएं)। वे सभी आपको एक अलग सोच सिखाएंगे और आप यह सीख सकते हैं

  • OOP अनिवार्य भाषाओं के बारे में नहीं है
  • OOP कक्षाओं के बारे में नहीं है

और अंत में आप देख सकते हैं कि OOP किसके लिए अच्छा है। कम से कम आपके पास इसके बारे में एक और विचार होगा। मेरा सुझाव है कि एलन के द्वारा वार्ता खोजना ।


यदि आप भाषाओं को नहीं देखते हैं तो यह पोस्ट बेकार है।

जैसा कि आप यहां देख सकते हैं: हम इस बात पर सहमत नहीं हो सकते हैं कि ओओपी क्या है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.