💻
⌨️
🖱️
🖥️
💾
← डैशबोर्ड पर वापस जाएँ
Font Size:

1. परिचय

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP - Object-Oriented Programming) एक प्रोग्रामिंग प्रतिमान है जिसमें प्रोग्राम को वस्तुओं (Objects) और वर्गों (Classes) के रूप में व्यवस्थित किया जाता है। पारंपरिक प्रोसीजरल प्रोग्रामिंग में कोड को कार्यों (Functions) के रूप में लिखा जाता है, जबकि ओओपी में डेटा और उसे संचालित करने वाले फंक्शन को एक साथ एक इकाई में बाँधा जाता है। यह प्रतिमान वास्तविक दुनिया की वस्तुओं की तरह सोचने में सहायता करता है, जिनमें गुण (Attributes) और व्यवहार (Methods) होते हैं। उदाहरण के लिए, एक कार में रंग, मॉडल जैसे गुण और चलाना, रोकना जैसे व्यवहार होते हैं। ओओपी के चार मुख्य सिद्धांत हैं - एनकैप्सुलेशन, इनहेरिटेंस, पॉलीमॉर्फिज़्म और एब्स्ट्रैक्शन। पाइथन पूर्ण रूप से ओओपी का समर्थन करता है और इस अध्याय में हम इन अवधारणाओं का विस्तार से अध्ययन करेंगे।

2. ओओपी क्या है? (What is OOP?)

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग वह प्रोग्रामिंग शैली है जिसमें प्रोग्राम को वर्गों (Classes) और वस्तुओं (Objects) में संरचित किया जाता है। इसमें:

3. वर्ग (Class) और वस्तु (Object)

3.1 वर्ग (Class)

वर्ग एक निर्माण खाका (Blueprint) है जिससे वस्तुएँ बनाई जाती हैं। वर्ग गुणों और विधियों को परिभाषित करता है।

class छात्र:
    def __init__(self, नाम, अंक):
        self.नाम = नाम
        self.अंक = अंक

    def जानकारी(self):
        print(self.नाम, self.अंक)

3.2 वस्तु (Object)

वर्ग से बनाई गई वास्तविक इकाई वस्तु कहलाती है:

राहुल = छात्र("राहुल", 85)
राहुल.जानकारी()

4. कंस्ट्रक्टर (Constructor - init)

कंस्ट्रक्टर एक विशेष विधि है जो वस्तु बनाते समय स्वतः आहूत होती है। यह वस्तु के गुणों को आरंभ (Initialize) करता है।

class कार:
    def __init__(self, रंग, मॉडल):
        self.रंग = रंग
        self.मॉडल = मॉडल

5. एनकैप्सुलेशन (Encapsulation)

एनकैप्सुलेशन का अर्थ है डेटा (गुण) और उसे संचालित करने वाली विधियों को एक इकाई में बाँधना तथा बाहरी हस्तक्षेप से डेटा की रक्षा करना।

6. इनहेरिटेंस (Inheritance)

इनहेरिटेंस वह सिद्धांत है जिसमें एक वर्ग (बाल वर्ग) दूसरे वर्ग (मूल वर्ग) के गुणों और विधियों को प्राप्त करता है।

class वाहन:                 # मूल (Parent) वर्ग
    def __init__(self, नाम):
        self.नाम = नाम

    def चलाओ(self):
        print(self.नाम, "चल रहा है")

class कार(वाहन):            # बाल (Child) वर्ग
    def हॉर्न(self):
        print("पीप पीप")

इनहेरिटेंस के लाभ

7. पॉलीमॉर्फिज़्म (Polymorphism)

पॉलीमॉर्फिज़्म का अर्थ है एक ही नाम के लिए कई रूप। इसका अर्थ है कि एक ही विधि या ऑपरेटर अलग-अलग वस्तुओं पर अलग-अलग व्यवहार कर सकता है।

उदाहरण:

class कुत्ता:
    def आवाज़(self):
        print("भौंकता है")

class बिल्ली:
    def आवाज़(self):
        print("म्याऊँ करती है")

दोनों वर्गों में एक ही विधि का नाम है, परंतु व्यवहार अलग है।

8. एब्स्ट्रैक्शन (Abstraction)

एब्स्ट्रैक्शन का अर्थ है केवल आवश्यक विवरण प्रदर्शित करना और अनावश्यक जटिलता को छिपाना। इसका उपयोग डेटा और कार्यान्वयन विवरण को छिपाकर केवल इंटरफ़ेस प्रदान करने के लिए होता है। उदाहरण के लिए, कार चलाने के लिए हमें केवल स्टीयरिंग और पैडल जानना आवश्यक है, इंजन की आंतरिक कार्यप्रणाली नहीं। प्रोग्रामिंग में एब्स्ट्रैक्शन से जटिलता घटती है और कोड सरल बनता है।

9. self की भूमिका (Role of Self)

10. ओओपी के लाभ (Advantages of OOP)

त्वरित पुनरावृत्ति तालिकाएँ

