ওওপি পলিমরফিজম (Polymorphism)
পলিমরফিজম মানে হলো "একই কাজের ভিন্ন ভিন্ন রূপ"। এটি ওওপি-র এমন একটি যাদু যা দিয়ে একই মেথড বা কাজকে বিভিন্ন অবজেক্টের জন্য আলাদা আলাদাভাবে ব্যবহার করা যায়। সহজ কথায়, নাম এক কিন্তু কাজ হবে আলাদা।
পলিমরফিজম মূলত ওভাররাইডিং (Overriding) এর মাধ্যমে কাজ করে। যখন কোনো সন্তান ক্লাস তার পিতা ক্লাসের কাজকে নিজের মতো করে বদলে নেয়, তখনই আমরা পলিমরফিজমের সুবিধা পাই।
১. মেথড ওভাররাইডিং (Method Overriding)
একই নামের মেথড ভিন্ন ভিন্ন ক্লাসে ভিন্ন কাজ করছে:
ক্লাস প্রাণী {
শব্দ_করো() {
দেখাও "প্রাণীটি শব্দ করছে";
}
}
ক্লাস কুকুর মতো প্রাণী {
শব্দ_করো() {
দেখাও "ঘেউ ঘেউ!"; // ওভাররাইড করা হলো
}
}
ক্লাস বিড়াল মতো প্রাণী {
শব্দ_করো() {
দেখাও "মিউ মিউ!"; // ওভাররাইড করা হলো
}
}
২. কেন পলিমরফিজম ব্যবহার করবেন?
ভাবুন আপনার একটি গেম আছে যেখানে অনেক ধরনের শত্রু (এনিমি) আছে। সবাই আক্রমণ করে, কিন্তু কেউ তলোয়ার দিয়ে আবার কেউ যাদু দিয়ে। আপনি যদি সবার জন্য আক্রমণ() নামে মেথড রাখেন, তবে কোডটি চালানো অনেক সহজ হবে।
৩. বাস্তব উদাহরণ: পেমেন্ট সিস্টেম
বিকাশ, নগদ বা কার্ড—সবগুলোই পেমেন্ট করে। সবার মেথড এক হলেও প্রসেস আলাদা হতে পারে।
ক্লাস পেমেন্ট {
টাকা_দাও(দশমিক পরিমাণ) { দেখাও "প্রসেসিং..."; }
}
ক্লাস বিকাশ মতো পেমেন্ট {
টাকা_দাও(দশমিক পরিমাণ) { দেখাও পরিমাণ >> " টাকা বিকাশ করা হয়েছে।"; }
}
ক্লাস নগদ মতো পেমেন্ট {
টাকা_দাও(দশমিক পরিমাণ) { দেখাও পরিমাণ >> " টাকা নগদ পাঠানো হয়েছে।"; }
}
৪. ইন-ডেপথ উদাহরণ: জ্যামিতিক আকার
বিভিন্ন আকারের ক্ষেত্রফল বের করার লজিক:
ক্লাস আকার {
ক্ষেত্রফল() { ফেরত ০; }
}
ক্লাস বর্গ মতো আকার {
দশমিক বাহু;
শুরু(দশমিক ব) { বাহু = ব; }
ক্ষেত্রফল() { ফেরত বাহু * বাহু; }
}
বর্গ আমার_বর্গ = নতুন বর্গ(৫.০);
দেখাও "বর্গের ক্ষেত্রফল: " >> আমার_বর্গ.ক্ষেত্রফল();