ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) सॉफ्टवेयर विकास में उपयोग किया जाने वाला एक प्रमुख दृष्टिकोण है।
इस लेख में, हम ओओपी के मुख्य विचारों का पता लगाएंगे, विशेष रूप से पायथन में कक्षाओं, वस्तुओं, विरासत और बहुरूपता को देखेंगे।
इस गाइड के अंत तक, आप समझ जाएंगे कि ओओपी सिद्धांतों का उपयोग करके अपने पायथन कोड को कैसे व्यवस्थित किया जाए, जिससे आपके प्रोग्राम अधिक मॉड्यूलर, पुन: प्रयोज्य और बनाए रखने में आसान हो जाएं।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) फ़ंक्शन और तर्क के बजाय डेटा, या ऑब्जेक्ट के आसपास सॉफ़्टवेयर डिज़ाइन को व्यवस्थित करता है।
एक वस्तु अद्वितीय विशेषताओं (डेटा) और व्यवहार (कार्यों) के साथ एक कंटेनर की तरह होती है। OOP कई प्रमुख अवधारणाओं पर केंद्रित है:
एनकैप्सुलेशन
इसका मतलब है डेटा (गुण) और उस डेटा पर काम करने वाले तरीकों (फ़ंक्शन) को एक इकाई में बंडल करना, जिसे क्लास कहा जाता है।
इसमें ऑब्जेक्ट के कुछ घटकों तक पहुंच को प्रतिबंधित करना भी शामिल है, जिससे यह अधिक सुरक्षित हो जाता है।
अमूर्त
यह जटिल कार्यान्वयन विवरणों को छिपाने और वस्तु की केवल आवश्यक विशेषताओं को दिखाने का विचार है।
यह जटिलता को कम करता है और प्रोग्रामर को उच्च-स्तरीय इंटरैक्शन पर ध्यान केंद्रित करने की अनुमति देता है।
विरासत
यह मौजूदा वर्ग (बेस क्लास) से एक नया वर्ग (व्युत्पन्न वर्ग) बनाने का एक तंत्र है।
नया वर्ग मौजूदा वर्ग से विशेषताएँ और विधियाँ प्राप्त करता है।
बहुरूपता
यह विभिन्न डेटा प्रकारों का प्रतिनिधित्व करने के लिए एकल इंटरफ़ेस का उपयोग करने की क्षमता है।
यह वस्तुओं को उनके मूल वर्ग के उदाहरणों के रूप में मानने की अनुमति देता है और बाल वर्ग में उन तरीकों को परिभाषित करना संभव बनाता है जिनका नाम मूल वर्ग में एक विधि के समान होता है।
पायथन में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) के मूल में कक्षाएं और ऑब्जेक्ट हैं।
कक्षाएं
एक क्लास ऑब्जेक्ट बनाने के लिए एक ब्लूप्रिंट की तरह है।
यह वस्तुओं के गुणों (विशेषताओं) और क्रियाओं (विधियों) के एक सेट को परिभाषित करता है।
पायथन में, आप क्लास कीवर्ड का उपयोग करके एक क्लास बनाते हैं। यहाँ एक उदाहरण है:
class Car: def __init__(self, make, model, year): self.make = make self.model = model self.year = year def start_engine(self): print(f"{self.make} {self.model}'s engine started.")
ऑब्जेक्ट्स
एक वस्तु एक वर्ग का एक उदाहरण है।
एक बार जब आप एक वर्ग को परिभाषित कर लेते हैं, तो आप उससे कई ऑब्जेक्ट (उदाहरण) बना सकते हैं।
कक्षा में परिभाषित विशेषताओं के लिए प्रत्येक ऑब्जेक्ट के अपने अद्वितीय मान हो सकते हैं।
यहां बताया गया है कि आप ऑब्जेक्ट कैसे बनाते हैं और उसका उपयोग कैसे करते हैं:
my_car = Car("Toyota", "Corolla", 2020) my_car.start_engine() # Output: Toyota Corolla's engine started.
इस उदाहरण में, my_car कार वर्ग का एक ऑब्जेक्ट है।
मेक, मॉडल और वर्ष के लिए इसके अपने मूल्य हैं, और आप स्टार्ट_इंजन जैसी विधियों का उपयोग कर सकते हैं।
विरासत एक वर्ग (बाल वर्ग) को दूसरे वर्ग (मूल वर्ग) की विशेषताओं और तरीकों को अपनाने देता है।
कोड का पुन: उपयोग करने और कक्षाओं के बीच पदानुक्रम स्थापित करने के लिए यह बहुत अच्छा है।
यहां एक उदाहरण है:
class Vehicle: def __init__(self, make, model): self.make = make self.model = model def drive(self): print("Driving...") class Car(Vehicle): def __init__(self, make, model, year): super().__init__(make, model) self.year = year def start_engine(self): print(f"{self.make} {self.model}'s engine started.") my_car = Car("Honda", "Civic", 2021) my_car.drive() # Output: Driving... my_car.start_engine() # Output: Honda Civic's engine started.
इस उदाहरण में, कार वर्ग वाहन वर्ग से विरासत में मिला है।
इसकी वजह से, कार वर्ग वाहन वर्ग में परिभाषित ड्राइव विधि का उपयोग कर सकता है।
विधि ओवरराइडिंग
कभी-कभी, किसी चाइल्ड क्लास को मूल वर्ग से विरासत में मिली विधि के व्यवहार को बदलने या जोड़ने की आवश्यकता होती है।
यह ओवरराइडिंग विधि के माध्यम से किया जाता है।
यहां एक उदाहरण है:
class Vehicle: def drive(self): print("Driving a vehicle...") class Car(Vehicle): def drive(self): print("Driving a car...") my_vehicle = Vehicle() my_vehicle.drive() # Output: Driving a vehicle... my_car = Car() my_car.drive() # Output: Driving a car...
इस उदाहरण में, कार वर्ग में ड्राइव विधि वाहन वर्ग में ड्राइव विधि को ओवरराइड करती है, जिससे अनुकूलित व्यवहार की अनुमति मिलती है।
एकाधिक वंशानुक्रम
पायथन मल्टीपल इनहेरिटेंस का भी समर्थन करता है, जहां एक क्लास एक से अधिक बेस क्लास से इनहेरिट कर सकता है।
यहां एक उदाहरण है:
class Vehicle: def __init__(self, make, model): self.make = make self.model = model def drive(self): print("Driving a vehicle...") class Electric: def charge(self): print("Charging...") class Car(Vehicle): def __init__(self, make, model, year): super().__init__(make, model) self.year = year def start_engine(self): print(f"{self.make} {self.model}'s engine started.") class HybridCar(Car, Electric): def switch_mode(self): print("Switching to electric mode...") my_hybrid = HybridCar("Toyota", "Prius", 2022) my_hybrid.start_engine() # Output: Toyota Prius's engine started. my_hybrid.drive() # Output: Driving a vehicle... my_hybrid.charge() # Output: Charging... my_hybrid.switch_mode() # Output: Switching to electric mode...
इस उदाहरण में, हाइब्रिडकार वर्ग कार और इलेक्ट्रिक दोनों से विरासत में मिला है, जिससे यह दोनों मूल वर्गों से विधियों तक पहुंच प्राप्त कर सकता है।
बहुरूपता एक ऐसी सुविधा है जो तरीकों को उस वस्तु के आधार पर अलग-अलग क्रियाएं करने की अनुमति देती है जिसके साथ वे काम कर रहे हैं, भले ही इन तरीकों का नाम एक ही हो।
विरासत से निपटते समय यह विशेष रूप से उपयोगी है, क्योंकि यह आपको विभिन्न वर्गों में एक ही विधि नाम का उपयोग इस तरह से करने देता है जो प्रत्येक वर्ग के लिए समझ में आता है।
कार्यों के साथ बहुरूपता
यहाँ एक उदाहरण है:
class Dog: def speak(self): return "Woof!" class Cat: def speak(self): return "Meow!" def make_animal_speak(animal): print(animal.speak()) dog = Dog() cat = Cat() make_animal_speak(dog) # Output: Woof! make_animal_speak(cat) # Output: Meow!
make_animal_speak फ़ंक्शन किसी भी वस्तु को स्पीक विधि से स्वीकार करके बहुरूपता प्रदर्शित करता है।
यह इसे कुत्ते और बिल्ली दोनों वस्तुओं के साथ काम करने की अनुमति देता है, उनके मतभेदों के बावजूद।
वर्ग विधियों के साथ बहुरूपता
वर्ग पदानुक्रम में विधियों के साथ काम करते समय बहुरूपता भी चलन में आती है।
यहां एक उदाहरण है:
class Animal: def speak(self): raise NotImplementedError("Subclass must implement abstract method") class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" animals = [Dog(), Cat()] for animal in animals: print(animal.speak())
इस उदाहरण में, कुत्ता और बिल्ली दोनों पशु के उपवर्ग हैं।
स्पीक विधि दोनों उपवर्गों में लागू की गई है, जिससे जानवरों की सूची के माध्यम से पुनरावृत्ति करते समय बहुरूपता प्रभावी हो सकती है।
एनकैप्सुलेशन डेटा और उस डेटा पर काम करने वाली विधियों को एक इकाई में संयोजित करने का अभ्यास है, जिसे क्लास कहा जाता है।
इसमें ऑब्जेक्ट के कुछ हिस्सों तक पहुंच को प्रतिबंधित करना भी शामिल है, जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) में डेटा की सुरक्षा के लिए महत्वपूर्ण है।
निजी और सार्वजनिक गुण
पायथन में, आप किसी विशेषता का नाम अंडरस्कोर से शुरू करके यह संकेत दे सकते हैं कि वह विशेषता निजी है।
हालांकि यह वास्तव में कक्षा के बाहर से पहुंच को नहीं रोकता है, यह एक परंपरा है जो संकेत देती है कि विशेषता तक सीधे पहुंच नहीं होनी चाहिए।
यहां एक उदाहरण है:
class Account: def __init__(self, owner, balance=0): self.owner = owner self._balance = balance # Private attribute def deposit(self, amount): self._balance = amount def withdraw(self, amount): if amountइस उदाहरण में, खाता वर्ग में एक निजी विशेषता _बैलेंस है, जिसे जमा करने, निकालने और प्राप्त_बैलेंस जैसी विधियों के माध्यम से हेरफेर किया जाता है।
कक्षा के बाहर से _बैलेंस तक सीधी पहुंच को हतोत्साहित किया जाता है।
उन्नत ओओपी अवधारणाएँ
उन लोगों के लिए जो पायथन में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) की अपनी समझ को गहरा करना चाहते हैं, यहां कुछ उन्नत विषय हैं:
क्लास तरीके
ये वे विधियाँ हैं जो कक्षा से ही जुड़ी हैं, न कि कक्षा के अलग-अलग उदाहरणों से।वे वर्ग की स्थिति को बदल सकते हैं, जो वर्ग के सभी उदाहरणों को प्रभावित करता है।
class Car: total_cars = 0 def __init__(self, make, model): self.make = make self.model = model Car.total_cars = 1 @classmethod def get_total_cars(cls): return cls.total_carsस्थैतिक तरीके
ये वे विधियाँ हैं जो वर्ग से संबंधित हैं लेकिन वर्ग की स्थिति या उसके उदाहरणों को नहीं बदलती हैं।उन्हें @staticmethod डेकोरेटर का उपयोग करके परिभाषित किया गया है।
class MathOperations: @staticmethod def add(x, y): return x yप्रॉपर्टी डेकोरेटर्स
पायथन में प्रॉपर्टी डेकोरेटर अधिक पायथोनिक तरीके से क्लास विशेषताओं के लिए गेटर्स, सेटर्स और डिलीटर्स को परिभाषित करने का एक तरीका प्रदान करते हैं।
class Employee: def __init__(self, name, salary): self._name = name self._salary = salary @property def salary(self): return self._salary @salary.setter def salary(self, value): if valueइस उदाहरण में, वेतन विशेषता को एक नियमित विशेषता की तरह एक्सेस किया जाता है लेकिन इसे गेटर और सेटर विधियों द्वारा प्रबंधित किया जाता है।
निष्कर्ष
पायथन में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) आपके कोड को व्यवस्थित और प्रबंधित करने का एक शक्तिशाली तरीका है।
ओओपी के सिद्धांतों, जैसे कि कक्षाएं, वस्तुएं, विरासत, बहुरूपता और एनकैप्सुलेशन को सीखकर, आप पायथन प्रोग्राम लिख सकते हैं जो सुव्यवस्थित, पुन: प्रयोज्य और बनाए रखने में आसान हैं।
चाहे आप छोटी स्क्रिप्ट पर काम कर रहे हों या बड़े एप्लिकेशन पर, ओओपी सिद्धांतों का उपयोग करने से आपको अधिक कुशल, स्केलेबल और मजबूत सॉफ्टवेयर बनाने में मदद मिलेगी।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3