📘 CodingMarble Learn

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP)

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

🎬 कदम-दर-कदम कहानी

  1. क्लास एक नक्शा (ब्लूप्रिंट) है। class Car कहती है कि हर कार का रंग और गति होगी, और हर कार accelerate कर सकती है।
  2. ऑब्जेक्ट क्लास से बनी असली चीज़ें हैं। यहाँ तीन कार ऑब्जेक्ट हैं, हर एक का अपना रंग।
  3. हम एक ऑब्जेक्ट पर मेथड चलाते हैं: car1.accelerate(20)। केवल car1 बदलती है। बाकी वैसी ही रहती हैं।
  4. एनकैप्सुलेशन डेटा को एक खोल में रखता है। बाहर का कोड गति बदलने के लिए मेथड का ही इस्तेमाल करे।
  5. इनहेरिटेंस: ElectricCar, Car से बनी है। उसे Car की हर चीज़ मिलती है और वह बैटरी जोड़ती है।
  6. आपकी बारी: ऑब्जेक्ट बनाओ, accelerate() और describe() चलाओ। हर तरह की कार अपने ढंग से जवाब देती है।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

क्या क्लास ख़ुद एक ऑब्जेक्ट है?

सीखते समय क्लास को केवल योजना समझो। असली डेटा उससे बने ऑब्जेक्ट्स में रहता है।

एक क्लास के दो ऑब्जेक्ट क्या डेटा साझा करते हैं?

नहीं। हर ऑब्जेक्ट के इंस्टेंस वेरिएबल की अपनी कॉपी होती है, जैसे हर कार का अपना रंग।

केवल car1 की गति क्यों बढ़ी?

मेथड उसी ऑब्जेक्ट पर काम करता है जिस पर उसे चलाया गया। accelerate() के अंदर self का मतलब car1 था।

गति सीधे क्यों न बदलें?

मेथड मान जाँच सकता है (ऋणात्मक गति या 999 km/h नहीं)। सीधी पहुँच ये जाँच छोड़ देती है।

क्या चाइल्ड क्लास पैरेंट का कोड कॉपी करती है?

नहीं, उसे दोबारा इस्तेमाल करती है। Car में नया मेथड आए तो ElectricCar को भी मिल जाता है।

ओवरराइडिंग और ओवरलोडिंग में क्या अंतर है?

ओवरराइडिंग: चाइल्ड पैरेंट के मेथड को उसी सिग्नेचर से बदलता है। ओवरलोडिंग (Java): एक क्लास में एक ही नाम के कई मेथड, अलग पैरामीटर के साथ।

क्लास और ऑब्जेक्ट

प्रोसीजरल प्रोग्रामिंग में हम कदमों और फ़ंक्शन की सूची लिखते हैं। ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) में डेटा और उस पर काम करने वाला कोड एक साथ ऑब्जेक्ट में रखते हैं।

class Car:
    def __init__(self, colour):
        self.colour = colour
        self.speed = 0

    def accelerate(self, amount):
        self.speed += amount

car1 = Car("red")
car2 = Car("yellow")
car1.accelerate(20)
print(car1.speed, car2.speed)   # 20 0

कंस्ट्रक्टर, self, और क्लास बनाम इंस्टेंस वेरिएबल

कंस्ट्रक्टर ऑब्जेक्ट बनते ही अपने-आप चलता है। Python में यह __init__ है; Java में इसका नाम क्लास जैसा होता है। यह नए ऑब्जेक्ट को शुरुआती मान देता है।

self (Python) या this (Java) का मतलब है "यही ऑब्जेक्ट"। self.speed उस ऑब्जेक्ट की गति है जिस पर मेथड चला।

मेथड सिग्नेचर = मेथड का नाम + पैरामीटर सूची, जैसे accelerate(amount)। Java में: public void accelerate(int amount)।

// Java
public class Car {
    private String colour;
    private int speed;
    public Car(String colour) { this.colour = colour; this.speed = 0; }
    public void accelerate(int amount) { speed += amount; }
}

एनकैप्सुलेशन और एब्स्ट्रैक्शन

एनकैप्सुलेशन का मतलब है ऑब्जेक्ट का डेटा उसके अंदर रखना और बाहर वालों को केवल मेथड से बदलने देना। एट्रिब्यूट को private बनाते हैं (Java में private; Python में नाम __ से शुरू) और getter, setter मेथड देते हैं जो मान जाँच सकें। जैसे बैंक खाते का withdraw() बैलेंस शून्य से नीचे नहीं जाने देता।

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

इनहेरिटेंस और पॉलीमॉर्फ़िज़्म

इनहेरिटेंस: सबक्लास (चाइल्ड) सुपरक्लास (पैरेंट) से बनती है। उसे पैरेंट के सारे एट्रिब्यूट और मेथड मिलते हैं और वह नए जोड़ सकती है। यह "is-a" रिश्ता है: ElectricCar एक Car है।

पॉलीमॉर्फ़िज़्म ("कई रूप"): एक ही मेथड का नाम अलग क्लास में अलग काम करता है। चाइल्ड क्लास पैरेंट के मेथड को ओवरराइड कर सकती है।

