কোনও ইউএমএল শ্রেণির ডায়াগ্রামে অ্যাসোসিয়েশন সম্পর্ক এবং নির্ভরতার সম্পর্কের মধ্যে পার্থক্য কী?
আমি যা জানি, একটি সমিতি নির্ভরতার চেয়ে শক্তিশালী সম্পর্ক, তবে কীভাবে এটি আরও শক্তিশালী তা আমি নিশ্চিত নই।
কোন উদাহরণ স্বাগত চেয়ে বেশি হতে পারে :)
উত্তর:
নির্ভরতা এবং সংস্থার মধ্যে পার্থক্য কী? :
সাধারণভাবে, আপনি ক্লাসে ক্ষেত্রের মতো কিছু উপস্থাপন করতে একটি সমিতি ব্যবহার করেন। লিঙ্কটি সর্বদা থাকে, এতে আপনি সর্বদা তার গ্রাহকের জন্য একটি আদেশ চাইতে পারেন। এটি আসলে ক্ষেত্র হওয়ার দরকার নেই, আপনি যদি আরও ইন্টারফেসের দৃষ্টিকোণ থেকে মডেলিং করেন তবে এটি কেবল এমন কোনও পদ্ধতির উপস্থিতি নির্দেশ করতে পারে যা অর্ডারটির গ্রাহককে ফিরিয়ে দেবে।
ইউএমএল ডিস্টিল্ডের তৃতীয় সংস্করণ থেকে উদ্ধৃত করা (এখন স্রেফ আউট) "যদি একটি উপাদান (সরবরাহকারী) এর সংজ্ঞা পরিবর্তিত হয়ে অন্য (ক্লায়েন্ট) এর পরিবর্তনের কারণ হতে পারে তবে দুটি উপাদানের মধ্যে একটি নির্ভরতা বিদ্যমান।" এটি একটি অত্যন্ত অস্পষ্ট এবং সাধারণ সম্পর্ক, এজন্যই ইউএমএলের বিভিন্ন ধরণের নির্ভরতার জন্য প্রচলিত স্টেরিওটাইপ রয়েছে। কোড পদে, পরামিতি প্রকারের নামকরণ এবং অস্থায়ী ভেরিয়েবলে কোনও অবজেক্ট তৈরি করা যেমন নির্ভরতা বোঝায়।
...
একটি সমিতি প্রায় সবসময়ই বোঝায় যে একটি অবজেক্টের ক্ষেত্র / সম্পত্তি / বৈশিষ্ট্য হিসাবে পৃথক বস্তুর রয়েছে (পরিভাষা পৃথক পৃথক)।
একটি নির্ভরতা সাধারণত (তবে সর্বদা নয়) বোঝায় যে কোনও বস্তু অন্য পন্থাকে একটি পদ্ধতি প্যারামিটার হিসাবে গ্রহণ করে, ইনস্ট্যান্টিয়েট করে বা অন্য কোনও বস্তু ব্যবহার করে। একটি নির্ভরতা খুব একটা সমিতি দ্বারা নিহিত ।
ওওপি পদগুলিতে:
সমিতি -> এ -এর একটি সি অবজেক্ট (সদস্য ভেরিয়েবল হিসাবে)
নির্ভরতা -> একটি রেফারেন্স বি (একটি পদ্ধতি প্যারামিটার বা রিটার্নের ধরণ হিসাবে)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
আরও একটি বিস্তারিত উত্তর আছে ।
নির্ভরতা হ'ল যখন আপনি কোনও স্ট্রিং নেন (জাভা, সি # তে স্ট্রিং তাদের মধ্যে একটি বস্তু হিসাবে) প্যারামিটার হিসাবে নিয়ে যায় তখন আপনার শ্রেণি স্ট্রিং ক্লাসের উপর নির্ভরশীল class
অ্যাসোসিয়েশন এমন হয় যখন আপনি নিজের ক্লাসে একটি স্ট্রিংকে একটি গুণ হিসাবে ঘোষণা করেন। তারপরে আপনার কোডটি স্ট্রিং ক্লাসের সাথে সম্পর্কিত।
String name = null //: is a association.
নির্ভরতা - শ্রেণীর পরিবর্তন তার নির্ভরশীল শ্রেণীর পরিবর্তনকে প্রভাবিত করে। উদাহরণ- সার্কেল শেপ (একটি ইন্টারফেস) এর উপর নির্ভরশীল। আপনি যদি আকার পরিবর্তন করেন তবে এটি চেনাশোনাকেও প্রভাবিত করে। সুতরাং, বৃত্তের আকারের উপর নির্ভরতা রয়েছে।
সমিতি - এর অর্থ 2 অবজেক্টের মধ্যে একটি নির্দিষ্ট সম্পর্ক রয়েছে
(এক-এক, একাধিক, বহু)
সমিতি 2 প্রকারের-
সমষ্টি
1) রচনা - শক্তিশালী সমিতি বা 2 টি বস্তুর মধ্যে সম্পর্ক between আপনি অন্য শ্রেণীর A এর ভিতরে একটি শ্রেণি বিয়ের একটি অবজেক্ট তৈরি করছেন
public class A { B b; public void setB(){ this.b= new B(); } }
আমরা যদি ক্লাস এ মুছতে থাকি, বি উপস্থিত থাকবে না (বি অবজেক্ট কেবল এ এর মধ্যে তৈরি হয়)।
আর একটি উদাহরণ - বডি এবং লিভার। লিভার শরীরের বাইরে থাকতে পারে না।
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
এখানে যদি প্রোফাইলের তথ্য পদ্ধতিটি পরিবর্তন করা হয় বা নামকরণ করা হয় তবে আমাদের নির্ভরশীল ব্যবহারকারীর ক্লাসটিও পরিবর্তন করা দরকার।