तालिका 1: ओओपी के सिद्धांत

सिद्धांत अर्थ
एनकैप्सुलेशन डेटा और विधियों को एक इकाई में बाँधना
इनहेरिटेंस मूल वर्ग के गुण प्राप्त करना
पॉलीमॉर्फिज़्म एक नाम, अनेक रूप
एब्स्ट्रैक्शन जटिलता छिपाना

तालिका 2: वर्ग की शब्दावली

शब्द अर्थ
class वर्ग घोषणा कीवर्ड
init कंस्ट्रक्टर
self वर्तमान वस्तु
गुण (Attribute) वस्तु का डेटा
विधि (Method) वस्तु का व्यवहार
वस्तु (Object) वर्ग से बनी इकाई

तालिका 3: इनहेरिटेंस

शब्द अर्थ
मूल वर्ग जिससे प्राप्त होता है
बाल वर्ग जो प्राप्त करता है
Method Overriding विधि का पुनः परिभाषित होना

माइंड मैप

graph TD A["पाइथन ओओपी"] --> B["वर्ग और वस्तु"] B --> B1["class कीवर्ड"] B --> B2["__init__"] A --> C["सिद्धांत"] C --> C1["एनकैप्सुलेशन"] C --> C2["इनहेरिटेंस"] C --> C3["पॉलीमॉर्फिज़्म"] C --> C4["एब्स्ट्रैक्शन"] A --> D["self"] D --> D1["वर्तमान वस्तु"] A --> E["विधियाँ"] E --> E1["गुणों का व्यवहार"]

महत्वपूर्ण आरेख (SVG)

इनहेरिटेंस का आरेख

इनहेरिटेंस का आरेख वाहन मूल वर्ग (Parent) कार बाल वर्ग साइकिल बाल वर्ग कार.चलाओ() साइकिल.चलाओ() बाल वर्ग मूल वर्ग की विधियाँ विरासत में प्राप्त करते हैं बाल वर्ग अपनी अतिरिक्त विधियाँ भी जोड़ सकते हैं Golden Rule: बाल वर्ग मूल वर्ग के सभी सार्वजनिक गुण और विधियाँ प्राप्त करता है।

वर्ग और वस्तु की संरचना

वर्ग और वस्तु की संरचना वर्ग: छात्र (खाका) __init__(self, नाम, अंक) self.नाम self.अंक जानकारी() विधि गुण और विधियों की परिभाषा (केवल खाका, वस्तु नहीं) से बनती हैं वस्तु 1: राहुल नाम = राहुल, अंक = 85 वस्तु 2: सीमा नाम = सीमा, अंक = 92 वस्तु 3: अमित नाम = अमित, अंक = 78 एक वर्ग से अनेक वस्तुएँ बनाई जा सकती हैं प्रत्येक वस्तु के गुणों के अपने मान होते हैं स्वर्ण नियम: वर्ग खाका है, वस्तु वास्तविक इकाई है; एक वर्ग से कई वस्तुएँ बनती हैं।

सामान्य गलतियाँ

  1. __init__ का नाम गलत लिखना (जैसे init) या कोलन/इंडेंटेशन भूलना।
  2. विधि परिभाषा में self न लिखना; self अनिवार्य है।
  3. वस्तु बनाते समय कंस्ट्रक्टर के आर्ग्युमेंट न देना, जबकि init उन्हें अपेक्षित करता है।
  4. वर्ग और वस्तु में अंतर न समझना; वर्ग खाका है और वस्तु उससे बनी इकाई।
  5. इनहेरिटेंस में बाल वर्ग घोषित करते समय मूल वर्ग का नाम कोष्ठक में लिखना भूलना।
  6. self.नाम की जगह केवल नाम लिखना, जिससे स्थानीय चर बन जाता है।
  7. एनकैप्सुलेशन में निजी गुणों तक सीधे पहुँचने का प्रयास।
  8. पॉलीमॉर्फिज़्म में विधि ओवरराइडिंग का सही सिंटैक्स भूलना।

परीक्षा युक्तियाँ

  1. वर्ग घोषणा, init और वस्तु निर्माण वाला पूरा प्रोग्राम लिखने का अभ्यास करें।
  2. ओओपी के चारों सिद्धांतों (एनकैप्सुलेशन, इनहेरिटेंस, पॉलीमॉर्फिज़्म, एब्स्ट्रैक्शन) की परिभाषाएँ याद करें।
  3. self और init की भूमिका स्पष्ट रूप से समझें।
  4. इनहेरिटेंस का छोटा प्रोग्राम (मूल और बाल वर्ग) लिखने का अभ्यास करें।
  5. विधि ओवरराइडिंग के आउटपुट आधारित प्रश्न हल करें।
  6. वस्तु और वर्ग के बीच के अंतर को उदाहरण सहित तैयार रखें।
  7. पिछले वर्षों के प्रश्नों में वर्ग-वस्तु से संबंधित प्रोग्राम को ध्यान से पढ़कर उत्तर दें।

निष्कर्ष

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