Polymorphism-এর মুল বিষয় হল, একাধিক অবজেক্ট বা ক্লাস একভাবে ব্যবহার করা যাবে। সহজ ভাষায় বলতে গেলে, polymorphism এর মাধ্যমে আমরা একই মেথড বিভিন্ন ধরনের অবজেক্টে ব্যবহার করতে পারি। এখন আমরা একটি গল্পের মাধ্যমে এই কনসেপ্টটা বোঝার চেষ্টা করবো।
গল্প: এক ফার্নিচার কোম্পানি
একটি ফার্নিচার কোম্পানি আছে যাদের বিভিন্ন ধরনের ফার্নিচার তৈরি হয়। ধরুন, তাদের প্রধান ৩টি ফার্নিচার হলো চেয়ার, টেবিল, এবং সোফা। প্রত্যেক ফার্নিচারেরই একটি মেথড আছে, যেটা হচ্ছে get_material()। এই মেথডটি বলে দেয়, ফার্নিচারটি কোন ম্যাটেরিয়াল দিয়ে তৈরি।
আমরা চাই প্রতিটি ফার্নিচার ক্লাসে একই নামের মেথড থাকবে, কিন্তু আলাদা আলাদা ভাবে কাজ করবে।
স্টেপ ১: একটি বেস ক্লাস তৈরি করা
প্রথমে আমরা একটি বেস ক্লাস Furniture তৈরি করবো। তারপর প্রতিটি ফার্নিচার ক্লাসে আমরা সেই বেস ক্লাসকে ইনহেরিট করবো।
class Furniture:
def get_material(self):
pass
এখানে আমরা get_material() মেথডটি ডিফাইন করেছি, কিন্তু এটা কোনো কাজ করছে না, কারণ আমরা চাই প্রতিটি সাব-ক্লাস এটাকে নিজের মত করে ইমপ্লিমেন্ট করবে।
স্টেপ ২: আলাদা আলাদা ফার্নিচার ক্লাস তৈরি করা
এবার আমরা তিনটি ক্লাস তৈরি করবো: Chair, Table, এবং Sofa। প্রত্যেকটি ক্লাস বেস ক্লাস থেকে ইনহেরিট করবে এবং তাদের নিজস্ব get_material() মেথড থাকবে।
class Chair(Furniture):
def get_material(self):
return "Chair is made of wood."
class Table(Furniture):
def get_material(self):
return "Table is made of metal."
class Sofa(Furniture):
def get_material(self):
return "Sofa is made of leather."
এখানে দেখুন, প্রতিটি ক্লাসে get_material() মেথডের ইমপ্লিমেন্টেশন ভিন্ন, কিন্তু নাম একই।
স্টেপ ৩: polymorphism ব্যবহার করা
এখন আমরা polymorphism ব্যবহার করে একই কোড দিয়ে আলাদা আলাদা ফার্নিচার অবজেক্ট হ্যান্ডেল করবো।
def print_material(furniture):
print(furniture.get_material())
# বিভিন্ন ফার্নিচার অবজেক্ট তৈরি করা
chair = Chair()
table = Table()
sofa = Sofa()
# একই ফাংশন দিয়ে সবগুলো ফার্নিচার ম্যানেজ করা
print_material(chair)
print_material(table)
print_material(sofa)
আউটপুট:
Chair is made of wood.
Table is made of metal.
Sofa is made of leather.
গল্পের সারমর্ম
এখন গল্পটা যদি বুঝে থাকেন, দেখবেন আমাদের Furniture ক্লাস হচ্ছে এক ধরনের ছাঁচ, যেটা বলে দেয় প্রতিটি ফার্নিচারের কি ফাংশন থাকবে। কিন্তু প্রতিটি সাব-ক্লাস নিজেদের মত করে সেই ফাংশনটি ইমপ্লিমেন্ট করে। আর আমাদের print_material ফাংশনটি polymorphism-এর ব্যবহার দেখাচ্ছে যেখানে আমরা একই ফাংশন দিয়ে বিভিন্ন ধরনের অবজেক্ট ম্যানেজ করছি।
এই ভাবে polymorphism কাজ করে—একটি সাধারণ ইন্টারফেস দিয়ে একাধিক ক্লাসকে হ্যান্ডেল করা যায়।