2011-11-03 10 views
6

में सार कक्षा बनाम इंटरफेस की वास्तविक दुनिया अवधारणा प्राप्त करने का प्रयास कर मैंने कई एस/ओ पोस्टिंग के माध्यम से खोज की है और मुझे कोई जवाब नहीं मिला है जो मेरी मदद करता है।
मैं एक अमूर्त वर्ग और इंटरफ़ेस क्या है, इसकी मानसिक दृष्टि प्राप्त करना चाहता हूं। मैंने इस पोस्ट Real world abstract class usage simple samples के माध्यम से पढ़ा है, लेकिन मैं अभी भी अवधारणाओं के बारे में स्पष्ट नहीं हूं।एएसपीनेट

मुझे उम्मीद है कि कोई व्यक्ति "व्यक्ति" वस्तु के रूप में वास्तविक दुनिया का वर्णन कर सकता है। तो विरासत होगा "व्यक्ति" -> "कर्मचारी" -> "प्रबंधक"
और अधिभावी "कर्मचारी का वेतन" बन जाएगा "बिक्री कर्मचारी आयोग"

मैं एक अमूर्त वर्ग का वर्णन किस प्रकार कर सकते हैं हो सकता है और एक एक व्यक्ति वस्तु अवधारणा के भीतर इंटरफ़ेस?

उत्तर

9

एक इंटरफेस बनाम अमूर्त वर्ग का उपयोग करने के विषय पर अलग-अलग विचार हैं। एक इंटरफेस, हालांकि, किसी ऑब्जेक्ट के व्यवहार को व्यक्त करना चाहिए (यह क्या कर सकता है) और अमूर्त वर्ग को यह परिभाषित करना चाहिए कि यह क्या है। मूल रूप से "मैं कर सकता हूं" बनाम "मैं हूं" वस्तु के परिप्रेक्ष्य से।

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

आपके द्वारा परिभाषित रिश्तों का उपयोग (व्यक्ति -> कर्मचारी -> प्रबंधक), हम कह सकते हैं कि कर्मचारी IFirable लागू करता है और प्रबंधक IFirer लागू करता है। कर्मचारी को निकाल दिया जा सकता है, और प्रबंधक एक कर्मचारी को आग लगा सकता है।

+0

अच्छा सादृश्य। क्या आप कह रहे हैं कि व्यक्ति एक अमूर्त वर्ग है? – DotNetRookie

+1

@DotNetCookie - मैं वास्तव में हाँ या नहीं कहना चाहता हूं। यह सब इस बात पर निर्भर करता है कि आप किस समस्या को हल करने की कोशिश कर रहे हैं। यदि आपको "सादे" व्यक्ति वस्तु को तुरंत चालू करने में सक्षम होना आवश्यक है, तो इससे अधिक समझ नहीं आएगी। इस मामले में (व्यक्ति -> कर्मचारी -> प्रबंधक) आधार वर्ग, व्यक्ति, सार बनाने के लिए यह समझ में आ सकता है। –

+1

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

4

मैं क्षमा चाहता हूं कि मैं आपके व्यक्ति का उदाहरण नहीं उपयोग कर रहा हूं, कृपया इसे केवल एक विस्तृत टिप्पणी के रूप में लें।

मुझे कुछ प्रोग्रामिंग पृष्ठभूमि वाले लोगों के लिए अवधारणाओं को समझाने में सबसे आसान लगता है, जो कुछ लोगों को पहले से ही समझ में आता है: प्लास्टिक मोल्डिंग!

चलें कहते हैं कि हम उदाहरण के लिए प्लास्टिक फल बना रहे हैं:

ढालना की तरह

एक इंटरफेस है, यह अंतिम उत्पाद के आकार है, लेकिन आप अलग अलग रंग और सामग्री के सभी प्रकार के साथ इसे भर सकते हैं। वे सभी अंत में एक ही आकार में होंगे, भले ही वे रंग और बनावट में पूरी तरह अलग हों।

एक अमूर्त वर्ग कुछ ऐसी चीज की तरह होगा जो पेंटिंग की तरह अतिरिक्त कदम की आवश्यकता हो। आप मूल प्लास्टिक के फल बनाते हैं, फिर इसे कुछ पेंटिंग या फर पर चिपकने के लिए भेज दिया जाता है।

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

मुझे उम्मीद है कि इससे मदद मिलती है!

4

ठीक है,

मैं अपने conceptaully मतभेद और/या इंटरफेस और अमूर्त वर्गों के उपयोग के बीच समानता के बारे में अनिश्चित लगता है कि अगर मैं अपने प्रश्न समझ में आ आइए देखते हैं ...।यदि यह मुद्दा है तो मेरा "स्टार्टर 10 के लिए सारांश" है;

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

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

यह भी ध्यान रखें कि कई भाषाओं में (जावा, सी #, डेल्फी) आप केवल एक अभिभावक वर्ग से प्राप्त कर सकते हैं, लेकिन कई इंटरफेस लागू कर सकते हैं।