Four Pillars of OOP
OOP-এর চার স্তম্ভ
OOP-এর চার স্তম্ভ: Overloading বনাম Overriding
পড়তে প্রায় ১০ মিনিট
এই পাঠ শেষে আপনি পারবেন
- OOP-এর ৪টি মূল স্তম্ভের সংজ্ঞা ও বাস্তব উদাহরণ দেওয়া
- Compile-time (Overloading) ও Runtime (Overriding) polymorphism আলাদা করা
- Abstract class ও Interface-এর পার্থক্য লিখিত পরীক্ষায় উপস্থাপন করা
OOP-এর চারটি স্তম্ভ
- Encapsulation (এনক্যাপসুলেশন): ডেটা (fields) এবং মেথডকে একটি ক্লাসের ভেতরে আবদ্ধ করা এবং
privateঅ্যাক্সেস মডিফায়ার দিয়ে ডেটা লুকিয়ে (Data Hiding) পাবলিক getter/setter-এর মাধ্যমে নিয়ন্ত্রিত অ্যাক্সেস দেওয়া। - Abstraction (অ্যাবস্ট্রাকশন): ভেতরের জটিল বাস্তবায়ন লুকিয়ে ব্যবহারকারীকে কেবল প্রয়োজনীয় ইন্টারফেস দেখানো (যেমন: গাড়ির ব্রেক চাপলে কীভাবে হাইড্রোলিক কাজ করে তা না জেনেও গাড়ি থামানো)।
- Inheritance (ইনহেরিট্যান্স): প্যারেন্ট (Base/Super) ক্লাসের বৈশিষ্ট্য চাইল্ড (Derived/Sub) ক্লাসে পুনর্ব্যবহার করা (
IS-Aসম্পর্ক)। - Polymorphism (পলিমরফিজম): একই নামের মেথড বা অপারেটরের ভিন্ন পরিস্থিতিতে ভিন্ন আচরণ করা।
Method Overloading বনাম Method Overriding
লিখিত পরীক্ষায় (যেমন বাংলাদেশ ব্যাংক ও বিপিএসসি) এই পার্থক্যটি অত্যন্ত গুরুত্বপূর্ণ:
- Method Overloading (Compile-time / Static Polymorphism): একই ক্লাসের ভেতরে একই নামের একাধিক মেথড থাকে, কিন্তু তাদের parameter সংখ্যা বা টাইপ ভিন্ন হয়। শুধু return type পরিবর্তন করে মেথড ওভারলোড করা যায় না।
- Method Overriding (Runtime / Dynamic Polymorphism): প্যারেন্ট ক্লাসের মেথডকে চাইল্ড ক্লাসে হুবহু একই নাম, একই parameter list ও সমতুল্য return type রেখে নতুনভাবে ইমপ্লিমেন্ট করা হয়। কোন মেথডটি কল হবে তা রানটাইমে অবজেক্টের প্রকৃত টাইপ অনুযায়ী নির্ধারিত হয় (Dynamic Method Dispatch /
virtualমেথড)।
class Bank {
public:
virtual double interestRate() { return 5.0; }
// Overloading: একই নাম, ভিন্ন প্যারামিটার
double calculateInterest(double p) { return p * 0.05; }
double calculateInterest(double p, int years) { return p * 0.05 * years; }
};
class KrishiBank : public Bank {
public:
// Overriding: চাইল্ড ক্লাসে একই সিগনেচার
double interestRate() override { return 4.0; }
};Abstract Class বনাম Interface
- Abstract Class: এতে abstract (বডিহীন) এবং non-abstract (বডিযুক্ত) উভয় ধরনের মেথড থাকতে পারে, constructor ও instance variable থাকতে পারে। একটি ক্লাস কেবল একটি abstract class ইনহেরিট করতে পারে (Java/C#)।
- Interface: এটি ১০০% চুক্তির (contract) মতো কাজ করে এবং একটি ক্লাস একাধিক interface ইমপ্লিমেন্ট করতে পারে (Multiple Inheritance-এর বিকল্প)।
সংস্করণ ১ · সর্বশেষ হালনাগাদ ২১ অক্টোবর, ২০২৬