টাইট কাপলিং মানে ক্লাস এবং অবজেক্টরা একে অপরের ওপর নির্ভরশীল। সাধারণত টাইট কাপলিং ভালো নয় কারণ এটি কোডের ফ্লেক্সিবিলিটি এবং রি-ইউজেবিলিটি কমিয়ে দেয়, যেখানে লুজ কাপলিং মানে এমন একটি ক্লাসের ডিপেন্ডেন্সি কমানো যেটি অন্য ক্লাস সরাসরি ব্যবহার করে।
টাইট কাপলিং
- টাইটলি কাপল্ড অবজেক্ট হলো এমন একটি অবজেক্ট যেটি অন্যান্য অবজেক্টের বিষয়ে জানতে হয় এবং সাধারণত একে অপরের ইন্টারফেসের ওপর বড়ভাবে নির্ভরশীল।
- টাইটলি কাপল্ড অ্যাপ্লিকেশন-এ একটি অবজেক্ট পরিবর্তন করা অনেক সময় অন্যান্য অনেক অবজেক্টে পরিবর্তন আনতে বাধ্য করে।
- ছোট অ্যাপ্লিকেশনগুলিতে আমরা সহজে পরিবর্তনগুলো চিহ্নিত করতে পারি এবং কিছু মিস করার চান্স কম। কিন্তু বড় অ্যাপ্লিকেশনগুলিতে এই ইন্টার-ডিপেন্ডেন্সিগুলো সব প্রোগ্রামার জানে না এবং পরিবর্তন ওভারলুক হওয়ার চান্স থাকে।
উদাহরণ
class A {
public int a = 0;
public int getA() {
System.out.println("getA() method");
return a;
}
public void setA(int aa) {
if(!(aa > 10))
a = aa;
}
}
public class B {
public static void main(String[] args) {
A aObject = new A();
aObject.a = 100; // ক্লাস A দ্বারা ডিফাইন করা অনুযায়ী এটি হওয়া উচিত নয়, এতে টাইট কাপলিং হয়।
System.out.println("aObject.a value is: " + aObject.a);
}
}
উপরোক্ত উদাহরণে, এই ধরনের ইমপ্লিমেন্টেশন করা কোড টাইট কাপলিং ব্যবহার করে এবং এটি খুব খারাপ কারণ ক্লাস B ক্লাস A-এর ডিটেইলস জানে, যদি ক্লাস A ভেরিয়েবল 'a'-কে প্রাইভেট করে দেয় তবে ক্লাস B ব্রেক হয়ে যাবে, আবার ক্লাস A-এর ইমপ্লিমেন্টেশন বলে ভেরিয়েবল 'a' 10-এর চেয়ে বড় হবена কিন্তু আমরা দেখছি সরাসরি ভেরিয়েবলে গিয়ে এর স্টেট যেকোনো ভ্যালুতে পরিবর্তন করা সম্ভব।
আউটপুট
aObject.a value is: 100
লুজ কাপলিং
- লুজ কাপলিং হলো একটি ডিজাইন গোল যা একটি সিস্টেমের কম্পোনেন্টগুলোর মধ্যে ইন্টার-ডিপেন্ডেন্সি কমানোর লক্ষ্যে, যাতে একটি কম্পোনেন্টে পরিবর্তন অন্য কোনো কম্পোনেন্টে পরিবর্তন আনার রিস্ক কমে।
- লুজ কাপলিং একটি আরও জেনেরিক কনসেপ্ট যা সিস্টেমের ফ্লেক্সিবিলিটি বাড়াতে, আরও মেইনটেইনযোগ্য बनाने এবং পুরো ফ্রেমওয়ার্ককে আরও স্থিতিশীল করতে সাহায্য করে।
উদাহরণ
class A {
private int a = 0;
public int getA() {
System.out.println("getA() method");
return a;
}
public void setA(int aa) {
if(!(aa > 10))
a = aa;
}
}
public class B {
public static void main(String[] args) {
A aObject = new A();
aObject.setA(100); // 'a'-কে এত বড় ভ্যালু সেট করার কোনো উপায় নেই কারণ এই মেথড কল ফেইল করবে এর এনফোর্সড রুলের কারণে।
System.out.println("aObject value is: " + aObject.getA());
}
}
উপরোক্ত উদাহরণে, এই ধরনের ইমপ্লিমেন্টেশন করা কোড লুজ কাপলিং ব্যবহার করে এবং এটি সুপারিশ করা হয় কারণ ক্লাস B ক্লাস A-এর মাধ্যমে যেতে হয় এর স্টেট পেতে যেখানে রুলগুলো এনফোর্স করা হয়। যদি ক্লাস A ইন্টারন্যালি পরিবর্তন হয়, ক্লাস B ব্রেক হবে না কারণ এটি শুধু ক্লাস A ব্যবহার করে যোগাযোগের মাধ্যম হিসেবে।
আউটপুট
getA() method aObject value is: 0