কম্পোজিশন একটি ডিজাইন টেকনিক যেখানে আপনার ক্লাসে অন্য একটি ক্লাসের ইনস্ট্যান্স ফিল্ড হিসেবে থাকে। ইনহেরিটেন্স একটি মেকানিজম যেখানে একটি অবজেক্ট পেরেন্ট ক্লাস এক্সটেন্ড করে তার প্রোপার্টি ও বিহেভিয়র অর্জন করে।
দুটি কোড রিয়ুজাবিলিটি দেয় ক্লাস রিলেট করে। কম্পোজিশন দিয়ে ইনহেরিটেন্সের ফাংশনালিটি পাওয়া যায়। নিচে পার্থক্যগুলো:
| ক্রমিক নং | কী | ইনহেরিটেন্স | কম্পোজিশন |
|---|---|---|---|
| ১ | বেসিক | "is-a" রিলেশনশিপ (যেমন Dog is an Animal) | "has-a" রিলেশনশিপ (যেমন College has a Student) |
| ২ | কোড রিয়ুজ | এক ক্লাস শুধু এক ইন্টারফেস/ক্লাস এক্সটেন্ড করতে পারে, তাই এক ক্লাসে রিয়ুজ সীমিত | একাধিক ক্লাস থেকে কোড রিয়ুজ করা যায় |
| ৩ | স্কোপ | কম্পাইল টাইমে ফিচার প্রদান করে | রানটাইমে সহজে অর্জন করা যায় |
| ৪ | Final ক্লাস | Final ক্লাস থেকে কোড রিয়ুজ করা যায় না | Final ক্লাস থেকেও কোড রিয়ুজ করা যায় |
| ৫ | মেথড এক্সপোজার | পেরেন্ট ক্লাসের public এবং protected মেথড এক্সপোজ করে | এکسপোজ করে না, পাবলিক ইন্টারফেস দিয়ে ইন্টারঅ্যাক্ট করে |
ইনহেরিটেন্স উদাহরণ
class Animal {
String name = "Orio";
}
class Dog extends Animal {
String type = "Dog";
public static void main(String args[]) {
Dog p = new Dog();
System.out.println("Name: " + p.name);
System.out.println("Type: " + p.type);
}
}
কম্পোজিশন উদাহরণ
public class Student { }
public class College {
private Student student;
public College() {
this.student = new Student();
}
}
সেরা অভ্যাস: "Composition over Inheritance" — কম্পোজিশন বেশি ফ্লেক্সিবল, টেস্টেবল এবং কাপলিং কম। ইনহেরিটেন্স শুধু তখনই যখন স্পষ্ট "is-a" রিলেশনশিপ থাকে এবং পেরেন্ট ক্লাস এক্সটেনশনের জন্য ডিজাইন করা থাকে।