কম্পিউটার টিউটোরিয়াল

জাভাতে টাইট কাপলিং এবং লুজ কাপলিং-এর পার্থক্য কী?


টাইট কাপলিং মানে ক্লাস এবং অবজেক্টরা একে অপরের ওপর নির্ভরশীল। সাধারণত টাইট কাপলিং ভালো নয় কারণ এটি কোডের ফ্লেক্সিবিলিটি এবং রি-ইউজেবিলিটি কমিয়ে দেয়, যেখানে লুজ কাপলিং মানে এমন একটি ক্লাসের ডিপেন্ডেন্সি কমানো যেটি অন্য ক্লাস সরাসরি ব্যবহার করে।

টাইট কাপলিং

  • টাইটলি কাপল্ড অবজেক্ট হলো এমন একটি অবজেক্ট যেটি অন্যান্য অবজেক্টের বিষয়ে জানতে হয় এবং সাধারণত একে অপরের ইন্টারফেসের ওপর বড়ভাবে নির্ভরশীল।
  • টাইটলি কাপল্ড অ্যাপ্লিকেশন-এ একটি অবজেক্ট পরিবর্তন করা অনেক সময় অন্যান্য অনেক অবজেক্টে পরিবর্তন আনতে বাধ্য করে।
  • ছোট অ্যাপ্লিকেশনগুলিতে আমরা সহজে পরিবর্তনগুলো চিহ্নিত করতে পারি এবং কিছু মিস করার চান্স কম। কিন্তু বড় অ্যাপ্লিকেশনগুলিতে এই ইন্টার-ডিপেন্ডেন্সিগুলো সব প্রোগ্রামার জানে না এবং পরিবর্তন ওভারলুক হওয়ার চান্স থাকে।

উদাহরণ

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
  1. জাভাতে JRadioButton এবং JCheckBox-এর পার্থক্য কী?

  2. জাভাতে JTextField এবং JTextArea-এর পার্থক্য কী?

  3. জাভাতে JFrame এবং JDialog-এর পার্থক্য কী?

  4. জাভাতে GridLayout এবং GridBagLayout-এর পার্থক্য কী?