मुझे लगता है कि आपको लीक से हटकर उपयोगी सार पर मेरा एक ब्लॉग पोस्ट मिल सकता है। यहाँ प्रासंगिक पृष्ठभूमि है:
अमूर्तता एक तंत्र है जो संबंधित कार्यक्रम के टुकड़ों के सेट के बीच आम है, अपने मतभेदों को दूर करने में मदद करता है, और प्रोग्रामरों को उस अमूर्त अवधारणा का प्रतिनिधित्व करने वाले निर्माण के साथ सीधे काम करने में सक्षम बनाता है। इस नए निर्माण (लगभग) हमेशा की तरह ही parameterizations निर्माण के उपयोग के अपने विशिष्ट आवश्यकताओं के अनुसार अनुकूलित करने के लिए एक साधन:।
उदाहरण के लिए, एक List
वर्ग एक लिंक्ड-लिस्ट कार्यान्वयन के विवरण को दूर कर सकता है - जहां जोड़-तोड़ next
और previous
संकेत के संदर्भ में सोचने के बजाय , आप एक अनुक्रम में मूल्यों को जोड़ने या हटाने के स्तर पर सोच सकते हैं। अमूर्त, आदिम अवधारणाओं के बहुत छोटे सेट से उपयोगी, समृद्ध और कभी-कभी जटिल सुविधाओं को बनाने के लिए एक आवश्यक उपकरण है।
एब्सट्रैक्शन एन्कैप्सुलेशन और मॉड्युलैरिटी से संबंधित है, और इन अवधारणाओं को अक्सर गलत समझा जाता है।
में List
उदाहरण के लिए, कैप्सूलीकरण किसी लिंक किए गए-सूची के कार्यान्वयन विवरण छिपाने के लिए किया जा सकता है; उदाहरण के लिए, ऑब्जेक्ट-ओरिएंटेड भाषा में, आप next
और previous
पॉइंटर्स को निजी बना सकते हैं , जहाँ केवल इन क्षेत्रों में सूची कार्यान्वयन की अनुमति है।
गर्भपात के लिए एनकैप्सुलेशन पर्याप्त नहीं है, क्योंकि यह जरूरी नहीं है कि आपके पास निर्माणों की एक नई या अलग अवधारणा है। यदि सभी List
वर्ग ने आपको ' getNext
' / ' setNext
' स्टाइल एक्सेसर मेथड दिया था, तो यह कार्यान्वयन विवरणों से आपसे अलग हो जाएगा (उदाहरण के लिए, आपने फ़ील्ड को ' prev
' या ' previous
' नाम दिया था? इसका स्थैतिक प्रकार क्या था?), लेकिन यह अमूर्तता की बहुत कम डिग्री होगी।
मॉड्युलैरिटी का संबंध सूचना छिपाने से है : स्थिर गुण एक इंटरफ़ेस में निर्दिष्ट होते हैं, और एक मॉड्यूल उस इंटरफ़ेस को लागू करता है, जो मॉड्यूल के भीतर सभी कार्यान्वयन विवरण रखता है। मॉड्यूलरिटी प्रोग्रामर को बदलाव से निपटने में मदद करती है, क्योंकि अन्य मॉड्यूल केवल स्थिर इंटरफ़ेस पर निर्भर करते हैं।
जानकारी छिपाना एन्कैप्सुलेशन द्वारा सहायता प्राप्त है (ताकि आपका कोड अस्थिर कार्यान्वयन विवरणों पर निर्भर न हो), लेकिन प्रतिरूपकता के लिए एनकैप्सुलेशन आवश्यक नहीं है। उदाहरण के लिए, यदि आप एक को लागू कर सकते List
सी में संरचना, 'उजागर next
' और ' prev
दुनिया के लिए' संकेत दिए गए, लेकिन यह भी एक इंटरफेस प्रदान, युक्त initList()
, addToList()
औरremoveFromList()
कार्य करता है। बशर्ते कि इंटरफ़ेस के नियमों का पालन किया जाता है, आप गारंटी दे सकते हैं कि कुछ गुण हमेशा पकड़ लेंगे, जैसे कि डेटा-संरचना हमेशा एक मान्य स्थिति में है। [उदाहरण के लिए पारनस का क्लासिक पेपर, उदाहरण के लिए, विधानसभा में एक उदाहरण के साथ लिखा गया था। इंटरफ़ेस एक अनुबंध और डिजाइन के बारे में संचार का एक रूप है, यह जरूरी नहीं कि यंत्रवत् जाँच की जानी चाहिए, हालांकि यही आज के लिए निर्भर है।]
हालांकि सार, मॉड्यूलर और एन्कैप्सुलेटेड जैसे शब्द सकारात्मक डिजाइन विवरण के रूप में उपयोग किए जाते हैं, यह महसूस करना महत्वपूर्ण है कि इनमें से किसी भी गुण की उपस्थिति स्वचालित रूप से आपको अच्छा डिजाइन नहीं देती है:
यदि n ^ 3 एल्गोरिथ्म "अच्छी तरह से समझाया गया है" तो यह अभी भी एक बेहतर एन लॉग एन एल्गोरिथम से भी बदतर प्रदर्शन करेगा।
यदि कोई इंटरफ़ेस किसी विशिष्ट ऑपरेटिंग सिस्टम पर जाता है, तो मॉड्यूलर डिज़ाइन के लाभों में से किसी को भी महसूस नहीं किया जाएगा, जब एक वीडियो गेम को विंडोज से आईपैड में पोर्ट करने की आवश्यकता होती है।
यदि बनाई गई अमूर्तता बहुत सारे अशुभ विवरणों को उजागर करती है, तो यह अपने स्वयं के संचालन के साथ एक नया निर्माण करने में विफल रहेगी: यह बस उसी चीज के लिए एक और नाम होगा।