Object-Oriented ProgrammingFour Pillars of OOP
OOP-এর চার স্তম্ভ: Overloading বনাম Overriding
পড়তে প্রায় ১০ মিনিটসংস্করণ ১সর্বশেষ আপডেট: ২১ অক্টোবর, ২০২৬৯টি অনুশীলন প্রশ্ন
সংক্ষেপে মনে রাখুন
দ্রুত রিভিশনের জন্য মূল কথা
মূল কথা
- OOP-এর ৪টি মূল স্তম্ভের সংজ্ঞা ও বাস্তব উদাহরণ দেওয়া
- Compile-time (Overloading) ও Runtime (Overriding) polymorphism আলাদা করা
- Abstract class ও Interface-এর পার্থক্য লিখিত পরীক্ষায় উপস্থাপন করা
সূত্র ও নিয়ম
Overloading = Same method name + Different parameters (count/type) + Within SAME class. Resolved at COMPILE-TIME (Early / Static Binding). Return type ALONE cannot differentiate.
একই ক্লাসের ভেতরে একই নামের একাধিক মেথড যদি ভিন্ন প্যারামিটার তালিকা (প্যারামিটারের সংখ্যা বা টাইপ ভিন্ন) নিয়…
যেখানে ভুল হয়
শুধুমাত্র রিটার্ন টাইপ পরিবর্তন করে মেথড ওভারলোড করা যায় না (যেমন int add(int a, int b) এবং double add(int a, int b) একই ক্লাসে লিখলে কম্পাইল এরর দেবে)।
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মেথড)।
cpp
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-এর বিকল্প)।
পরের ধাপ
এই টপিকে ৫টি প্রশ্ন অনুশীলন করুন
পড়া মনে আছে কি না, ছোট একটি সেটে দেখে নিন। প্রতিটি উত্তরের সাথে ব্যাখ্যা থাকবে, আর ভুল প্রশ্নগুলো রিভিশনের তালিকায় যাবে