"हैलो, अमीगो! आज मैं आपके विचार के लिए एक नई और दिलचस्प दुनिया खोलने जा रहा हूं। मैं ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (ओओपी) के बारे में बात कर रहा हूं। आप पहले से ही कक्षाओं और वस्तुओं को जान चुके हैं। आज आप जा रहे हैं उनके बारे में अधिक जानने के लिए, और भी बहुत कुछ।"

हम OOP के चार स्तंभों के साथ आरंभ करेंगे। वे अमूर्तता, एनकैप्सुलेशन, वंशानुक्रम और बहुरूपता हैं। (तीन हुआ करते थे, लेकिन अमूर्त बाद में जोड़ा गया था)

1) अमूर्तन।

वास्तविक जीवन में अमूर्तता का एक अच्छा उदाहरण एक कंपनी में नौकरी का विवरण है। नौकरी का शीर्षक एक बात है, लेकिन उसके कर्तव्य पूरी तरह से अलग मामला है।

कल्पना कीजिए कि आप अपनी भावी कंपनी के लिए संगठन चार्ट बना रहे हैं। आप एक सचिव के कर्तव्यों को विभाजित कर सकते हैं, उन्हें कई अन्य पदों पर फैला सकते हैं। आप सीईओ की नौकरी को कई अलग-अलग पदों में विभाजित कर सकते हैं: मुख्य वित्तीय अधिकारी, मुख्य प्रौद्योगिकी अधिकारी, मुख्य विपणन अधिकारी, मुख्य मानव संसाधन अधिकारी। या आप ऑफिस मैनेजर और रिक्रूटर के पदों को मिलाकर एक कर सकते हैं।

मान लीजिए कि आप अपनी कंपनी में पदों के लिए नाम लेकर आते हैं, और फिर आप इन पदों के लिए जिम्मेदारियों को "खाली" करते हैं। यह अमूर्तता है - कुछ बड़े और अखंड को कई छोटे भागों में विभाजित करना।

ओओपी: मूल सिद्धांत - 1

एक प्रोग्रामर के दृष्टिकोण से, एब्सट्रैक्शन एक प्रोग्राम को वस्तुओं में ठीक से विभाजित कर रहा है।

एक बड़े कार्यक्रम को आमतौर पर एक दर्जन अलग-अलग तरीकों से परस्पर क्रिया करने वाली वस्तुओं के रूप में दर्शाया जा सकता है। एब्सट्रैक्शन आपको किसी वस्तु की मुख्य विशेषताओं को चुनने देता है और कुछ भी कम महत्वपूर्ण छोड़ देता है।

अमूर्तता एक सैन्य रणनीति की तरह है। यदि आप गलत रणनीति चुनते हैं, तो कोई भी सरल रणनीति दिन नहीं बचाएगी।

2) एनकैप्सुलेशन।

एनकैप्सुलेशन का उद्देश्य वस्तुओं को सरल बनाकर उनके बीच परस्पर क्रिया को बेहतर बनाना है।

ओओपी: बुनियादी सिद्धांत - 2

किसी चीज़ को सरल बनाने का सबसे अच्छा तरीका है किसी भी जटिल चीज़ को उन लोगों से छिपाना जिन्हें इसके बारे में जानने की ज़रूरत नहीं है। उदाहरण के लिए, यदि आप बोइंग जेट के पायलट नियंत्रण के पीछे बैठे हैं, तो यह समझने में काफी समय लगेगा कि वे कैसे काम करते हैं:

ओओपी: मूल सिद्धांत - 3

दूसरी ओर, विमान में यात्रियों के लिए सब कुछ सरल दिखता है: वे एक टिकट खरीदते हैं और विमान में चढ़ते हैं, जो तब उड़ान भरता है और उतरता है। आप आसानी से एक महाद्वीप से दूसरे महाद्वीप तक उड़ सकते हैं, केवल यह जानते हुए कि «टिकट कैसे खरीदें» और «विमान में चढ़ें»। हमें विमान को उड़ान के लिए तैयार करने, उड़ान भरने, उतरने और विभिन्न संभावित आपातकालीन स्थितियों से संबंधित किसी भी तरह की जटिलता नहीं दिखती है। और हमने सैटेलाइट नेविगेशन, ऑटोपायलट, और हवाई यातायात नियंत्रण केंद्रों का कोई उल्लेख नहीं किया है। यह हमारे जीवन को सरल बनाता है।

