This post is also available in: English العربية (Arabic)
एक प्रोग्रामिंग भाषा एक कंप्यूटर भाषा है जिसका उपयोग प्रोग्रामर/डेवलपर्स द्वारा कंप्यूटर के साथ संचार करने के लिए किया जाता है। यह किसी विशिष्ट कार्य को करने के लिए किसी विशिष्ट भाषा जैसे C, C++, जावा, पाइथन, आदि में लिखे गए निर्देशों का एक समूह है। एक प्रोग्रामिंग भाषा का उपयोग मुख्य रूप से डेस्कटॉप एप्लिकेशन, वेबसाइट और मोबाइल एप्लिकेशन विकसित करने के लिए किया जाता है।
विभिन्न प्रोग्रामिंग भाषाएं विभिन्न प्रकार के दृष्टिकोणों का उपयोग करती हैं जिन्हें आमतौर पर प्रोग्रामिंग प्रतिमान (पराड़िम) के रूप में जाना जाता है। दो सबसे व्यापक रूप से उपयोग किए जाने वाले प्रोग्रामिंग प्रतिमान प्रक्रियात्मक प्रोग्रामिंग और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) हैं। यह लेख OOPs और प्रक्रियात्मक प्रोग्रामिंग दृष्टिकोणों के बीच अंतर के बारे में है।
प्रक्रियात्मक प्रोग्रामिंग और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग दोनों प्रोग्रामिंग दृष्टिकोण हैं, जो प्रोग्रामिंग के लिए हाई-लेवल भाषा का उपयोग करते हैं। एक प्रोग्राम दोनों भाषाओं में लिखा जा सकता है, लेकिन यदि कार्य अत्यधिक जटिल है, तो OOP प्रक्रियात्मक प्रोग्रामिंग की तुलना में अच्छी तरह से संचालित होता है। पारंपरिक प्रक्रियात्मक प्रोग्रामिंग में, डेटा सुरक्षा (डाटा सिक्योरिटी) जोखिम में है क्योंकि डेटा प्रोग्राम में स्वतंत्र रूप से चलता है, साथ ही कोड पुन: प्रयोज्यता (कोड रीयूज़ेबिलिटी) प्राप्त नहीं होती है जो प्रोग्रामिंग को लंबा और समझने में कठिन बनाती है।
बड़े प्रोग्राम अधिक बग पैदा करते हैं, और यह डिबगिंग के समय को बढ़ाता है। ये सभी दोष ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को अधिक बेहतर बनाते हैं। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की प्राथमिक चिंता डेटा सुरक्षा है क्योंकि यह डेटा को उस पर संचालित होने वाले कार्यों से निकटता से बांधती है।
यह कोड पुन: प्रयोज्यता की समस्या को भी हल करता है, क्योंकि जब एक क्लास बनाया जाता है, तो इसके कई इन्सटेंसेस जिन्हें आमतौर पर ऑब्जेक्ट्स के रूप में जाना जाता है, बनाया जा सकता है जो एक क्लास द्वारा परिभाषित सदस्य कार्यों का पुन: उपयोग करता है। कुछ अन्य अंतर हैं जिनके बारे में हम इस लेख में चर्चा करेंगे। OOPs और प्रक्रियात्मक प्रोग्रामिंग के बीच अंतर पर जाने से पहले, आइए इन दो प्रतिमानों को देखें।
प्रक्रियात्मक (प्रोसीज़रल) प्रोग्रामिंग क्या है?
प्रक्रियात्मक प्रोग्रामिंग को एक प्रोग्रामिंग मॉडल के रूप में वर्णित किया जा सकता है जो कॉलिंग प्रक्रियाओं की अवधारणा के आधार पर संरचित प्रोग्रामिंग से प्राप्त होता है। इन प्रक्रियाओं (प्रोसीजर) को रूटीन, फ़ंक्शंस या सबरूटीन के रूप में भी जाना जाता है और आम तौर पर किए जाने वाले कई कम्प्यूटेशनल कदम होते हैं। एक कार्यक्रम के निष्पादन के दौरान, किसी भी प्रक्रिया को किसी भी बिंदु पर बुलाया जा सकता है, जिसमें अन्य प्रक्रियाएं या स्वयं शामिल हैं।
प्रक्रियात्मक प्रोग्रामिंग की अवधारणाएं
प्रक्रियात्मक प्रोग्रामिंग में उपयोग की जाने वाली अवधारणाएँ निम्नलिखित हैं:
- एक प्रोग्राम डिजाइन करते समय, प्रक्रियात्मक प्रोग्रामिंग एक टॉप-डाउन प्रोग्रामिंग दृष्टिकोण का पालन करती है।
- अधिकांश फंक्शन्स ग्लोबल डेटा को साझा करने की अनुमति देते हैं।
- यह बड़े प्रोग्राम को छोटे भागों में विभाजित करता है जिन्हें फंक्शन कहते हैं।
- यह सिस्टम के चारों ओर फंक्शन्स से फंक्शन्स तक फ्री डेटा मूवमेंट की अनुमति देता है।
- फंक्शन्स द्वारा डेटा को एक रूप से दूसरे रूप में परिवर्तित किया जाता है।
- यह फंक्शन की अवधारणा को महत्व देता है।
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग क्या है?
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को एक प्रोग्रामिंग मॉडल के रूप में वर्णित किया जा सकता है जो ऑब्जेक्ट्स की अवधारणाओं पर आधारित है। ऑब्जेक्ट में विशेषताओं के रूप में डेटा और विधियों (मेथड्स) या फंक्शन्स के रूप में कोड हो सकते हैं। उनके दृष्टिकोण में, कंप्यूटर प्रोग्राम आमतौर पर उन वस्तुओं की अवधारणा का उपयोग करके डिज़ाइन किए जाते हैं जो वास्तविक दुनिया के साथ बातचीत करते हैं।
OOP को ऑब्जेक्ट, क्लास, डेटा एनकैप्सुलेशन या डेटा एब्स्ट्रैक्शन, इनहेरिटेंस, पॉलीमॉर्फिज्म या ओवरलोडिंग की मूल अवधारणा पर विकसित किया गया है। OOP में, प्रोग्राम को डेटा और फ़ंक्शंस को विभाजित करके मॉड्यूल में विभाजित किया जा सकता है, जिसे आगे आवश्यकता पड़ने पर मॉड्यूल की नई प्रतियां बनाने के लिए टेम्प्लेट के रूप में उपयोग किया जा सकता है। वहां, यह एक दृष्टिकोण है जो डेटा और फंक्शन्स के लिए एक विभाजित मेमोरी एरिया का निर्माण करके कार्यक्रमों को मॉड्यूलर करने की सुविधा प्रदान करता है।
ऑब्जेक्ट-ओरिएंटेड कॉन्सेप्ट्स
OOPs Concepts
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में उपयोग की जाने वाली अवधारणाएँ निम्नलिखित हैं:
- ऑब्जेक्ट: इसे टाइप क्लास का वेरिएबल और क्लास का इंस्टेंस माना जाता है।
- क्लास: यह समान प्रकार की वस्तुओं का समूह है। किसी ऑब्जेक्ट के डेटा और कोड का एक पूरा सेट एक क्लास का उपयोग करके उपयोगकर्ता द्वारा परिभाषित डेटा प्रकार बनाता है।
- डेटा एब्स्ट्रैक्शन और एनकैप्सुलेशन: एब्स्ट्रैक्शन पृष्ठभूमि के विवरण को छिपाने और आवश्यक विशेषताओं का प्रतिनिधित्व करने की एक विधि है। एनकैप्सुलेशन डेटा और फंक्शन्स को एक इकाई में पैक करने की एक विधि है।
- इनहेरिटेंस: इनहेरिटेंस एक क्लास से दूसरे क्लास की ऑब्जेक्ट्स में ऑब्जेक्ट्स की विशेषताओं को प्राप्त करने की एक तकनीक है। दूसरे शब्दों में, यह मौजूदा क्लास से एक नया क्लास प्राप्त करने में मदद करता है।
- पॉलीमॉरफिस्म: पॉलीमॉरफिस्म एकल फ़ंक्शन नाम का उपयोग करके फ़ंक्शन के कई रूप बनाने की एक विधि प्रदान करता है।
- डायनामिक बाइंडिंग: यह निर्दिष्ट करता है कि किसी विशेष प्रक्रिया से जुड़ा कोड रन टाइम पर कॉल के क्षण तक ज्ञात नहीं होता है।
- मैसेज पासिंग: यह OOP अवधारणा सूचना प्रसारित और प्राप्त करके विभिन्न क्लास के बीच बातचीत को सक्षम बनाता है।
OOPs और प्रक्रियात्मक प्रोग्रामिंग के बीच अंतर
तुलना का आधार | प्रक्रियात्मक प्रोग्रामिंग | ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग |
एप्रोच | ऊपर से नींचे (टॉप डाउन) | नींचे से ऊपर (बॉटम-अप) |
आधार | मुख्य ध्यान इस बात पर है कि कार्य को कैसे पूरा किया जाए। वह किसी प्रोग्राम की प्रक्रिया या संरचना पर होता है। | मुख्य फोकस डेटा सुरक्षा पर है। इस दृष्टिकोण में, केवल ऑब्जेक्ट्स को एक क्लास की संस्थाओं तक पहुँचने की अनुमति है। |
विभाजन | एक बड़े प्रोग्राम को फंक्शन्स नामक इकाइयों में विभाजित किया जाता है। | संपूर्ण प्रोग्राम ऑब्जेक्ट्स में विभाजित होता है। |
एंटिटी एक्सेसिंग मोड | कोई एक्सेस विनिर्देशक नहीं होता है। | एक्सेस विनिर्देशक public, private, और protected हैं। |
ओवरलोडिंग या पॉलीमॉरफिस्म | न तो यह फंक्शन्स और न ही ऑपरेटरों को ओवरलोड करता है। | यह फ़ंक्शन, कंस्ट्रक्टर और ऑपरेटरों को ओवरलोड करता है। |
इनहेरिटेंस (Inheritance) | इनहेरिटेंस का कोई प्रावधान नहीं है। | इनहेरिटेंस तीन प्रकार से हासिल किया जाता है – public, private, और protected। |
डेटा छिपाना और सुरक्षा | डेटा छिपाने का कोई उचित तरीका नहीं है, इसलिए डेटा असुरक्षित है। | डेटा तीन प्रकार से छिपा होता है – public, private, और protected। इसलिए, डेटा सुरक्षा बढ़ जाती है। |
डेटा साझा करना | ग्लोबल डेटा एक प्रोग्राम में फंक्शन्स के बीच साझा किया जाता है। | सदस्य (मेंबर) फंक्शन्स के माध्यम से ऑब्जेक्ट्स के बीच डेटा साझा किया जाता है। |
फ्रेंड फंक्शन्स या फ्रेंड क्लासेज | फ्रेंड फंक्शन्स की कोई अवधारणा नहीं है। | क्लास या फंक्शन किसी अन्य क्लास के फ्रेंड बन सकते हैं। उदाहरण के लिए C++ में कीवर्ड friend का प्रयोग किया जाता है। |
वर्चुअल क्लासेज या वर्चुअल फंक्शन्स | वर्चुअल क्लासेज की कोई अवधारणा नहीं है। | वर्चुअल फ़ंक्शन की अवधारणा इनहेरिटेंस के दौरान प्रकट होती है। |
उदाहरण | C, फोरट्रान, पास्कल, विजुअल बेसिक | C++, जावा, VB.NET |
प्रक्रियात्मक और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के फायदे और नुकसान
प्रक्रियात्मक और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लाभ निम्नलिखित हैं:
प्रक्रियात्मक प्रोग्रामिंग
- विभिन्न स्थानों पर एक ही कोड का पुन: उपयोग करने की क्षमता प्रदान करता है।
- प्रोग्राम प्रवाह को ट्रैक करने की सुविधा प्रदान करता है।
- मॉड्यूल बनाने में सक्षम।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग
- ऑब्जेक्ट परियोजना में कार्य विभाजन में मदद करते हैं।
- डेटा छिपाने (डेटा हाइडिंग) का उपयोग करके सुरक्षित प्रोग्राम बनाए जा सकते हैं।
- यह संभावित रूप से वस्तुओं को मैप कर सकता है।
- ऑब्जेक्ट्स को विभिन्न क्लासेज में वर्गीकृत करने में सक्षम बनाता है।
- ऑब्जेक्ट-ओरिएंटेड सिस्टम को आसानी से अपग्रेड किया जा सकता है।
- इनहेरिटेंस का उपयोग करके निरर्थक कोड को समाप्त किया जा सकता है।
- पुन: प्रयोज्य का उपयोग करके कोड को बढ़ाया जा सकता है।
- अधिक मॉड्यूलरिटी हासिल की जा सकती है।
- डेटा एब्स्ट्रैक्शन विश्वसनीयता बढ़ाता है।
- डायनामिक बाइंडिंग अवधारणा के कारण लचीला।
- सूचना छिपाने का उपयोग करके इसके कार्यान्वयन से आवश्यक विनिर्देश को अलग करता है।
प्रक्रियात्मक और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के नुकसान निम्नलिखित हैं:
प्रक्रियात्मक प्रोग्रामिंग
- ग्लोबल डेटा असुरक्षित होता है।
- किसी प्रोग्राम में डेटा स्थिति को सत्यापित करना कठिन है।
- फंक्शन क्रिया-उन्मुख (एक्शन-ओरिएंटेड) हैं और समस्या के तत्वों से संबंधित नहीं हैं।
- वास्तविक दुनिया की समस्याओं का मॉडल नहीं बनाया जा सकता है।
- कोड के भाग स्वतंत्र होते हैं।
- एक एप्लिकेशन कोड का उपयोग दूसरे एप्लिकेशन में नहीं किया जा सकता है।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग
- इसके लिए अधिक संसाधनों की आवश्यकता होती है।
- ऑब्जेक्ट्स के गतिशील व्यवहार (डायनामिक बेहेवियर) के लिए RAM संग्रहण की आवश्यकता होती है।
- जब संदेश पास किया जाता है तो जटिल अनुप्रयोगों में पता लगाना और डीबग करना कठिन होता है।
- इनहेरिटेंस उनकी क्लासेज को कसकर युग्मित करता है, जो ऑब्जेक्ट्स की पुन: प्रयोज्यता को प्रभावित करता है।
यह ध्यान दिया जा सकता है कि पारंपरिक प्रक्रियात्मक प्रोग्रामिंग प्रतिमान की खामियां ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की आवश्यकता से उत्पन्न होती हैं। OOP ऑब्जेक्ट और क्लास की अवधारणा को पेश करके प्रक्रियात्मक प्रोग्रामिंग की कमियों को ठीक करता है। यह डेटा सुरक्षा और स्वचालित आरंभीकरण (इनिशिअलिज़शन) और ऑब्जेक्ट्स की सफाई को बढ़ाता है। OOP बिना किसी हस्तक्षेप के ऑब्जेक्ट के कई इंस्टेंस बनाना संभव बनाता है।