কম্পিউটার টিউটোরিয়াল

PHP-তে পলিমরফিজম (Polymorphism) ব্যাখ্যা

শুরুতে, পলিমরফিজম শব্দটি গ্রিক শব্দ Poly (যার অর্থ অনেক) এবং morphism (যার অর্থ ফর্মস) থেকে এসেছে।

পলিমরফিজম অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ একটি প্যাটার্ন বর্ণনা করে যেখানে বিভিন্ন ক্লাসে একই কাজ করার মেথডগুলোর একই নাম থাকা উচিত। পলিমরফিজম মূলত একটি OOP প্যাটার্ন যা ভিন্ন ফাংশনালিটিসহ অনেক ক্লাসকে একটি কমন ইন্টারফেস এক্সিকিউট বা শেয়ার করতে সক্ষম করে। পলিমরফিজমেরutility হলো বিভিন্ন ক্লাসে লেখা কোড কোন ক্লাসেরấy তা মনে কর না একইভাবে ব্যবহার করা যায়। ক্লাসগুলো পলিমরফিজম গাইডলাইন মেনে ইমপ্লিমেন্ট করেছে কিনা নিশ্চিত করতে আমরা দুটি অপশনের মধ্যে যেকোনো একটি বেছে নিতে পারি: অ্যাক্স্ট্রাক্ট ক্লাস বা ইন্টারফেস।

তাহলে ইন্টারফেসের সাহায্যে পলিমরফিজম প্রিন্সিপল ইমপ্লিমেন্ট করি।

ইন্টারফেস একটি ক্লাসের মতো কিন্তু সেটি কোনো কোড ধারণ করতে পারে না। একটি ইন্টারফেস মেথডের নাম আর আর্গুমেন্ট ডিফাইন করতে পারে, কিন্তু মেথডের কন্টেন্ট ডিফাইন করতে পারে না। ইন্টারফেস এক্সিকিউট করা যেকোনো ক্লাস অবশ্যই ইন্টারফেস দ্বারা ডিফাইন করা সকল মেথড এক্সিকিউট করতে হবে।

উদাহরণ:

<?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

ব্যাখ্যা:

"Machine" নামে ইন্টারফেসটি সেটি ইমপ্লিমেন্ট করা সকল ক্লাসকে calcTask() নামে একটি অ্যাবস্ট্রাক্ট মেথড ডিফাইন করতে বাধ্য করে। відповідно, Circle ক্লাসটি ইন্টারফেস ইমপ্লিমেন্ট করে calcTask() মেথডটি নিজস্ব বডি দিয়ে ডিফাইন করেছে। Rectangle ক্লাসটিও Machine ইন্টারফেস ইমপ্লিমেন্ট করেছে কিন্তু calcTask() মেথডটি Circle ক্লাসের calcTask() মেথড থেকে ভিন্ন বডি দিয়ে ডিফাইন করেছে। পলিমরফিজম গাইডলাইন বলে, এই কেসে টাস্ক ক্যালকুলেট করার সকল মেথডের একই নাম থাকবে। এখন, যখনই আমরা বিভিন্ন ক্লাসের জন্য টাস্ক কম্পিউট করতে চাই, তখন আমরা calcTask() নামে মেথড কল করব ভিন্ন মেশিনের জন্য টাস্ক কীভাবে ক্যালকুলেট করতে হয় সেটার ডিটেইলস চিন্তা না করে। একমাত্র জরুরি জিনিস হলো টাস্ক ক্যালকুলেট করার মেথডের নাম জানা।

  1. PHP-তে অ্যাবস্ট্রাক্ট ক্লাস (Abstract Class) ব্যাখ্যা

  2. PHP-তে ফাইনাল ক্লাস ও ফাইনাল মেথড ব্যাখ্যা

  3. PHP-তে স্ট্যাটিক (Static) এবং ইনস্ট্যান্স (Instance) মেথড ব্যাখ্যা

  4. PHP-এ interface_exists() ফাংশন