प्रोग्रामिंग के संदर्भ में, एनकैप्सुलेशन "कार्यान्वयन को छिपाना" है। मुझे वह परिभाषा पसंद है। हमारी कक्षा में सैकड़ों विधियाँ हो सकती हैं और विभिन्न स्थितियों में अत्यधिक जटिल व्यवहार को लागू कर सकती हैं। लेकिन हम इसके सभी तरीकों को चुभने वाली आँखों से छिपा सकते हैं (उन्हें « निजी » चिह्नित करके ), अन्य वर्गों के साथ बातचीत के लिए केवल दो या तीन तरीके छोड़कर (उन्हें « सार्वजनिक » चिह्नित करके)। तब हमारे कार्यक्रम में अन्य सभी वर्ग केवल इस वर्ग पर इन कुछ विधियों को देखेंगे और कॉल करेंगे । क्लास की सारी जटिलता अंदर छिपी होगी, जैसे कॉकपिट को खुश यात्रियों की नज़र से रखा जाता है।

3) वंशानुक्रम।

वंशानुक्रम प्रोग्रामिंग और वास्तविक जीवन में एक अवधारणा है। प्रोग्रामिंग में, वंशानुक्रम दो वर्गों के बीच एक विशेष संबंध है। लेकिन वास्तविक जीवन में विरासत कहीं अधिक दिलचस्प है।

यदि हमें वास्तविक जीवन में कुछ बनाने की आवश्यकता है, तो हमारे पास दो विकल्प हैं:

1) वह बनाएं जिसकी हमें शुरुआत से जरूरत है, और इसे करने में बहुत समय और प्रयास करें।

2) पहले से मौजूद चीजों का उपयोग करके हमें जो चाहिए उसे बनाएं।

सबसे अच्छी रणनीति यह है: हम एक मौजूदा अच्छा समाधान लेते हैं, फिर से काम करते हैं और अपनी जरूरतों को पूरा करने के लिए उसमें सुधार करते हैं, और फिर उसका उपयोग करते हैं।

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

इसी तरह, प्रोग्रामिंग में हम एक वर्ग को दूसरे के आधार पर बना सकते हैं। नया वर्ग मौजूदा वर्ग का वंशज (वारिस) बन जाता है। यह बहुत उपयोगी है जब आपके पास पहले से ही एक वर्ग है जिसमें आवश्यक डेटा और विधियों का 80-90% शामिल है। हम केवल एक उपयुक्त वर्ग को अपनी नई कक्षा के जनक के रूप में घोषित करते हैं। मूल वर्ग के सभी डेटा और विधियाँ स्वचालित रूप से नई कक्षा का हिस्सा बन जाती हैं। सुविधाजनक, है ना?

4) बहुरूपता।

बहुरूपता प्रोग्रामिंग अवधारणा है जो उस स्थिति का वर्णन करती है जहां एक ही इंटरफ़ेस के पीछे विभिन्न कार्यान्वयन छिपे हुए हैं। वास्तविक जीवन में एक एनालॉग खोजने के लिए, हम कार चलाने की प्रक्रिया को देख सकते हैं।

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

प्रोग्रामिंग पर लौटें, बहुरूपता हमें एक ही तरह से विभिन्न वर्गों (आमतौर पर एक सामान्य पूर्वज के साथ) की वस्तुओं के साथ बातचीत करने देता है। इसके महत्व पर अधिक जोर नहीं दिया जा सकता है। यह अधिक महत्वपूर्ण हो जाता है क्योंकि एक कार्यक्रम बड़ा हो जाता है।

ओओपी सिद्धांत है। प्रोग्रामिंग कानून। उनमें से प्रत्येक हमें किसी न किसी तरह से प्रतिबंधित करता है , लेकिन कार्यक्रमों के बड़े होने पर बदले में भारी लाभ प्रदान करता है। OOP के चार सिद्धांत कुर्सी के चार पैरों की तरह हैं। यदि आप उनमें से एक को भी हटा देते हैं, तो पूरा सिस्टम अस्थिर हो जाता है।