डेवलपर्स के बीच, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग ने बड़े पैमाने पर निम्नलिखित को आकर्षित किया है। लोकप्रिय कंप्यूटर भाषा पायथन भी वस्तु-उन्मुख प्रतिमान का पालन करता है।
यह पायथन में वस्तुओं और वर्गों को परिभाषित करने से संबंधित है, जो ओओपी सिद्धांतों के लिए आधार बनाता है। "पायथन में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग" पर इस ट्यूटोरियल में, आप सीखेंगे कि पायथन कक्षाओं की घोषणा कैसे करें, उनसे ऑब्जेक्ट बनाएं और चार ओओपी तकनीकों का उपयोग करें।
तो, सबसे पहले बात।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग क्या है?
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) का मुख्य फोकस "ऑब्जेक्ट्स" का निर्माण है। परस्पर जुड़े चर और कार्यों का एक संग्रह एक वस्तु बनाता है।
इन चरों को अक्सर वस्तु की विशेषताओं के रूप में संदर्भित किया जाता है, और इसके व्यवहार को अक्सर इसके कार्यों के रूप में संदर्भित किया जाता है। ये आइटम एप्लिकेशन को अधिक प्रभावी और समझने योग्य संरचना प्रदान करते हैं। एक ऑटोमोबाइल एक वस्तु का एक उदाहरण है।
यदि ऑटोमोबाइल एक वस्तु होती, तो इसकी विशेषताओं में उसका रंग, मॉडल, मूल्य, ब्रांड आदि जैसी चीजें शामिल होती हैं। इसके अतिरिक्त, यह गति, धीमा और गियर बदल देगा।
एक और दृष्टांत: यदि हम कुत्ते को एक वस्तु के रूप में देखते हैं, तो उसकी कुछ विशेषताएं रंग, नस्ल, नाम, वजन आदि हो सकती हैं। और वह घूम रहा होगा, भौंक रहा होगा, खेल रहा होगा, आदि।
क्योंकि यह प्रोग्रामिंग में वास्तविक दुनिया की अवधारणाओं जैसे वस्तुओं, छिपाने, विरासत आदि को शामिल करता है, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग सर्वविदित है। क्योंकि यह वास्तविक दुनिया की परिस्थितियों के समान है, इसलिए विज़ुअलाइज़ेशन को सरल बना दिया गया है।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कॉन्सेप्ट्स
पायथन में कक्षाएं और वस्तुएं
अन्य सभी वस्तु-उन्मुख भाषाओं की तरह, पायथन आपको वस्तुओं को उत्पन्न करने के लिए कक्षाएं डिजाइन करने में सक्षम बनाता है। पायथन में सबसे लोकप्रिय डेटा प्रकार, जिसमें तार, सूचियाँ, शब्दकोश और अन्य ऑब्जेक्ट शामिल हैं, अंतर्निहित कक्षाएं हैं।
एक वर्ग लिंक्ड विधियों और आवृत्ति चर का एक समूह है जो एक निश्चित प्रकार की वस्तु को परिभाषित करता है। एक वर्ग को किसी वस्तु के मॉडल या टेम्पलेट के रूप में देखा जा सकता है। वेरिएबल्स जो एक वर्ग बनाते हैं उन्हें एट्रिब्यूट्स के रूप में जाना जाता है।
एक वस्तु एक वर्ग का सदस्य है जिसमें विशेषताओं का एक परिभाषित सेट होता है। इस वजह से, एक ही वर्ग का उपयोग करके कितनी भी संख्या में ऑब्जेक्ट बनाए जा सकते हैं।
पायथन कक्षाओं को वर्ग शब्द का उपयोग करके परिभाषित किया जाता है, जिसके बाद वर्ग का नाम और एक कोलन होता है। एक तोता वर्ग का एक उदाहरण हो सकता है:
यहां, हम क्लास कीवर्ड का उपयोग करके खाली वर्ग तोता घोषित करते हैं। हम कक्षाओं से उदाहरण बनाते हैं। एक उदाहरण एक विशेष वस्तु है जिसे एक निश्चित वर्ग से बनाया गया था। 'पास' अक्सर कोड के लिए स्टैंड-इन के रूप में प्रयोग किया जाता है जिसका कार्यान्वयन हम इस समय छोड़ सकते हैं। हम "पास" कीवर्ड का उपयोग करके बिना किसी त्रुटि के पायथन कोड को निष्पादित कर सकते हैं।
एक वर्ग का एक तात्कालिक परिणाम एक वस्तु (उदाहरण) में होता है। केवल वस्तु का विवरण परिभाषित किया जाता है जब कोई वर्ग बनाया जाता है। नतीजतन, कोई भंडारण या रैम आवंटित नहीं किया जाता है।
एक तोता वर्ग वस्तु का एक उदाहरण है:
इस उदाहरण में ओब्ज एक तोता-वर्ग की वस्तु है।
मान लीजिए कि हम तोते के बारे में विशेष बातें जानते हैं। अब हम प्रदर्शित करेंगे कि तोता वर्ग और उसकी वस्तुओं का निर्माण कैसे किया जाता है।
विशेष विधि ( __init__ )
इनिट नामक एक विधि उन विशेषताओं को परिभाषित करती है जो प्रत्येक तोते की वस्तु में होनी चाहिए ()। जब एक नया तोता ऑब्जेक्ट बनता है, तो फ़ंक्शन __init__ ऑब्जेक्ट के गुणों के भीतर हमारे द्वारा प्रदान किए गए मानों को निर्दिष्ट करके ऑब्जेक्ट की प्रारंभिक स्थिति बनाता है।
तो, कक्षा के प्रत्येक नए उदाहरण को __init__() का उपयोग करके प्रारंभ किया जाता है। हालांकि __init__() किसी भी पैरामीटर को स्वीकार कर सकता है, स्वयं हमेशा पहला पैरामीटर होता है।
स्व-तर्क में सक्रिय वर्ग उदाहरण का संदर्भ शामिल है। स्वयं पैरामीटर, जो किसी वर्ग के वर्तमान ऑब्जेक्ट के पते से लिंक करता है और हमें इसके (ऑब्जेक्ट के) चर डेटा तक पहुंच प्रदान करता है, यह दर्शाता है।
उदाहरण 1
हमने उपरोक्त कोड में तोता नामक एक वर्ग की स्थापना की। इसके बाद, गुणों को परिभाषित किया गया है। किसी वस्तु के गुण उसके गुण होते हैं। कक्षा का __init__ फ़ंक्शन वह है जहां इन विशेषताओं को निर्दिष्ट किया जाता है।
जब कोई ऑब्जेक्ट बनता है, तो प्रारंभकर्ता विधि वह होती है जिसे प्रारंभ में कहा जाता है। फिर, तोता वर्ग के उदाहरण बनाए जाते हैं। इस उदाहरण में ब्लेज़ और वोंडा हमारी नई वस्तुओं के संदर्भ (मान) हैं। __class .species हमें क्लास एट्रिब्यूट तक पहुंचने की अनुमति देता है।
एक वर्ग के प्रत्येक उदाहरण में समान विशेषताएं होती हैं। उदाहरण विशेषताओं को blaze.name और blaze.age का उपयोग करके भी एक्सेस किया जा सकता है। हालाँकि, किसी वर्ग के सभी उदाहरणों में अद्वितीय उदाहरण विशेषताएँ होती हैं।
उदाहरण 2
तरीके
एक वर्ग के शरीर के अंदर परिभाषित कार्यों को विधियाँ कहा जाता है। उन्हें यह निर्दिष्ट करने के लिए नियोजित किया जाता है कि कोई वस्तु कैसे व्यवहार करेगी।
उपरोक्त आवेदन () में दो विधियों, गायन () और नृत्य को परिभाषित किया गया है। चूंकि उन्हें एक इंस्टेंस ऑब्जेक्ट पर बुलाया जाता है, जैसे कि लौ, इन्हें इंस्टेंस विधियों के रूप में जाना जाता है।
OOPS अवधारणा की मूल बातें
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के चार मुख्य विचार हैं:
- विरासत
- कैप्सूलीकरण
- बहुरूपता
- मतिहीनता
विरासत
लोग अक्सर नवजात शिशुओं को बताते हैं कि उनके चेहरे की विशेषताएं उनके माता-पिता से मिलती-जुलती हैं या उन्हें अपने माता-पिता से विशेष लक्षण विरासत में मिले हैं।
यह संभव है कि आपने यह भी देखा हो कि आप अपने माता-पिता के साथ कुछ विशेषताओं को साझा करते हैं। वास्तविक दुनिया की स्थिति काफी हद तक विरासत के समान है।
हालाँकि, इस मामले में, "अभिभावक वर्ग" की विशेषताओं को "बाल वर्गों" में स्थानांतरित कर दिया जाता है। इन पहलुओं को इस संदर्भ में "गुण" और "विधियों" के रूप में संदर्भित किया जाता है।
विरासत के रूप में जानी जाने वाली तकनीक का उपयोग करके एक वर्ग दूसरे वर्ग से अपनी विधियों और विशेषताओं को प्राप्त कर सकता है। वंशानुक्रम एक अभिभावक वर्ग के गुण प्राप्त करने वाले बाल वर्ग की प्रक्रिया है।
उदाहरण:
उपरोक्त उदाहरण में मूल वर्ग मानव को बाल वर्ग लड़के द्वारा विरासत में मिला है। चूंकि बॉय ह्यूमन से विरासत में मिला है, इसलिए जब हम बॉय क्लास का इंस्टेंस बनाते हैं तो हम इसके सभी तरीकों और विशेषताओं तक पहुंच सकते हैं।
बॉय क्लास में स्कूलनाम नामक एक विधि को भी परिभाषित किया गया है। पैरेंट क्लास ऑब्जेक्ट स्कूलनाम विधि तक पहुँचने में असमर्थ है। हालाँकि, स्कूलनाम विधि को चाइल्ड क्लास ऑब्जेक्ट (लड़का) बनाकर बुलाया जा सकता है।
कैप्सूलीकरण
कक्षाओं के साथ काम करने और संवेदनशील डेटा को संभालने के दौरान प्रोग्राम में हर वैरिएबल को ग्लोबल एक्सेस देना एक समझदारी भरा कदम नहीं है।
कार्यक्रम को उन चरों में से किसी एक तक पूर्ण पहुंच प्रदान किए बिना, एनकैप्सुलेशन हमें आवश्यक चर प्राप्त करने के लिए एक तंत्र प्रदान करता है।
इस उद्देश्य के लिए स्पष्ट रूप से परिभाषित विधियों का उपयोग चर से डेटा को अद्यतन करने, संपादित करने या हटाने के लिए किया जा सकता है। प्रोग्रामिंग की इस पद्धति में डेटा इनपुट पर बढ़ी हुई सुरक्षा और नियंत्रण के फायदे हैं।
नीचे दिए गए प्रदर्शन में देखें कि चरों को कितनी जल्दी पहुँचा जा सकता है:
बहुरूपता
मान लें कि आप ब्राउज़ करने के लिए अपने फ़ोन का उपयोग कर रहे हैं Instagram फ़ीड. जब आपको कुछ संगीत सुनने की ललक आई, तो आपने Spotify को एक्सेस किया और अपना पसंदीदा गाना बजाना शुरू किया।
एक समय के बाद, आपको एक कॉल आया, इसलिए आपने इसका उत्तर देने के लिए पृष्ठभूमि में जो कुछ भी कर रहे थे उसे रोक दिया। आपके मित्र ने फोन किया और अनुरोध किया कि आप उन्हें एक निश्चित व्यक्ति के फोन नंबर पर टेक्स्ट करें।
तो आपने उसे एसएमएस के माध्यम से फोन नंबर भेजा और अपने कार्यों को आगे बढ़ाया। क्या आपने कुछ उठाया है? केवल एक डिवाइस के साथ—आपका मोबाइल फोन—आप फ़ीड के माध्यम से सर्फ कर सकते हैं, संगीत सुन सकते हैं, फोन ले सकते हैं और कॉल कर सकते हैं, और संदेश भेज सकते हैं।
इसलिए, बहुरूपता उसी के बराबर है। पॉली का अर्थ है असंख्य, और रूप विभिन्न रूपों को दर्शाता है। इसलिए, बहुरूपता समग्र रूप से विभिन्न रूपों वाली किसी चीज़ को संदर्भित करता है।
या "कुछ", जो परिस्थिति के आधार पर, विभिन्न प्रकार के व्यवहार प्रदर्शित कर सकता है। OOPS में, बहुरूपता एक ही नाम के साथ कार्यों का वर्णन करता है लेकिन अलग व्यवहार करता है। वैकल्पिक रूप से, एक ही फ़ंक्शन नाम के साथ एक अलग फ़ंक्शन हस्ताक्षर (फ़ंक्शन को दिए गए पैरामीटर)।
उदाहरण:
यहां, हम ज़ेबरा और खरगोश की वस्तुओं में उनके संबंधित उदाहरण विधियों का उपयोग करके चर जानवर का उपयोग कर सकते हैं। नतीजतन, ज़ेबरा और खरगोश दोनों के व्यवहार (रंग () और खाती ()) को यहां एक एकल चर द्वारा दर्शाया गया है जिसे जानवर कहा जाता है। इसलिए यह बहुरूपता नियमों का पालन कर रहा है।
मतिहीनता
इस सामग्री को पढ़ने के लिए आप शायद लैपटॉप, फोन या टैबलेट का उपयोग करते हैं। इसे पढ़ते समय, आप संभवतः नोट्स भी ले रहे हैं, मुख्य अंशों को रेखांकित कर रहे हैं, और शायद अपनी व्यक्तिगत फाइलों में कुछ जानकारी संग्रहीत कर रहे हैं।
जब आप इसे पढ़ते हैं तो आप केवल एक "स्क्रीन" देख सकते हैं, जिसमें डेटा आपको प्रदर्शित किया जा रहा है। जैसे ही आप टाइप करते हैं, आप कीबोर्ड की कुंजियों को देखते हैं, इसलिए आपको आंतरिक सूक्ष्मताओं के बारे में चिंता करने की ज़रूरत नहीं है जैसे कि किसी कुंजी को दबाने से वह शब्द स्क्रीन पर कैसे दिखाई दे सकता है।
वैकल्पिक रूप से, आपकी स्क्रीन पर एक बटन दबाने से एक नया टैब कैसे लॉन्च हो सकता है।
इसलिए, हम इस स्थिति में जो कुछ भी देख सकते हैं वह अमूर्त है। हम केवल उस परिणाम को देख सकते हैं जो यह पैदा कर रहा है, न कि अंदर की पेचीदगियों (जो वास्तव में हमारे लिए मायने रखती है)।
इसी तरह, अमूर्तता केवल उन कार्यों को प्रकट करती है जो किसी भी कार्यान्वयन या आंतरिक विवरण को छुपाते हुए सब कुछ के पास होते हैं।
एब्स्ट्रैक्शन का प्रमुख उद्देश्य पृष्ठभूमि की जानकारी और किसी भी बाहरी डेटा कार्यान्वयन को छुपाना है ताकि लोग केवल वही देखें जो उन्हें देखने की जरूरत है। यह कोड की जटिलता को प्रबंधित करने में सहायता करता है।
उदाहरण:
एक वाहन से संबंधित अमूर्त वर्ग यहां मौजूद है। क्योंकि यह अमूर्त वर्ग एबीसी से विरासत में मिला है, यह सार है। चूंकि अमूर्त विधियों को परिभाषित नहीं किया जाता है या खाली रहता है, कक्षा वाहन में एक अमूर्त विधि होती है जिसे पहियों की संख्या कहा जाता है जिसमें परिभाषा का अभाव होता है।
वे उन वर्गों का अनुमान लगाते हैं जो विधि के कार्यान्वयन को देने के लिए अमूर्त वर्गों को प्राप्त करते हैं।
OOPS अवधारणाओं के लाभ
- इनकैप्सुलेट करके, उच्च सुरक्षा और डेटा गोपनीयता प्राप्त की जाती है।
- एक ही वर्ग के कई बहुरूपी संस्करण होने में लचीलापन।
- कोड जटिलता के उच्च स्तर को अमूर्तता द्वारा कम किया गया था।
- किसी एक समस्या का पता लगाने के लिए कोड की सैकड़ों पंक्तियों के माध्यम से जाने के बजाय, प्रोग्रामिंग की प्रतिरूपकता डिबगिंग को सरल बनाती है।
- कोड का पुन: उपयोग चाइल्ड क्लास के पैरेंट क्लास प्रॉपर्टीज के इनहेरिटेंस के कारण होता है।
- प्रभावी समस्या-समाधान संभव है क्योंकि हम ऐसी कक्षाएं बनाते हैं जो प्रत्येक मिनी-समस्या के लिए आवश्यक कार्य करती हैं। निम्नलिखित समस्या को और भी तेजी से हल किया जा सकता है क्योंकि हम उन वर्गों का पुन: उपयोग कर सकते हैं।
निष्कर्ष
अंत में, हमने पायथन में ओओपीएस विचारों के बारे में सीखा, जो अभी सबसे गर्म प्रोग्रामिंग प्रतिमान है।
इसे पढ़ने के बाद, आपने महसूस किया होगा कि OOPS प्रतिमान पूरी तरह से वर्गों और वस्तुओं के विचार से संबंधित है। और ओओपीएस अवधारणाएं जैसे कि एनकैप्सुलेशन, पॉलीमॉर्फिज्म, इनहेरिटेंस और एब्स्ट्रैक्शन।
एक जवाब लिखें