संघ और निर्भरता के बीच अंतर?


91

एक यूएमएल वर्ग आरेख में, संघ संबंध और निर्भरता संबंध के बीच क्या अंतर है?

मुझे जो पता है, उससे एक निर्भरता की तुलना में एक मजबूत संबंध है, लेकिन मुझे यकीन नहीं है कि यह कैसे मजबूत है।

किसी भी उदाहरण का स्वागत से अधिक होगा :)

जवाबों:


50

निर्भरता और संघ के बीच अंतर क्या है? :

सामान्य तौर पर, आप एक वर्ग में एक क्षेत्र की तरह कुछ का प्रतिनिधित्व करने के लिए एक संघ का उपयोग करते हैं। लिंक हमेशा रहता है, जिसमें आप हमेशा अपने ग्राहक के लिए एक आदेश पूछ सकते हैं। यह वास्तव में एक क्षेत्र होने की आवश्यकता नहीं है, यदि आप अधिक इंटरफ़ेस के दृष्टिकोण से मॉडलिंग कर रहे हैं, तो यह सिर्फ एक विधि की उपस्थिति का संकेत दे सकता है जो ऑर्डर के ग्राहक को वापस कर देगा।

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

...


6
क्यों जवाब दें, जब मार्टिन आपके लिए इतना बेहतर करता है ?! +1
Randolpho

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

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

1
आपका स्पष्टीकरण वास्तविक दुनिया के उदाहरणों से बहुत दूर है, इसलिए इसने सॉफ्टवेयर इंजीनियरों को भी स्पष्ट समझ नहीं दी।
सॉफ्टनिजा

@ सॉफ्टनिजा: आपका मतलब है कि आप समझ नहीं पाए। बाकी सभी को यह स्वीकार्य लगता है। ओह और डाउनवोट के लिए धन्यवाद।
मिच गेहूं

72

एक संघ का लगभग हमेशा यह मतलब होता है कि एक वस्तु में दूसरी वस्तु एक क्षेत्र / संपत्ति / विशेषता (शब्दावली भिन्न) के रूप में होती है।

आम तौर पर एक निर्भरता (लेकिन हमेशा नहीं) का तात्पर्य है कि एक ऑब्जेक्ट किसी अन्य ऑब्जेक्ट को एक विधि पैरामीटर के रूप में स्वीकार करता है, इंस्टेंटिअट्स करता है, या किसी अन्य ऑब्जेक्ट का उपयोग करता है। एक निर्भरता एक संघ द्वारा बहुत अधिक निहित है ।


यह आम तौर पर इस मुद्दे को तय करने के तरीके के सबसे करीब है। यदि अन्य वर्ग मेरी कक्षा के राज्य या व्यवहार के लिए एक महत्वपूर्ण तरीके से योगदान देता है तो यह एक संघ है। इस प्रकार रणनीति कक्षाएं संबद्धता होंगी भले ही उनकी अपनी कोई आंतरिक स्थिति न हो। यदि अन्य वर्ग केवल मेरी कक्षा को एक सेवा प्रदान करता है तो यह एक निर्भरता है।
भयानक ताडपोल

49

OOP शब्दों में:

एसोसिएशन -> ए के पास एक सी वस्तु है (सदस्य चर के रूप में)

निर्भरता -> एक संदर्भ बी (एक विधि पैरामीटर या वापसी प्रकार के रूप में)

public class A {
    private C c;
    public void myMethod(B b) {
        b.callMethod();
    }
}

वहाँ भी एक है और अधिक विस्तृत जवाब


1
@ नारुतो_झुमकी एकत्रीकरण एक पूर्ण-भाग संबंध है। उदाहरण के लिए एक प्लेलिस्ट और गीत। एसोसिएशन, निर्भरता और एकत्रीकरण stackoverflow.com/a/34069760/1998422
अहमद अब्देलघानी

से यूएमएल आसुत द्वारा पुस्तक मार्टिन Fowler : "वर्गों के साथ, निर्भरता विभिन्न कारणों के लिए मौजूद हैं: एक वर्ग दूसरे करने के लिए एक संदेश भेजता है, एक वर्ग अपने डेटा के हिस्से के रूप में एक और है, एक वर्ग एक ऑपरेशन के लिए एक पैरामीटर के रूप में एक और का उल्लेख है"
अहमद Abdelghany

24

निर्भरता तब होती है जब आप एक ऐसी विधि को परिभाषित करते हैं जो एक पैरामीटर के रूप में स्ट्रिंग (जावा, सी # में, जैसा कि स्ट्रिंग एक ऑब्जेक्ट है) लेता है, तो आपकी कक्षा स्ट्रिंग कक्षा पर निर्भर है।

एसोसिएशन ऐसा है जब आप अपनी कक्षा में एक विशेषता के रूप में एक स्ट्रिंग की घोषणा करते हैं। तब आपका कोड स्ट्रिंग क्लास से जुड़ा होता है।

String name = null //: is a association.

"एसोसिएशन तब होता है जब आप अपनी कक्षा में एक स्ट्रिंग को एक विशेषता के रूप में घोषित करते हैं। तब आपका कोड स्ट्रिंग वर्ग से जुड़ा होता है।" यदि ऐसा है, तो संघ और रचना में क्या अंतर है?
डीन पी

16

निर्भरता - एक वर्ग में परिवर्तन निर्भर वर्ग में परिवर्तन को प्रभावित करता है। उदाहरण- सर्कल शेप (एक इंटरफ़ेस) पर निर्भर है। यदि आप आकार बदलते हैं, तो यह सर्कल को भी प्रभावित करता है। तो, सर्कल का आकार पर निर्भरता है।

एसोसिएशन - मतलब 2 वस्तुओं के बीच एक निश्चित संबंध है

(एक-एक, एक-कई, कई-कई)

एसोसिएशन 2 प्रकार का होता है-

  1. रचना
  2. एकत्रीकरण

    1) संरचना - मजबूत एसोसिएशन या 2 वस्तुओं के बीच संबंध। आप किसी अन्य वर्ग A के अंदर एक वर्ग B का एक ऑब्जेक्ट बना रहे हैं

 public class A {
       B b;
       public void setB(){
         this.b= new B();
        }
     }