class ElectricCar(Car):
    def __init__(self, colour):
        super().__init__(colour)
        self.battery = 100

    def describe(self):          # Car.describe को ओवरराइड
        return "electric, battery " + str(self.battery)

for c in [Car("red"), ElectricCar("blue")]:
    print(c.describe())

ऑब्जेक्ट से डिज़ाइन

UML क्लास डायग्राम में हर क्लास एक डिब्बा है: नाम, एट्रिब्यूट, मेथड (+ public, − private)। कंपोज़िशन "has-a" रिश्ता है: Car के पास Engine है। OOP से कोड दोबारा इस्तेमाल होता है, जाँचना आसान होता है और टीम में बाँटना आसान होता है।

करके देखो

घर की कोई चीज़ चुनो, जैसे मोबाइल फ़ोन। उसकी क्लास लिखो: 3 एट्रिब्यूट और 2 मेथड। फिर अलग मानों वाले दो ऑब्जेक्ट लिखो।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. name और marks वाली class Student लिखो, और is_pass() मेथड जो marks ≥ 33 पर True दे।

class Student: def __init__(self, name, marks): self.name = name self.marks = marks def is_pass(self): return self.marks >= 33 s = Student("Asha", 72); s.is_pass() → True

2. car1 = Car("red"); car2 = car1; car2.accelerate(10)। car1.speed कितनी है?

10। car2 = car1 नया ऑब्जेक्ट नहीं बनाता; दोनों नाम एक ही ऑब्जेक्ट की ओर इशारा करते हैं। नया ऑब्जेक्ट केवल Car(...) से बनता है।

3. एक क्लास वेरिएबल बनाओ जो गिने कि कितने Car ऑब्जेक्ट बने।

class Car: count = 0 def __init__(self, colour): self.colour = colour Car.count += 1 Car("red") और Car("blue") के बाद Car.count = 2।

4. ऐसा BankAccount बनाकर एनकैप्सुलेशन दिखाओ जो शून्य से नीचे न जाए।

class BankAccount: def __init__(self): self.__balance = 0 def deposit(self, x): if x > 0: self.__balance += x def withdraw(self, x): if x <= self.__balance: self.__balance -= x def get_balance(self): return self.__balance बाहर का कोड acc.__balance = -500 नहीं लिख सकता।

5. Animal का speak() "..." लौटाता है। Dog और Cat इसे ओवरराइड करते हैं। लूप क्या छापेगा? for a in [Dog(), Cat(), Animal()]: print(a.speak())

"Woof", "Meow", "..."। हर ऑब्जेक्ट अपनी क्लास का वर्ज़न चलाता है: यही पॉलीमॉर्फ़िज़्म है।

6. class Book का UML डिब्बा बनाओ: private title, price और public मेथड apply_discount(p)।

Book − title: str − price: float + apply_discount(p: float): void

आम गलतियाँ

अभ्यास क्विज़

1. क्लास का सबसे सही वर्णन:
2. Python में कंस्ट्रक्टर मेथड का नाम:
3. डेटा छिपाकर केवल मेथड से पहुँच देना कहलाता है:
4. class ElectricCar(Car) दिखाता है:
5. चाइल्ड क्लास का पैरेंट मेथड का अपना वर्ज़न देना:

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

OOP के चार स्तंभ कौन-से हैं?

एनकैप्सुलेशन, एब्स्ट्रैक्शन, इनहेरिटेंस और पॉलीमॉर्फ़िज़्म।

कौन-सी भाषाएँ ऑब्जेक्ट ओरिएंटेड हैं?

Python, Java, C++, C#, JavaScript और कई अन्य OOP को सपोर्ट करती हैं।

क्लास और ऑब्जेक्ट में क्या अंतर है?

क्लास ब्लूप्रिंट है; ऑब्जेक्ट उससे बनी एक असली चीज़ है जिसका अपना डेटा है।

यह कहाँ पढ़ाया जाता है

कनाडा (ओंटारियो)Grade 12A. Programming Concepts and Skills
कनाडा (ओंटारियो)Grade 12B. Software Development
इटलीSecondaria di secondo grado – classe 3ªTools and foundations
इटलीSecondaria di secondo grado – classe 4ªTools and foundations
रोमानियाClasa a IX-aStoring data and organising code in a programming language
रोमानियाClasa a IX-aStoring data and organising code in a programming language
रोमानियाClasa a IX-aStoring data and organising code in a programming language
रोमानियाClasa a XI-aObject-oriented programming
रोमानियाClasa a XII-aModule 3: Visual programming (optional)
यूक्रेन10 класProgramming language and data structures
इंग्लैंडYear 134.1 Fundamentals of programming (A-level)
अमेरिकाGrade 9Algorithms and Programming
अमेरिकाGrade 11Using Objects and Methods
अमेरिकाGrade 11Class Creation
अमेरिकाGrade 11Algorithms and Programming
दक्षिण कोरिया고등학교 2학년Algorithms and programming
जर्मनीJahrgangsstufe 9Object-oriented modelling and programming basics
जर्मनीJahrgangsstufe 10Object-oriented modelling and programming
फ्रांसTerminaleData structures

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