কম্পিউটার

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


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

টাইট কাপলিং

  • দৃঢ়ভাবে সংযুক্ত বস্তু একটি অবজেক্ট যা অন্যান্য অবজেক্ট সম্পর্কে জানতে হবে এবং সাধারণত একে অপরের ইন্টারফেসের উপর অত্যন্ত নির্ভরশীল।
  • একটি আঁটসাঁটভাবে সংযুক্ত অ্যাপ্লিকেশনে একটি বস্তু পরিবর্তন করা প্রায়ই অন্যান্য বস্তুর একটি সংখ্যা পরিবর্তন প্রয়োজন.
  • ছোট অ্যাপ্লিকেশানগুলিতে, আমরা সহজেই পরিবর্তনগুলি সনাক্ত করতে পারি এবং কিছু মিস করার সুযোগ কম থাকে। কিন্তু বড় অ্যাপ্লিকেশনগুলিতে, এই আন্তঃনির্ভরতাগুলি সবসময় প্রতিটি প্রোগ্রামার দ্বারা পরিচিত হয় না এবং পরিবর্তনগুলি উপেক্ষা করার সুযোগ থাকে৷

উদাহরণ

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; // Not suppose to happen as defined by class A, this causes tight coupling.
      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); // No way to set 'a' to such value as this method call will
                         // fail due to its enforced rule.
      System.out.println("aObject value is: " + aObject.getA());
   }
}

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

আউটপুট

getA() method
aObject value is: 0

  1. জাভাতে JRadioButton এবং JCheckBox এর মধ্যে পার্থক্য কি?

  2. জাভাতে JTextField এবং JTextArea এর মধ্যে পার্থক্য কি?

  3. জাভাতে JFrame এবং JDialog এর মধ্যে পার্থক্য কি?

  4. জাভাতে GridLayout এবং GridBagLayout এর মধ্যে পার্থক্য কি?