यदि हम कक्षा A को हटाते हैं, तो B मौजूद नहीं होगा (B ऑब्जेक्ट केवल A के अंदर बनाया गया है)।

एक और उदाहरण-बॉडी और लीवर। लिवर बॉडी के बाहर मौजूद नहीं हो सकता।

2) एकत्रीकरण - 2 वस्तुओं के बीच कमजोर प्रकार की एसोसिएशन

public class A {       
             B b;
             public void setB(B b_ref){
                 this.b= b_ref;   
                /* object B is passed as an argument of a method */
              }
   }

यहां तक ​​कि अगर आप क्लास ए को हटाते हैं, तो बी बाहर मौजूद होगा (बी बाहर बनाया गया है और क्लास ए से पास किया गया है)

इसका एक और उदाहरण है- मैन एंड कार। आदमी के पास एक कार है लेकिन मैन एंड कार स्वतंत्र रूप से मौजूद है।


निर्भरता स्थानीय गुंजाइश है, जहां एसोसिएशन वर्ग गुंजाइश है।
डिंपियाक्स

10

यहाँ: "एसोसिएशन बनाम निर्भरता बनाम एकत्रीकरण बनाम रचना" , आपके पास उम्म क्लास डायग्राम और कोड स्निपेट्स के साथ एक शानदार वेड मेकम है। लेखक हमें रिश्तों की एक सूची देता है: एक स्थान पर एसोसिएशन, निर्भरता, एकत्रीकरण, रचना।


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

1
पहला प्रश्न जो आपकी टिप्पणी को पढ़ते समय ध्यान में आया: संघ के मामले में - कोई वस्तु का संदर्भ क्यों रखेगा और उसका उपयोग नहीं करेगा? क्या आपका मतलब यह है कि संदर्भ केवल एक क्षेत्र है, केवल एक ग्राहक के संदर्भ के बारे में जानना चाहता है तो वापस लौटाया जाए?
एच। राबी

3

एक निर्भरता बहुत सामान्य है और जटिलता को कम करना अधिक से अधिक निर्भरता को कम करना है।

एक संघ एक मजबूत (स्थिर) निर्भरता है। एकत्रीकरण और संरचना और भी मजबूत हैं।


-1

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

class User
  has_one :profile
end

user = User.first
profile = user.profile
profile.sign_out

इसका मतलब है कि आप उपयोगकर्ता से एक प्रोफ़ाइल ऑब्जेक्ट प्राप्त कर सकते हैं, लेकिन उपयोगकर्ता अपने अंदर प्रोफ़ाइल के तरीकों का उपयोग नहीं करते हैं (प्रोफ़ाइल के इंटरफ़ेस पर कोई निर्भरता नहीं है)।

निर्भरता का अर्थ है कि उपयोगकर्ता के पास किसी अन्य ऑब्जेक्ट से लिंक है और उस ऑब्जेक्ट के तरीकों को अपने अंदर बुलाएं

class User
  has_one :profile

  def personal_info
    profile.info
  end
end

यहाँ अगर प्रोफाइल की जानकारी विधि बदली जाएगी या नाम बदलकर हमारे निर्भर उपयोगकर्ता वर्ग को भी बदलना होगा।


क्या आप कृपया बता सकते हैं कि आपको यह जानकारी कहाँ से मिली है? मुझे नहीं लगता कि यूएमएल चश्मा में एक नियम है जो कहता है कि एक पक्ष का एक पक्ष दूसरे पक्ष के तरीकों का उपयोग नहीं करता है। सामान्य तौर पर एक संघ एक निर्भरता से अधिक मजबूत संबंध है।
गीर्ट बेलेकेंस

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

मुझे डर है कि आपकी व्यक्तिगत समझ है, लेकिन यह नहीं कि यह यूएमएल चश्मा में कैसे वर्णित है। यूएमएल 2.5 .4 7.8.4.1 से: एक निर्भरता एक रिश्ता है जो दर्शाता है कि एकल मॉडल तत्व या मॉडल तत्वों के एक सेट को उनके विनिर्देश या कार्यान्वयन के लिए अन्य मॉडल तत्वों की आवश्यकता होती है। इसका मतलब यह है कि क्लाइंटएमेंट (एस) का पूरा शब्दार्थ या तो शब्दार्थ या संरचनात्मक रूप से आपूर्तिकर्ता तत्व (एस) की परिभाषा पर निर्भर है।
गीर्ट बेलेकेंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.