Association, Aggregation এবং Composition

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বলতে আসলে কি বোঝাই, এর শুরু কই শেষ কোথায় আমি এখনো অল্প কথাই বলতে পারি না । দেখি লিখতে পারি কিনা ....

OOP তে সবকিছুকেই স্বাধীন অবজেক্ট বা উপকরণ তৈরি করে সেগুলো প্রয়োজনমতো একটার সাথে আরেকটা যুক্ত করে একটা সিস্টেম দাঁড় করাই । যেমন টা করা হয় গাড়ি বানাতে । বডি, চাকা, ইঞ্জিন, সিট সব আলাদা স্বাধীন উপকরণ । ফ্যাক্টরিতে এগুলা জোড়া দিয়ে পরিপূর্ণ সচল গাড়ি বানাতে হয় । গাড়ি ৬ মাস চালানোর পর দেখলেন আপনার ইঞ্জিন রাক্ষসের মতো তেল খাচ্ছে । আপনি ইঞ্জিন বদলাবেন । এক্ষেত্রে কিন্তু আপনার আর কিছুতে হাত না দিয়ে ইঞ্জিন বদলালেই আপনি আবার তেলের চিন্তা ভুলে লং ড্রাইভে যাইতে পারবেন ।

এখন মনে করেন বডি, চাকা, ইঞ্জিন, সিট এসব স্বাধীন উপকরণ আর নেই । গাড়ি নিজেই একটা একক উপকরণ । এমন হলে গাড়ি নষ্ট মানে পুরো গাড়ি বাদ দিয়ে নতুন আরেকটা গাড়ি অবজেক্ট তৈরি করতে হবে । যা অনেক জটিল এবং অকার্যকর । যেকোনো বড় বা কমপ্লেক্স সিস্টেম ছোট ছোট অবজেক্টে ভাগ করে, সেই অবজেক্টের অরিয়েন্টেশনে বা সমন্বয়ে তৈরি করলে সেটা মেইন্টেইন করা সহজ, সার্ভিসও ভালো পাওয়া যায় । এইটাই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এবং এই কারনেই OOP এতো জনপ্রিয় । OOP এর এই গুনটা সবচেয়ে ভালোভাবে বোঝা যায় Association, Aggregation এবং Composition এর ব্যবহার থেকে ।



আপাতত ছবিটা দেখুন এবং ইগনোর করুন। লেখা শেষে এমনিতেই বুঝে যাবেন ।

Association
দুটো আলাদা অবজেক্ট কিন্তু কেউ কারো উপর ডিপেন্ডেন্ট না । সিস্টেমে দুটোই যার যার মতো স্বাধীন । একটার না থাকার সাথে অন্যটার থাকা না থাকা নির্ভর করে না । একটা সিনারিও চিন্তা করুন, আপনার একটা ধবধবে সাদা অডি গাড়ি আছে । করিম আপনার গাড়ি ড্রাইভ করে । 
class Driver {
    public String name;
    Driver(String name) {
        this.name = name;
    }
    public String getDriverName() {
        return this.name;
    }
}
class Car {
    String model;
    public Car(String model) { 
        this.model=model;
    }
    public String getModelName() {
        return this.model;
    }
}
দেখুন Driver, Car কেউ কারো সাথে কোনভাবেই সংযুক্ত না, এরা সম্পূর্ণ আলাদা স্বাধীন অবজেক্ট ।এদেরকে নিচের মতো করে ব্যবহার করে সম্মিলিত ফলাফল পেতে পারি ।
public class AssociationTest {
    public static void main(String[] args) {
        Driver driver = new Driver("Karim");
        Car car = new Car("Audi");
        System.out.println(driver.getDriverName()+" is" +
                " driving your "+car.getModelName()+" right now");
    }
} 
Aggregation
Aggregation এবং Association খুব কাছাকাছি । এক্ষেত্রেও অবজেক্ট গুলো সিস্টেমে যার যার মতো স্বাধীন । একটার না থাকার সাথে অন্যটার থাকা না থাকা নির্ভর করে না । কিন্তু একটা আরেকটার মধ্যে Has-A রিলেশনে সংযুক্ত থাকে । একটা সিনারিও চিন্তা করুন, আপনার একটা ধবধবে সাদা অডি গাড়ি আছে । করিম আপনার গাড়ি ড্রাইভ করে কিন্তু সে পাকা চালক না ।
class Driver {
    public String name;
    Driver(String name) {
        this.name = name;
    }
}
class Car {
    Driver driver;  // Car Has-A Driver presents Aggregation
    public Car() {  // default constructor
    }
    public String getDriverName(Driver driver) {
        this.driver = driver;
        return this.driver.name;
    }
}
এখানে আপনি ড্রাইভারকে সংযুক্ত করেছেন ঠিক কিন্তু গাড়ি এবং ড্রাইভার দুটো আলাদা স্বাধীন অবজেক্ট । একটার অস্তিত্বর সাথে অন্যটার অস্তিত্বর কোন সম্পর্ক নেই । এই কারনে আপনি করিমকে বাদ দিয়ে রহিমের মতো পাকা চালকের হাতে আপনার অডি গাড়ি তুলে দিতে পারেন জাস্ট রহিমের ড্রাইভার অবজেক্ট তৈরি করেই।
public class AggregationTest {
    public static void main(String[] args) {
        Driver karim = new Driver("Karim");
        Driver rahim = new Driver("Rahim");
        Car car = new Car();
        System.out.println(car.getDriverName(rahim)+" is driving your Audi right now");
    }
}
Composition
এটা Death Relationship । একটা অবজেক্ট আরেকটার সাথে এমন শক্তভাবে associated থাকে যে একটা না থাকলে অপরটার মৃত্যু ঘটে ( নিচের কোডে জন্মই হবে না ) । 
public class Human {
    private Heart heart = new Heart();
}
এখানে heart অবজেক্ট Human এর ভিতরে তৈরি হয়েছে, তাই Human না থাকলে heart তৈরি হওয়ার কোন চান্সই নেই । তাই Human এর উপর heart এর অস্তিত্ব নির্ভর করে । Compossition এতোই গুরুত্বপূর্ণ যে, বলা হয় -
Composition is very much preferred in object oriented design over inheritance.
Compossition আরো ভালো বুঝতে চাইলে Facade Pattern দেখুন । 




THE END

Association, Aggregation এবং Composition Association, Aggregation এবং Composition Reviewed by hnjaman on June 26, 2018 Rating: 5

No comments:

Powered by Blogger.