2010-02-08 21 views
48

मैं बस पुस्तक के माध्यम से पढ़ रहा था और इसमें "एचएएस-ए" और "आईएस-ए" शब्द थे। किसी को पता है कि उनका विशेष अर्थ क्या है? पुस्तक में खोज करने की कोशिश की, लेकिन किताब 600 पृष्ठों लंबी है।एचएएस-ए, ऑब्जेक्ट उन्मुख भाषा में आईएस-ए शब्दावली

+0

आप कौन सी पुस्तक पढ़ रहे थे? –

+0

"इज़-ए" यह विरासत द्वारा कोड का पुन: उपयोग है, "है-ए" - प्रतिनिधिमंडल द्वारा। –

उत्तर

14

Has-a का अर्थ है कि प्रश्न में कक्षा में एक प्रकार का क्षेत्र है।

Is-a का अर्थ है कि कक्षा एक सुपरक्लास से फैली हुई है या एक इंटरफ़ेस लागू करती है। इस मामले में किसी वर्ग के खिलाफ परीक्षण किए जाने पर instanceof ऑपरेटर true वापस करेगा।

49

Car में Wheel है।

Sparrow एक Bird है।

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

+0

क्या उन्हें असली होना है-रिश्ते? मेरा मतलब है कि मेरे पास एक दरवाजा वर्ग है जो गृह वर्ग का विस्तार करता है, लेकिन एक दरवाजा व्यावहारिक रूप से घर नहीं है, लेकिन यह होम क्लास प्रोग्रामेटिक रूप से फैलाता है। –

+3

@ बुराकारकाकुस: फिर यह गलत हो सकता है। ईसा/हासा एक प्रश्न है जिसे आप यह तय करने के लिए कहते हैं कि विरासत सही उत्तर है या नहीं। हो सकता है कि आपके दरवाजे में 'होम' होना चाहिए, न कि 'होम' होना चाहिए। –

6

यह जावा विशिष्ट नहीं है, यह ओओ विशिष्ट है।

आईएस-ए का मतलब है कि आपके पास एक कक्षा हो सकती है जो "एक" है। एक छात्र "आईएस-ए" व्यक्ति की तरह। इसका उपयोग किसी ऑब्जेक्ट को दूसरे के उप-वर्ग के वर्णन के लिए किया जाता है।

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

मैं प्रत्येक का उपयोग कब करने के विवरण में नहीं जाऊंगा, क्योंकि यह इस बात पर निर्भर करता है कि कक्षाओं का उपयोग कैसे किया जा रहा है और यहां तक ​​कि अगर यह ज्ञात है कि विचार करने के लिए बहुत कुछ है, तो एक विशिष्ट मामले के लिए एक नया प्रश्न अधिक उचित होगा ।

+0

और फिर भी 'छात्र आईएस-ए व्यक्ति' जैसी चीजें बहुत ही समस्याग्रस्त होती हैं, उदाहरण के लिए जब छात्र बाद में प्रोफेसर बन जाते हैं। मैं आम तौर पर चीजों की संरचना के आधार पर ओओ समस्याओं पर हमला नहीं करना पसंद करता, बल्कि उनके व्यवहार और डेटा को कैसे बदलता हूं। मैं लगभग उस तरह के संरचनात्मक काम के लिए विरासत का उपयोग नहीं करता, केवल मूल्यों के लिए (एक नाम स्ट्रिंग का एक प्रकार है), या टेम्पलेट कोड का पुन: उपयोग करने के लिए। रचना और एकत्रीकरण के बीच भेद के लिए – kyoryu

4

एक = विशेष प्रकार का उदाहरण है कार विशेष प्रकार का वाहन है।

एक = यह शारीरिक रूप से कुछ है, उदाहरण के लिए कार में एक इंजन है।

119

यह ऑब्जेक्ट उन्मुख प्रोग्रामिंग और यूएमएल शब्दावली है, जावा-विशिष्ट नहीं। वहाँ वास्तव में कर रहे तीन मामलों आप के बारे में पता होना चाहिए:

  1. ए हाउस एक बिल्डिंग (विरासत) है;
  2. ए हाउस में कक्ष (संरचना) है;
  3. ए हाउस में अधिवास (एकत्रीकरण) है।

