ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP - Object-Oriented Programming) एक प्रोग्रामिंग प्रतिमान है जिसमें प्रोग्राम को वस्तुओं (Objects) और वर्गों (Classes) के रूप में व्यवस्थित किया जाता है। पारंपरिक प्रोसीजरल प्रोग्रामिंग में कोड को कार्यों (Functions) के रूप में लिखा जाता है, जबकि ओओपी में डेटा और उसे संचालित करने वाले फंक्शन को एक साथ एक इकाई में बाँधा जाता है। यह प्रतिमान वास्तविक दुनिया की वस्तुओं की तरह सोचने में सहायता करता है, जिनमें गुण (Attributes) और व्यवहार (Methods) होते हैं। उदाहरण के लिए, एक कार में रंग, मॉडल जैसे गुण और चलाना, रोकना जैसे व्यवहार होते हैं। ओओपी के चार मुख्य सिद्धांत हैं - एनकैप्सुलेशन, इनहेरिटेंस, पॉलीमॉर्फिज़्म और एब्स्ट्रैक्शन। पाइथन पूर्ण रूप से ओओपी का समर्थन करता है और इस अध्याय में हम इन अवधारणाओं का विस्तार से अध्ययन करेंगे।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग वह प्रोग्रामिंग शैली है जिसमें प्रोग्राम को वर्गों (Classes) और वस्तुओं (Objects) में संरचित किया जाता है। इसमें:
वर्ग एक निर्माण खाका (Blueprint) है जिससे वस्तुएँ बनाई जाती हैं। वर्ग गुणों और विधियों को परिभाषित करता है।
class छात्र:
def __init__(self, नाम, अंक):
self.नाम = नाम
self.अंक = अंक
def जानकारी(self):
print(self.नाम, self.अंक)
class कीवर्ड से वर्ग बनता है।__init__ एक विशेष विधि (कंस्ट्रक्टर) है जो वस्तु बनते समय स्वतः चलती है।self वर्तमान वस्तु को दर्शाता है।वर्ग से बनाई गई वास्तविक इकाई वस्तु कहलाती है:
राहुल = छात्र("राहुल", 85)
राहुल.जानकारी()
राहुल वर्ग छात्र की एक वस्तु है।कंस्ट्रक्टर एक विशेष विधि है जो वस्तु बनाते समय स्वतः आहूत होती है। यह वस्तु के गुणों को आरंभ (Initialize) करता है।
class कार:
def __init__(self, रंग, मॉडल):
self.रंग = रंग
self.मॉडल = मॉडल
__init__ को दोहरे अंडरस्कोर (Dunder) से लिखा जाता है।एनकैप्सुलेशन का अर्थ है डेटा (गुण) और उसे संचालित करने वाली विधियों को एक इकाई में बाँधना तथा बाहरी हस्तक्षेप से डेटा की रक्षा करना।
_ या __ लगाकर निजी (Private) बनाया जाता है।_रंग संकेत करता है कि यह संरक्षित (Protected) है।__मान संकेत करता है कि यह निजी (Private) है।इनहेरिटेंस वह सिद्धांत है जिसमें एक वर्ग (बाल वर्ग) दूसरे वर्ग (मूल वर्ग) के गुणों और विधियों को प्राप्त करता है।
class वाहन: # मूल (Parent) वर्ग
def __init__(self, नाम):
self.नाम = नाम
def चलाओ(self):
print(self.नाम, "चल रहा है")
class कार(वाहन): # बाल (Child) वर्ग
def हॉर्न(self):
print("पीप पीप")
पॉलीमॉर्फिज़्म का अर्थ है एक ही नाम के लिए कई रूप। इसका अर्थ है कि एक ही विधि या ऑपरेटर अलग-अलग वस्तुओं पर अलग-अलग व्यवहार कर सकता है।
+ ऑपरेटर संख्याओं में जोड़ता है, स्ट्रिंग में जोड़ता (कॉन्कैटनेट) करता है।उदाहरण:
class कुत्ता:
def आवाज़(self):
print("भौंकता है")
class बिल्ली:
def आवाज़(self):
print("म्याऊँ करती है")
दोनों वर्गों में एक ही विधि का नाम है, परंतु व्यवहार अलग है।
एब्स्ट्रैक्शन का अर्थ है केवल आवश्यक विवरण प्रदर्शित करना और अनावश्यक जटिलता को छिपाना। इसका उपयोग डेटा और कार्यान्वयन विवरण को छिपाकर केवल इंटरफ़ेस प्रदान करने के लिए होता है। उदाहरण के लिए, कार चलाने के लिए हमें केवल स्टीयरिंग और पैडल जानना आवश्यक है, इंजन की आंतरिक कार्यप्रणाली नहीं। प्रोग्रामिंग में एब्स्ट्रैक्शन से जटिलता घटती है और कोड सरल बनता है।
self वर्तमान वस्तु का संदर्भ है।self की जगह कोई भी नाम रखा जा सकता है, परंतु परंपरा के अनुसार self ही उपयोग होता है।| सिद्धांत | अर्थ |
|---|---|
| एनकैप्सुलेशन | डेटा और विधियों को एक इकाई में बाँधना |
| इनहेरिटेंस | मूल वर्ग के गुण प्राप्त करना |
| पॉलीमॉर्फिज़्म | एक नाम, अनेक रूप |
| एब्स्ट्रैक्शन | जटिलता छिपाना |
| शब्द | अर्थ |
|---|---|
| class | वर्ग घोषणा कीवर्ड |
| init | कंस्ट्रक्टर |
| self | वर्तमान वस्तु |
| गुण (Attribute) | वस्तु का डेटा |
| विधि (Method) | वस्तु का व्यवहार |
| वस्तु (Object) | वर्ग से बनी इकाई |
| शब्द | अर्थ |
|---|---|
| मूल वर्ग | जिससे प्राप्त होता है |
| बाल वर्ग | जो प्राप्त करता है |
| Method Overriding | विधि का पुनः परिभाषित होना |
__init__ का नाम गलत लिखना (जैसे init) या कोलन/इंडेंटेशन भूलना।self.नाम की जगह केवल नाम लिखना, जिससे स्थानीय चर बन जाता है।ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग आधुनिक सॉफ्टवेयर विकास का आधार है। इस अध्याय में हमने वर्ग, वस्तु, कंस्ट्रक्टर, self, एनकैप्सुलेशन, इनहेरिटेंस, पॉलीमॉर्फिज़्म और एब्स्ट्रैक्शन का अध्ययन किया। ओओपी कोड को पुनः उपयोग योग्य, सुरक्षित और व्यवस्थित बनाता है। वर्ग खाका प्रदान करता है जबकि वस्तु उसका वास्तविक रूप है। इनहेरिटेंस से कोड की पुनः उपयोगिता और विस्तारशीलता बढ़ती है, एनकैप्सुलेशन डेटा की सुरक्षा करता है, पॉलीमॉर्फिज़्म लचीलापन देता है और एब्स्ट्रैक्शन जटिलता को सरल करता है। ये अवधारणाएँ हमें वास्तविक दुनिया की समस्याओं को प्रभावी ढंग से प्रोग्राम में मॉडल करने में सहायता करती हैं। ओओपी में निपुणता किसी भी सॉफ्टवेयर डेवलपर के लिए आवश्यक है।