শুরুতে, Polymorphism গ্রীক শব্দ Poly (যার অর্থ অনেক) এবং morphism (যার অর্থ রূপ) থেকে অর্জিত হয়েছে।
পলিমরফিজম অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ একটি উদাহরণ চিত্রিত করে যেখানে বিভিন্ন ক্লাসে যে পদ্ধতিগুলি একই রকম কাজ করে তাদের একই নাম থাকা উচিত। পলিমরফিজম মূলত একটি OOP প্যাটার্ন যা বিভিন্ন কার্যকারিতা সহ অসংখ্য ক্লাসকে একটি সাধারণ ইন্টারফেস চালাতে বা ভাগ করতে সক্ষম করে। পলিমরফিজমের উপযোগিতা হল বিভিন্ন শ্রেণীতে লেখা কোডের কোন প্রভাব নেই যে এটি কোন শ্রেণীর অন্তর্গত কারণ সেগুলি একইভাবে ব্যবহার করা হয়। ক্লাসগুলি পলিমারফিজম নির্দেশিকা বাস্তবায়ন করে তা নিশ্চিত করার জন্য, আমরা বিমূর্ত ক্লাস বা ইন্টারফেসের দুটি বিকল্পের মধ্যে একটি বেছে নিতে পারি।
তাই ইন্টারফেসের সাহায্যে পলিমরফিজম নীতি বাস্তবায়ন করা যাক।
ইন্টারফেস একটি ইন্টারফেস একটি ক্লাসের অনুরূপ তবে এটি কোড ধারণ করতে পারে না। একটি ইন্টারফেস পদ্ধতির নাম এবং আর্গুমেন্ট সংজ্ঞায়িত করতে পারে, কিন্তু পদ্ধতির বিষয়বস্তু নয়। একটি ইন্টারফেস নির্বাহ করা যেকোনো ক্লাস অবশ্যই ইন্টারফেসের দ্বারা চিহ্নিত সমস্ত পদ্ধতি চালাতে হবে।
উদাহরণ:
<?php interface Machine { public function calcTask(); } class Circle implements Machine { private $radius; public function __construct($radius){ $this -> radius = $radius; } public function calcTask(){ return $this -> radius * $this -> radius * pi(); } } class Rectangle implements Machine { private $width; private $height; public function __construct($width, $height){ $this -> width = $width; $this -> height = $height; } public function calcTask(){ return $this -> width * $this -> height; } } $mycirc = new Circle(3); $myrect = new Rectangle(3,4); echo $mycirc->calcTask(); echo $myrect->calcTask(); ?>
আউটপুট:
28.274 12
ব্যাখ্যা:
"মেশিন" নামের ইন্টারফেসটি calcTask() নামে একটি বিমূর্ত পদ্ধতি সংজ্ঞায়িত করার জন্য সমস্ত শ্রেণীকে প্রতিশ্রুতিবদ্ধ করে। সেই অনুযায়ী, সার্কেল ক্লাস কলটাস্ক() মেথড সংজ্ঞায়িত করে ইন্টারফেস প্রয়োগ করে এর ভিতরে সংশ্লিষ্ট বডির সাথে। আয়তক্ষেত্র ক্লাস মেশিন ইন্টারফেস প্রয়োগ করে কিন্তু ক্যালকটাস্ক() পদ্ধতিটিকে একটি ভিন্ন বডি দিয়ে সংজ্ঞায়িত করে যা সার্কেল ক্লাস CalTask() পদ্ধতি থেকে আলাদা। পলিমরফিজম নির্দেশিকা বলে যে, এই পরিস্থিতির জন্য, কার্য গণনা করে এমন সমস্ত পদ্ধতির সমতুল্য নাম থাকবে। এখন, বিভিন্ন ক্লাসের জন্য টাস্ক গণনা করার জন্য যে সময়েই আমাদের প্রয়োজন হবে না কেন, আমরা বিভিন্ন মেশিনের জন্য কার্যটি কীভাবে গণনা করতে হয় তার বিশদ বিবরণে অনেক বিবেচনা না করেই calcTask() নামে একটি পদ্ধতিকে কল করব। আমাদের যে প্রধান জিনিসটি জানতে হবে তা হল সেই পদ্ধতির নাম যা কার্য গণনা করে।