(2) और (3) के बीच का अंतर सूक्ष्म अभी तक भिन्न होना महत्वपूर्ण है। साथ में वे एसोसिएशन के रूप हैं। क्या फर्क पड़ता है? संरचना का तात्पर्य है कि बाल वस्तु माता-पिता के संदर्भ से बाहर नहीं रह सकती है (घर और कमरे गायब हो जाती है) जबकि एकत्रीकरण का तात्पर्य है कि बच्चा अपने आप अस्तित्व में है (घर को नष्ट कर सकता है और कब्जा कहीं और जाता है)।

+9

+1। कहने का एक और तरीका है एकत्रीकरण एक ढीला रूप संरचना है। – fastcodejava

+0

मुझे लगता है कि एक 'गायब' संबंध है - 'सहयोग करता है।' ऐसा लगता है कि आपकी तीसरी परिभाषा के साथ तुलनात्मक रूप से अच्छी तरह से बढ़ रहा है।परिभाषा 2 और 3 के बीच जो प्राथमिक अंतर मैं देखता हूं वह स्वामित्व में से एक है। – kyoryu

+2

4. ए हाउस ** ** ** इंटरनेट प्रदाता (एसोसिएशन) का उपयोग करता है। –

2

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

+1

उत्परिवर्तनीय संस्थाओं के लिए, 'उपयोग-ए' शायद सबसे महत्वपूर्ण संबंध है, और वह जो कम से कम सोचा जाता है। – kyoryu

3

आईएस-ए, एचएएस-ए आदि वास्तव में बहुत ओओ नहीं हैं। इसके बजाए, Liskov substitution principle ओओ है। हमारे शब्दावली में शब्द "ईसा" crept और तरीका है कि एक शब्द ईसा के द्वारा, यह में crept:

अंकल बॉब http://www.hanselminutes.com/default.aspx?showID=163

रॉबर्ट सी मार्टिन पर ईसा के इतिहास पर प्रकाश डालता है एक सर्किट मार्ग के माध्यम से हमारी शब्दावली और ऑब्जेक्ट उन्मुख सर्कल में बहुत महत्वपूर्ण हो गई, लेकिन यह इस तरह से शुरू नहीं हुआ। यह एआई भीड़ के माध्यम से 80 के दशक में क्रिप्ट हुआ, जिन्होंने इन अद्भुत ज्ञान जाल बनाए थे, आपको शायद यह याद हो सकता है, 80 के दशक के उत्तरार्ध में आर्टिफिशियल इंटेलिजेंस के बारे में सभी प्रचार, 90 के दशक के शुरुआती दिनों में, और फिर इन संरचनाओं को बनाया जो इन अनुमान इंजनों को ज्ञान के साथ चलते थे, और चीजों के साथ संस्थाओं और ज्ञान जाल के बीच संबंध, एक जैसे स्वाद, एक आईएसए की तरह गंध करता है, इनमें से सभी - एक रिश्ते एक जैसा है, एक है और जब एआई भीड़ ने इसे वित्त पोषण खो दिया है, और उन सभी फंडिंग ड्राइव्स, उन्होंने देखा और कहा, "ओह, यह अन्य सामान है, यह बहुत अच्छा है। देखो, इन रिश्तों की तरह चल रहा है और चालू है, यह वास्तव में समान है, हमें बस इसमें जाना चाहिए। " और उन्होंने तरह किया और शब्दावली पर संक्रमण हुआ। यह दिलचस्प है, यह भी थोड़ा दुर्भाग्यपूर्ण है क्योंकि विरासत आईएसए नहीं है। विरासत, यदि आप इसे बहुत ही अजीब आंखों से देखते हैं, तो विरासत एक उप-क्षेत्र में विधियों और चरों की घोषणा है और इसके पास आईएसए के साथ कुछ भी नहीं है, और आईएसए की धारणा बहुत उलझन में हो सकती है। सरल उदाहरण, एक पूर्णांक वास्तविक संख्या है और वास्तविक संख्या एक जटिल संख्या है। आप इसे अपने यूएमएल में आकर्षित कर सकते हैं, यह सभी विरासतों के साथ बहुत आसान होगा, लेकिन इसे संकलित करने की कोशिश करने के बारे में सोचें। एक पूर्णांक जो हम आशा करेंगे कि वह 16 या शायद 64 बिट्स होगा, लेकिन यदि यह वास्तविक संख्या से प्राप्त होता है, तो वास्तविक संख्या में इसमें दो पूर्णांक होते हैं, एक मंटिसा और एक विशेषताओं, एक्सपोनेंट और वे उपयोग करते हैं, उन्होंने उनके अंदर बाइनरी अंक लगाए इन फ़्लोटिंग-पॉइंट नंबर बनाने के लिए। फ़्लोटिंग-पॉइंट नंबर, वास्तविक संख्या, जटिल से निकली है लेकिन परिसर में दो वास्तविक संख्याएं हैं, काल्पनिक और असली हिस्सा। यदि आपको सी ++ या जावा में लिखने के बारे में सोचना था, तो आप एक ऐसी संरचना लिखेंगे जिसे संकलित नहीं किया जा सका क्योंकि इसमें अनंत विचार है। अंग्रेजी में सही समझ में आता है सॉफ्टवेयर में बिल्कुल कोई मतलब नहीं है।

