OOP में 'अमूर्त' की परिभाषा के बारे में उलझन


16

मैं OOP में 'अमूर्तता' की परिभाषा को समझने की कोशिश कर रहा हूं।

मैं कुछ मुख्य परिभाषाओं में आया हूं। क्या वे सभी वैध हैं? क्या उनमें से एक गलत है? मैं उलझन में हूं। (मैंने अपने शब्दों के साथ परिभाषा को फिर से लिखा)।

परिभाषा 1:

अमूर्तन वास्तविक दुनिया से कुछ वस्तु लेने और इसे प्रोग्रामिंग शब्दों में परिवर्तित करने की अवधारणा है। इस तरह के एक बनाने के रूप में Humanवर्ग और यह दे रही है int health, int age, String name, आदि गुण, और eat()आदि तरीकों।

परिभाषा 2:

एक अधिक सामान्य परिभाषा। अमूर्तता एक अवधारणा है जो एक सॉफ्टवेयर सिस्टम में कहीं भी होती है जहां 'चीजों को अधिक सामान्य / सरल / अमूर्त' बनाना शामिल है। कुछ उदाहरण:

  • एक वंशानुक्रम पदानुक्रम, जहां उच्च वर्ग सरल या अधिक सामान्य होते हैं, और अधिक सामान्य और अमूर्त कार्यान्वयन को परिभाषित करते हैं। जबकि पदानुक्रम में निम्न वर्ग अधिक ठोस होते हैं और अधिक विस्तृत कार्यान्वयन को परिभाषित करते हैं।

  • अन्य वर्गों से एक वर्ग के कार्यान्वयन के विवरण को छिपाने के लिए इनकैप्सुलेशन का उपयोग करना, इस प्रकार कक्षा को बाहरी सॉफ़्टवेयर दुनिया के लिए और अधिक 'सार' (सरल) बनाना।

परिभाषा ३

एक अन्य सामान्य परिभाषा: अमूर्तता, चीजों के प्रकारों (अर्थात कक्षाओं) के विवरणों और ठोस कार्यान्वयन से ध्यान हटाने की अवधारणा है, जो उपलब्ध संचालन (अर्थात विधियाँ), आदि, इस प्रकार प्रोग्रामिंग को सरल, अधिक सामान्य, आदि बनाते हैं। और अधिक सार। (यह सॉफ्टवेयर सिस्टम में कहीं भी और किसी भी संदर्भ में हो सकता है)। यह एन्कैप्सुलेट करते समय उदाहरण के लिए होता है, क्योंकि एनकैप्सुलेशन का मतलब कार्यान्वयन के विवरणों को छिपाना है और केवल चीजों के प्रकार और उनकी अधिक सामान्य और अमूर्त परिभाषाओं को दिखाना है। Anotehr उदाहरण Listजावा में किसी ऑब्जेक्ट का उपयोग कर रहा होगा । यह ऑब्जेक्ट वास्तव में ArrayLista या a के कार्यान्वयन विवरण का उपयोग करता है LinkedList, लेकिन यह जानकारी अधिक सामान्य नाम का उपयोग करके अमूर्त है List

क्या इनमें से कोई भी परिभाषा सही है? (मैं सबसे पारंपरिक और स्वीकृत परिभाषा की बात कर रहा हूं )।


अमूर्तता एक "चीज़" को एक निश्चित प्रकार की चीज़ (पशु => कुत्ता) होने के लिए परिभाषित कर रही है ताकि इसे और भी संकीर्ण किया जा सके (डॉग => पूडल)।
क्रिस्टीन

जवाबों:


22

एब्स्ट्रेक्शन ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (ओओपी) के 3 स्तंभों में से एक है। इसका शाब्दिक अर्थ किसी प्रणाली या संदर्भ में किसी विशेष दृष्टिकोण से एक इकाई को समझना है। हम अनावश्यक विवरण निकालते हैं और केवल उन पहलुओं पर ध्यान केंद्रित करते हैं जो विचार के तहत उस संदर्भ या प्रणाली के लिए आवश्यक हैं।

यहाँ कुछ अच्छी व्याख्या है:

