পলিমরফিজম (Polymorphism) হলো Object-Oriented Programming (OOP) এর একটি মূল বৈশিষ্ট্য, যার মাধ্যমে একই নামের মেথড বিভিন্ন ধরনের আচরণ করতে পারে। Polymorphism-এর দুইটি প্রধান রূপ আছে: মেথড ওভারলোডিং এবং মেথড ওভাররাইডিং।
পলিমরফিজমের ধরন
- মেথড ওভারলোডিং (Method Overloading) - Compile-Time Polymorphism
- মেথড ওভাররাইডিং (Method Overriding) - Runtime Polymorphism
মেথড ওভারলোডিং (Method Overloading)
মেথড ওভারলোডিং হলো একই নামের একাধিক মেথড যা বিভিন্ন প্যারামিটার তালিকার (প্যারামিটার সংখ্যা বা ডেটা টাইপ) ভিত্তিতে আলাদা কাজ সম্পাদন করতে পারে। এটি Compile-Time Polymorphism হিসেবে পরিচিত, কারণ মেথডটি কম্পাইল টাইমে নির্ধারিত হয়।
উদাহরণ: মেথড ওভারলোডিং
public class MathOperations {
// দুটি সংখ্যার যোগফল প্রদান করে
public int add(int a, int b) {
return a + b;
}
// তিনটি সংখ্যার যোগফল প্রদান করে
public int add(int a, int b, int c) {
return a + b + c;
}
// ভিন্ন ডেটা টাইপের সংখ্যার যোগফল প্রদান করে
public double add(double a, double b) {
return a + b;
}
public static void main(String[] args) {
MathOperations math = new MathOperations();
System.out.println("Addition of two integers: " + math.add(5, 10)); // 15
System.out.println("Addition of three integers: " + math.add(5, 10, 15)); // 30
System.out.println("Addition of two doubles: " + math.add(5.5, 10.2)); // 15.7
}
}
ব্যাখ্যা:
- এখানে
addনামের তিনটি মেথড আছে, যার প্রতিটিতে ভিন্ন প্যারামিটার লিস্ট আছে। - কম্পাইলার প্যারামিটার অনুযায়ী সঠিক মেথড বেছে নেয় এবং কার্যকর করে।
মেথড ওভাররাইডিং (Method Overriding)
মেথড ওভাররাইডিং হলো প্যারেন্ট ক্লাসের একটি মেথডকে সাবক্লাসে পুনরায় সংজ্ঞায়িত করা। এটি Runtime Polymorphism হিসেবে পরিচিত, কারণ সাবক্লাসে কাস্টমাইজড মেথড রানটাইমে নির্ধারিত হয়।
শর্তাবলী:
- প্যারেন্ট এবং চাইল্ড ক্লাসে মেথডের নাম, রিটার্ন টাইপ, এবং প্যারামিটারসমূহ একই থাকতে হবে।
- ওভাররাইডিং মেথডের অ্যাক্সেস মডিফায়ার মূল মেথডের অ্যাক্সেস মডিফায়ারের চেয়ে বেশি সীমাবদ্ধ হতে পারবে না।
উদাহরণ: মেথড ওভাররাইডিং
class Animal {
// প্যারেন্ট ক্লাসের মেথড
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
// ওভাররাইডিং মেথড
@Override
void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog(); // Upcasting
myAnimal.sound(); // Output: Animal makes a sound
myDog.sound(); // Output: Dog barks (ওভাররাইডিং হয়েছে)
}
}
ব্যাখ্যা:
Animalক্লাসেsoundনামের একটি মেথড আছে, যাDogসাবক্লাসে ওভাররাইড করা হয়েছে।myDog.sound()কল করলেDogএর ওভাররাইড করা মেথড কার্যকর হয়, যা Runtime Polymorphism তৈরি করে।
মেথড ওভারলোডিং এবং ওভাররাইডিং এর পার্থক্য
| বৈশিষ্ট্য | মেথড ওভারলোডিং | মেথড ওভাররাইডিং |
|---|---|---|
| Polymorphism টাইপ | Compile-Time Polymorphism | Runtime Polymorphism |
| কোথায় ব্যবহৃত হয় | একই ক্লাসে | প্যারেন্ট ও সাবক্লাসে |
| মেথড সিগনেচার | মেথডের নাম একই থাকে, প্যারামিটার ভিন্ন | মেথডের নাম ও প্যারামিটার একদম একই থাকে |
| অ্যাক্সেস কন্ট্রোল | প্রয়োজন নেই | সাবক্লাসে মূল মেথডের অ্যাক্সেস চেয়ে বেশি সীমাবদ্ধ হতে পারে না |
Polymorphism এর সুবিধা
- কোডের পুনরায় ব্যবহারযোগ্যতা: Polymorphism-এর মাধ্যমে একই নামের মেথডকে ভিন্ন ভিন্ন কাজের জন্য পুনঃব্যবহার করা যায়।
- কোডের সংক্ষিপ্ততা ও মডুলারিটি: Polymorphism কোডকে ছোট ছোট অংশে বিভক্ত করে, যা পড়া এবং বুঝতে সহজ।
- রানটাইম ডায়নামিজম: মেথড ওভাররাইডিং-এর মাধ্যমে প্রোগ্রামে পরিবর্তন এনে কোডকে আরও শক্তিশালী ও কার্যকর করা যায়।
উদাহরণ: ওভারলোডিং এবং ওভাররাইডিং একসাথে
class Shape {
// Parent class method (Overriding possible in subclasses)
public void draw() {
System.out.println("Drawing a shape");
}
// Overloaded method with different parameters
public void draw(String color) {
System.out.println("Drawing a " + color + " shape");
}
}
class Circle extends Shape {
// Overriding the draw method in the subclass
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
public class Main {
public static void main(String[] args) {
Shape shape = new Shape();
shape.draw(); // Output: Drawing a shape
shape.draw("red"); // Output: Drawing a red shape (Overloaded)
Shape circle = new Circle();
circle.draw(); // Output: Drawing a circle (Overridden)
}
}
সারসংক্ষেপ
Java তে Polymorphism দুটি প্রধান রূপে বিভক্ত: মেথড ওভারলোডিং এবং মেথড ওভাররাইডিং। মেথড ওভারলোডিং Compile-Time Polymorphism তৈরি করে এবং একই নামের মেথডের জন্য বিভিন্ন প্যারামিটার ব্যবহার করে ভিন্ন ভিন্ন কাজ সম্পাদন করে। মেথড ওভাররাইডিং Runtime Polymorphism তৈরি করে, যেখানে প্যারেন্ট ক্লাসের মেথডকে সাবক্লাসে পুনঃসংজ্ঞায়িত করা হয়, যা কোডকে আরও ডায়নামিক এবং মডুলার করে।
Read more