1

"एक है": संबंधित वस्तुओं के बीच संबंध स्थापना की। आप संबंध स्थापित करने के लिए विरासत का उपयोग कर सकते हैं।

"हैस ए": संभावित रूप से असंबंधित वस्तुओं के लिए एक क्षमता परिभाषित करता है। क्षमता को परिभाषित करने के लिए आप इंटरफ़ेस का उपयोग कर सकते हैं।

उदाहरण:

कुत्ता एक जानवर है। यह सीखने की क्षमता है।

मैन पशु नहीं है। वह एक सीखने, सोचने, चढ़ने और लागू करने की क्षमता है।

0

यदि आप "स्कूल" नामक संग्रह कक्षा विकसित करते हैं। आपके पास स्कूल में "शिक्षक" और "छात्र" होंगे। आप एक "व्यक्ति" वर्ग विकसित करते हैं और "छात्र" और "शिक्षक" दोनों "व्यक्ति" वर्ग से उत्तराधिकारी होंगे क्योंकि दोनों "- एक व्यक्ति" हैं। छात्र और शिक्षक दोनों का जन्मदिन होता है। आप "पर्सन क्लास" के अंदर शिक्षक और छात्र "है" या "है" जन्मदिन दोनों के बाद से "डेट क्लास" तैयार करेंगे।यह "कंटेनरशिप" है संक्षेप में "एक व्यक्ति" विरासत का उपयोग करता है "है ए" कंटेनरशिप

1

नामों का बहुत अधिक उपयोग करता है।

एक आईएस-ए वर्ग को विशेष के रूप में माना जा सकता है जो किसी अन्य वर्ग के उदाहरण के संदर्भ में है जो इसके सभी गुणों को प्राप्त करता है।

यदि वाहन नामक एक वर्ग मौजूद है। फिर वाहन के प्रकार इस सुपर-क्लास के गुणों का उत्तराधिकारी हो सकता है। उदाहरण के लिए पुलिस कारवाहन के सभी विशेषताओं का उत्तराधिकारी होगा क्योंकि यह उत्तरार्द्ध का एक विशेषज्ञ है।

enter image description here

दूसरी ओर, एक HAS-एक वर्ग अन्य वर्ग के लिए एक संदर्भ या किसी अन्य वर्ग का एक उदाहरण है। दूसरे शब्दों में, यह एक और कक्षा के साथ एसोसिएशन साझा करता है। दो प्रकार के एचएएस-ए कक्षाएं हैं, एकत्रीकरण जिसका अर्थ है कि कक्षा स्वतंत्र रूप से मौजूद हो सकती है, और संरचना, जिसका अर्थ है कि वर्ग केवल उस व्यक्ति के साथ मौजूद हो सकता है जिसके साथ वह एक सहयोग साझा करता है।

यह जानना महत्वपूर्ण है कि किसी ऑब्जेक्ट को संरचना कक्षा या बस किसी अन्य वर्ग की विशेषता के रूप में वर्गीकृत करना कब महत्वपूर्ण है।

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

जबकि एक इंजन वर्ग करता है, तो एक वाहन वर्ग न के बराबर है मौजूद नहीं कर सकते, क्योंकि इंजनवाहन के दायरे से बाहर नहीं हो सकता।

enter image description here

संबंधित मुद्दे