পলিমরফিজম(Polymorphism)
পলিমরফিজম হচ্ছে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের চারটি প্রধান বৈশিষ্ট্যের একটি যা একটি অবজেক্ট কে বিভিন্ন কন্ডিশনে ভিন্ন ভিন্ন কাজ করার সুবিধা দেয়। যেমন ভিন্ন ভিন্ন ক্লাসে তাদের মেথডের নাম একই হলেও তাদের ইমপ্লিমেন্টেশন ভিন্ন ভিন্ন হতে পারে। পলিমরফিজম দুই ধরণের হয়ে থাকে,
১। কম্পাইল টাইম পলিমরফিজম (static/early binding)
২। রানটাইম পলিমরফিজম(dynamic/late binding)
Compile time Polymorphism
ফাংশন ওভারলোডিং এবং অপারেটর ওভারলোডিং হচ্ছে কম্পাইল টাইম পলিমরফিজম এর উপযুক্ত উদাহরণ। মনে করি আমাদের একই নামের একের অধিক ফাংশন আছে কিন্তু প্যারামিটার লিস্ট বা arguments এর সংখ্যার ভিন্নতা বা টাইপের ভিন্নতা আছে। কতগুলো প্যারামিটার এবং এদের টাইপ কি এর উপর ভিত্তি করে নির্দিষ্ট ফাংশন টি কল হবে।
fun(int a){} // function 1
fun(int a, int b){} // function 2
fun(int a, double b){} // function 3
fun(5); // function 1 will call
fun(5, 5.9); // function 3 will call
fun(5, 6); // function 2 will call
এই আচরণের জন্যে এটিকে বলা হয় পলিমরফিজম কারণ, বিভিন্ন কন্ডিশনে আমরা ভিন্ন ভিন্ন আচরণ দেখতেছি। যেহেতু কল কম্পাইল টাইমে নির্ধারণ করা হচ্ছে তাই এটি কে বলা হয় কম্পাইল টাইম পলিমরফিজম।
Run time Polymorphism
ফাংশন ওভাররাইডিং হচ্ছে রানটাইম পলিমরফিজম এর উপযুক্ত উদাহরণ। যদি চাইল্ড ক্লাসে এমন একটি মেথড তৈরি করা হয় যা প্যারেন্ট ক্লাসে আগে থেকেই আছে তাহলে এটি হচ্ছে ফাংশন ওভাররাইডিং।
class A { public: void print() { cout << "Parent Class" << endl; } };
class B : public A{ public: void print() { cout << "Child Class" << endl; } }; |
এখানে চাইল্ড ক্লাস প্যারেন্ট ক্লাস কে ওভাররাইট করেছে। যেহেতু রান টাইমে কল নির্ধারণ করা হয় তাই এটি কে বলা হয় রানটাইম পলিমরফিজম।
এই লেখাটি কিছুটা থিওরিটিক্যাল এবং ছোট। পলিমরফিজম ভালো করে বুঝার জন্য ফাংশন ওভারলোডিং, ফাংশন ওভাররাইডিং এবং ভার্চুয়াল ফাংশন নিয়ে পরিষ্কার ধারণা থাকা জরুরী। তাই পলিমরফিজম সেকশনে এগুলো নিয়ে আলাদা লেখা লিখছি। আশাকরছি পলিমরফিজম এর ধারণা পেয়েছেন এবং পরের লেখা গুলো তে আরো পরিষ্কার হয়ে যাবে।
This comment has been removed by the author.
ReplyDelete