आप एक व्यक्ति के रूप में विभिन्न भूमिकाओं में अलग-अलग रिश्ते रखते हैं। जब आप स्कूल में होते हैं, तो आप एक "छात्र" होते हैं । जब आप काम पर होते हैं, तो आप एक "कर्मचारी" होते हैं । जब आप सरकारी संस्थान में होते हैं, तो आपको "नागरिक" के रूप में देखा जा सकता है । इसलिए यह उबलता है कि हम किस संदर्भ में एक इकाई / वस्तु को देख रहे हैं। इसलिए यदि मैं पेरोल सिस्टम का मॉडलिंग कर रहा हूं, तो मैं आपको एक कर्मचारी (PRN, फुल टाइम / पार्ट टाइम, डिज़ाइनर) के रूप में देखूंगा । यदि मैं एक कोर्स एनरोलमेंट सिस्टम को मॉडलिंग कर रहा हूं, तो मैं आपके पहलुओं और विशेषताओं को एक छात्र (रोल नंबर, आयु, लिंग, पाठ्यक्रम के अनुसार) के रूप में मानूंगा । और अगर मैं एक सामाजिक सुरक्षा सूचना प्रणाली मॉडलिंग कर रहा हूँफिर मैं आपके विवरण को एक नागरिक के रूप में देखूंगा (जैसे DOB, लिंग, जन्म का देश, आदि)

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

पहली डी बहुत स्पष्ट नहीं है। Def 2 अच्छा है लेकिन यह नौसिखिया को भ्रमित करने के लिए जाता है क्योंकि यह Abstraction को Encapsulation और Inheritance के साथ जोड़ने की कोशिश करता है। Def 3, 3 परिभाषाओं में से सबसे अच्छा एक है क्योंकि यह स्पष्ट रूप से परिभाषित करता है कि क्या Abstraction ठीक है।


3
तो आप कहेंगे कि यह विनिर्देशन के बजाय सामान्यीकरण जैसा है?
रॉबर्ट रोचा

1
@samyismyhero बिल्कुल! हम अमूर्तता के लिए सामान्य विशेषताओं और वस्तुओं के व्यवहार की तलाश करते हैं।
41 बजे मैक्स

[पशु => कुत्ता] एक अमूर्तन है। आप परिभाषित करते हैं कि "डॉग" बनाने के लिए "पशु" के कौन से संभावित हिस्से हो सकते हैं। (पूंछ, पैर, फर, आदि)। फिर, आप पुडल, पिट बुल आदि को परिभाषित करने के लिए "डॉग" क्लास का उपयोग कर सकते हैं, इसलिए, आप "डॉग" क्लास पर आधारित "डॉग" के बजाय डॉग नस्लों की घोषणा कर रहे हैं।
क्रिस्टीन

3

परिभाषा 1 निश्चित रूप से अमूर्त नहीं है। यह मॉडलिंग का अधिक बारीकी से वर्णन करता है

परिभाषाएँ 2 और 3 एक ही बात का वर्णन करती हैं। और दोनों एक अमूर्त के बहुत अच्छे वर्णन हैं।


बिल्कुल यही मैने सोचा! abstract class Shapeजबरदस्त हंसी!
रॉबर्ट रोचा

2

इनमें से प्रत्येक परिभाषा ठीक है।

अमूर्त वह जगह है जहाँ आप केवल उन विवरणों पर ध्यान केंद्रित करते हैं जो आपके उद्देश्य के लिए महत्वपूर्ण हैं।

पहले मामले में, आप (वर्तमान में) अपने कोड में वास्तविक लोगों को शामिल नहीं कर सकते हैं; आप एक व्यक्ति के विशेष विवरण पर ध्यान केंद्रित करते हैं जो आपके उद्देश्य की सेवा करता है। एक अन्य कार्यक्रम में आपको विभिन्न विवरणों पर ध्यान केंद्रित करने की आवश्यकता हो सकती है। ये एक व्यक्ति के विभिन्न सार होंगे, और प्रत्येक उनके संदर्भ में समान रूप से मान्य हो सकता है

दूसरी और तीसरी परिभाषा इस विचार को जारी रखती है, इसे सॉफ्टवेयर संस्थाओं के लिए लागू करना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.