आपके ब्लॉग से, ऐसा लगता है कि आप अनिवार्य और कार्यात्मक दोनों प्रोग्रामिंग से परिचित हैं, और आप ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में शामिल बुनियादी अवधारणाओं से परिचित हैं, लेकिन आपने वास्तव में इसे कभी भी "क्लिक" नहीं किया है इसे उपयोगी बनाता है। मैं उस ज्ञान के संदर्भ में समझाने की कोशिश करूंगा, और आशा करता हूं कि यह आपके लिए उपयोगी है।
इसके मूल में, OOP समस्या वाले डोमेन को मॉडल करने वाले "स्मार्ट" डेटा संरचनाओं को बनाकर जटिलता के उच्च डिग्री को बेहतर ढंग से प्रबंधित करने के लिए अनिवार्य प्रतिमान का उपयोग करने का एक तरीका है। एक मानक (मानक प्रक्रियात्मक गैर-वस्तु-उन्मुख) कार्यक्रम में, आपको दो बुनियादी चीजें मिली हैं: चर, और कोड जो जानते हैं कि उनके साथ क्या करना है। कोड उपयोगकर्ता और विभिन्न अन्य स्रोतों से इनपुट लेता है, इसे चर में संग्रहीत करता है, उस पर काम करता है, और आउटपुट डेटा पैदा करता है जो उपयोगकर्ता या विभिन्न अन्य स्थानों पर जाता है।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग आपके प्रोग्राम को उस मूल पैटर्न को सरल बनाने और इसे छोटे पैमाने पर दोहराने का एक तरीका है। जैसे एक प्रोग्राम कोड के साथ डेटा का एक बड़ा संग्रह है जो जानता है कि इसके साथ क्या करना है, प्रत्येक ऑब्जेक्ट कोड से जुड़ा डेटा का एक छोटा सा टुकड़ा है जो जानता है कि इसके साथ क्या करना है।
समस्या डोमेन को छोटे टुकड़ों में तोड़कर और यह सुनिश्चित करने के लिए कि जितना संभव हो उतना डेटा सीधे कोड के लिए बाध्य है, जो जानता है कि इसके साथ क्या करना है, आप इसे पूरी प्रक्रिया के बारे में और उप के बारे में भी तर्क करना बहुत आसान बनाते हैं। समस्याएँ जो प्रक्रिया बनाती हैं।
डेटा को ऑब्जेक्ट कक्षाओं में समूहित करके, आप उस डेटा से संबंधित कोड को केंद्रीकृत कर सकते हैं, जिससे संबंधित कोड को ढूंढना और डीबग करना दोनों आसान हो जाता है। और एक्सेस स्पेसर्स के पीछे डेटा को इनकैप्सुलेट करके और केवल विधियों के माध्यम से इसे एक्सेस करके, (या प्रॉपर्टीज़, यदि आपकी भाषा उन्हें सपोर्ट करती है), तो आप डेटा भ्रष्टाचार या अनियंत्रकों के उल्लंघन की क्षमता को बहुत कम कर देते हैं।
और विरासत और बहुरूपता का उपयोग करके, आप अपनी विशिष्ट आवश्यकताओं को पूरा करने के लिए, या तो मूल को संशोधित किए बिना या जमीन से सब कुछ फिर से लिखने के लिए, उन्हें कस्टमाइज़िंग कक्षाओं का पुन: उपयोग कर सकते हैं। (जो एक ऐसी चीज है जिसे आपको कभी नहीं करना चाहिए , अगर आप इससे बच सकते हैं।) बस सावधान रहें कि आप अपनी आधार वस्तु को समझें, या आप हत्यारे कंगारुओं के साथ समाप्त हो सकते हैं ।
मेरे लिए, ये ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के मूल सिद्धांत हैं: जटिलता प्रबंधन, कोड केंद्रीकरण और समस्या वर्गों, विरासत और बहुरूपता के निर्माण के माध्यम से समस्या-डोमेन मॉडलिंग, और एन्कैप्सुलेशन के उपयोग के माध्यम से शक्ति या नियंत्रण के बिना सुरक्षा में वृद्धि। गुण। मुझे आशा है कि इससे आपको यह समझने में मदद मिलेगी कि इतने सारे प्रोग्रामर इसे उपयोगी क्यों मानते हैं।
EDIT: टिप्पणियों में जोएल के सवाल के जवाब में,
क्या आप बता सकते हैं कि एक "ऑब्जेक्ट-ओरिएंटेड प्रोग्राम" में क्या है (इन फैंसी डिफ्रैंट्स के अलावा जो आपने रेखांकित किया है) जो मूल रूप से एक अनिवार्य प्रोग्राम से अलग है? आप "गेंद को कैसे लुढ़काते हैं?"
यहाँ एक छोटा सा अस्वीकरण। "ऑब्जेक्ट-ओरिएंटेड प्रोग्राम" का मेरा मॉडल मूल रूप से डेल्फी मॉडल है, जो कि पूर्व डेल्फी टीम के सदस्यों द्वारा बनाए जाने के बाद से सी # / NET मॉडल के समान है। मैं जो यहां कह रहा हूं वह अन्य OO भाषाओं में लागू नहीं हो सकता है, या उतना लागू नहीं हो सकता है।
ऑब्जेक्ट-ओरिएंटेड प्रोग्राम वह है जिसमें सभी लॉजिक को ऑब्जेक्ट के आसपास संरचित किया जाता है। बेशक यह कहीं बूटस्ट्रैप होना है। आपके विशिष्ट डेल्फी कार्यक्रम में आरंभीकरण कोड होता है जो एक सिंगलटन ऑब्जेक्ट बनाता है जिसे कहा जाता है Application
। कार्यक्रम की शुरुआत में, यह कॉल करता है Application.Initialize
, फिर Application.CreateForm
हर फॉर्म के लिए एक कॉल जिसे आप शुरुआत से मेमोरी में लोड करना चाहते हैं, और फिर Application.Run,
जो स्क्रीन पर मुख्य फॉर्म प्रदर्शित करता है और इनपुट / ईवेंट लूप शुरू करता है जो किसी का मूल बनाता है इंटरैक्टिव कंप्यूटर प्रोग्राम।
एप्लिकेशन और आपके फ़ॉर्म ओएस से आने वाली घटनाओं के लिए सर्वेक्षण करते हैं और उन्हें अपनी वस्तु पर विधि कॉल में अनुवाद करते हैं। एक चीज जो बहुत सामान्य है वह है ईवेंट-हैंडलर, या "डेलीगेट्स" का .NET में बात करना। एक ऑब्जेक्ट में एक विधि है जो कहती है, "एक्स और वाई करें, लेकिन यह भी देखने के लिए जांचें कि क्या यह विशेष ईवेंट हैंडलर सौंपा गया है, और यदि यह है तो इसे कॉल करें।" ईवेंट हैंडलर एक विधि सूचक है - एक बहुत ही सरल क्लोजर जिसमें विधि का संदर्भ और ऑब्जेक्ट उदाहरण का संदर्भ होता है - जिसका उपयोग वस्तुओं के व्यवहार को बढ़ाने के लिए किया जाता है। उदाहरण के लिए, यदि मेरे फॉर्म में एक बटन ऑब्जेक्ट है, तो मैं ऑनक्लिक ईवेंट हैंडलर संलग्न करके इसके व्यवहार को अनुकूलित करता हूं, जो बटन क्लिक होने पर किसी अन्य ऑब्जेक्ट को किसी विधि को निष्पादित करने का कारण बनता है।
तो एक वस्तु-उन्मुख कार्यक्रम में, अधिकांश कार्य कुछ जिम्मेदारियों के साथ वस्तुओं को परिभाषित करने और उन्हें एक साथ जोड़ने के द्वारा किया जाता है, या तो विधि बिंदुओं के माध्यम से या किसी वस्तु द्वारा सीधे किसी अन्य वस्तु के सार्वजनिक इंटरफ़ेस में परिभाषित विधि को कॉल करके। (और अब हम वापस एनकैप्सुलेशन के लिए आ रहे हैं।) यह एक विचार है कि कॉलेज में ओओपी कक्षाएं लेने से पहले मुझे कोई अवधारणा नहीं थी।