एक यूएमएल वर्ग आरेख में, संघ संबंध और निर्भरता संबंध के बीच क्या अंतर है?
मुझे जो पता है, उससे एक निर्भरता की तुलना में एक मजबूत संबंध है, लेकिन मुझे यकीन नहीं है कि यह कैसे मजबूत है।
किसी भी उदाहरण का स्वागत से अधिक होगा :)
जवाबों:
निर्भरता और संघ के बीच अंतर क्या है? :
सामान्य तौर पर, आप एक वर्ग में एक क्षेत्र की तरह कुछ का प्रतिनिधित्व करने के लिए एक संघ का उपयोग करते हैं। लिंक हमेशा रहता है, जिसमें आप हमेशा अपने ग्राहक के लिए एक आदेश पूछ सकते हैं। यह वास्तव में एक क्षेत्र होने की आवश्यकता नहीं है, यदि आप अधिक इंटरफ़ेस के दृष्टिकोण से मॉडलिंग कर रहे हैं, तो यह सिर्फ एक विधि की उपस्थिति का संकेत दे सकता है जो ऑर्डर के ग्राहक को वापस कर देगा।
यूएमएल डिस्टिल्ड (अब बस बाहर) के तीसरे संस्करण से उद्धृत करने के लिए "दो तत्वों के बीच एक निर्भरता मौजूद है यदि एक तत्व (आपूर्तिकर्ता) की परिभाषा में परिवर्तन दूसरे (क्लाइंट) में परिवर्तन का कारण हो सकता है"। यह एक बहुत ही अस्पष्ट और सामान्य संबंध है, यही वजह है कि यूएमएल पर निर्भरता के विभिन्न रूपों के लिए रूढ़िबद्ध मेजबान है। कोड शब्दों में, एक पैरामीटर प्रकार का नामकरण और अस्थायी चर में एक वस्तु बनाने के रूप में ऐसी चीजें एक निर्भरता का अर्थ है।
...
एक संघ का लगभग हमेशा यह मतलब होता है कि एक वस्तु में दूसरी वस्तु एक क्षेत्र / संपत्ति / विशेषता (शब्दावली भिन्न) के रूप में होती है।
आम तौर पर एक निर्भरता (लेकिन हमेशा नहीं) का तात्पर्य है कि एक ऑब्जेक्ट किसी अन्य ऑब्जेक्ट को एक विधि पैरामीटर के रूप में स्वीकार करता है, इंस्टेंटिअट्स करता है, या किसी अन्य ऑब्जेक्ट का उपयोग करता है। एक निर्भरता एक संघ द्वारा बहुत अधिक निहित है ।
OOP शब्दों में:
एसोसिएशन -> ए के पास एक सी वस्तु है (सदस्य चर के रूप में)
निर्भरता -> एक संदर्भ बी (एक विधि पैरामीटर या वापसी प्रकार के रूप में)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
वहाँ भी एक है और अधिक विस्तृत जवाब ।
निर्भरता तब होती है जब आप एक ऐसी विधि को परिभाषित करते हैं जो एक पैरामीटर के रूप में स्ट्रिंग (जावा, सी # में, जैसा कि स्ट्रिंग एक ऑब्जेक्ट है) लेता है, तो आपकी कक्षा स्ट्रिंग कक्षा पर निर्भर है।
एसोसिएशन ऐसा है जब आप अपनी कक्षा में एक विशेषता के रूप में एक स्ट्रिंग की घोषणा करते हैं। तब आपका कोड स्ट्रिंग क्लास से जुड़ा होता है।
String name = null //: is a association.
निर्भरता - एक वर्ग में परिवर्तन निर्भर वर्ग में परिवर्तन को प्रभावित करता है। उदाहरण- सर्कल शेप (एक इंटरफ़ेस) पर निर्भर है। यदि आप आकार बदलते हैं, तो यह सर्कल को भी प्रभावित करता है। तो, सर्कल का आकार पर निर्भरता है।
एसोसिएशन - मतलब 2 वस्तुओं के बीच एक निश्चित संबंध है
(एक-एक, एक-कई, कई-कई)
एसोसिएशन 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 */
}
}
यहां तक कि अगर आप क्लास ए को हटाते हैं, तो बी बाहर मौजूद होगा (बी बाहर बनाया गया है और क्लास ए से पास किया गया है)
इसका एक और उदाहरण है- मैन एंड कार। आदमी के पास एक कार है लेकिन मैन एंड कार स्वतंत्र रूप से मौजूद है।
यहाँ: "एसोसिएशन बनाम निर्भरता बनाम एकत्रीकरण बनाम रचना" , आपके पास उम्म क्लास डायग्राम और कोड स्निपेट्स के साथ एक शानदार वेड मेकम है। लेखक हमें रिश्तों की एक सूची देता है: एक स्थान पर एसोसिएशन, निर्भरता, एकत्रीकरण, रचना।
एक निर्भरता बहुत सामान्य है और जटिलता को कम करना अधिक से अधिक निर्भरता को कम करना है।
एक संघ एक मजबूत (स्थिर) निर्भरता है। एकत्रीकरण और संरचना और भी मजबूत हैं।
एसोसिएशन तब होता है जब एक वस्तु का दूसरे से लिंक होता है और संबंधपरक वस्तु विधियों का उपयोग नहीं करता है। उदाहरण के लिए माणिक
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
यहाँ अगर प्रोफाइल की जानकारी विधि बदली जाएगी या नाम बदलकर हमारे निर्भर उपयोगकर्ता वर्ग को भी बदलना होगा।