অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বলতে আসলে কি বোঝাই, এর শুরু কই শেষ কোথায় আমি এখনো অল্প কথাই বলতে পারি না । দেখি লিখতে পারি কিনা ....
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
Reviewed by hnjaman
on
June 26, 2018
Rating:
No comments: