Subtyping: এখানে এমন একটি function কাজ করে যা argument হিসেবে নেয় কেবল একটি নির্দিষ্ট type ও তার subtype কে। Object oriented programming এ এটি subclassing (inheritance) এর মাধ্যমে হয়ে থাকে।
উদাহরণে Nationality abstract class এবং তার subclass UK,Bangladesh, China এর সাহায্যে আমরা Demo class এর showNat() মেথডের মাধ্যমে নাগরিকত্ব দেখাতে চাচ্ছি। এজন্য এখানে Nationality'র object কে argument হিসেবে pass করা হচ্ছে। তারপর প্রযোজ্য subclass এর des() কে call করা হচ্ছে। C++ এ pointer arithmetic এর মাধ্যমে এটি করা হচ্ছে। এখানে Nationality base/abstract class এর des() কে virtual function () ঘোষণা করা হয়েছে যেন ভিন্ন ভিন্ন subclass এর object এর des() ভিন্ন ভিন্ন বার্তা/কাজ দেখাতে পারে। এখানে একই function des() কে call করলে বিভিন্ন subclass এর object অনুযায়ি এটি আলাদা আলাদা আচরণ করছে। এখানে n হলো একটি Nationality pointer object। এবং n নির্দেশ(point) করছে কোন একটি subclass এর object এর addressকে। কাজেই সরাসরি subclass এর object এর মাধ্যমে des() কে call না করে Pointer এর মাধ্যমে এটি করা হচ্ছে।
উদাহরণ(C++):
#include ‹iostream›
#include ‹string›
class Nationality{
public:
Nationality (){}
virtual std::string des()=0;
};
class UK:public Nationality{
public:
UK(){}
std::string des(){
return "British\n";
}
};
class Bangladesh:public Nationality{
public:
std::string des(){
return "Bangladeshi\n";
}
};
class China:public Nationality{
public:
China(){}
std::string des(){
return "Chinese \n";}
};
class Demo {
public:
Demo(){}
void showNat(Nationality *n){
std::cout«n->des();
}
};
int main()
{
China c;
Demo a;
Nationality * n=&c;
a.showNat(n);
Bangladesh b;
n=&b;
a.showNat(n);
return 0;
}
JavaScript যেহেতু type safe language তাই আমাদের এখানে compile time এ Demo class এ একটি Nationality object তৈরি করা হয়েছে,আর তারপর তাকে assign করা হচ্ছে showNat() এর argument কে । এরপর runtime এ যে object ই pass করা হচ্ছে তার des() এর বার্তা আমরা screen এ দেখতে পাচ্ছি। কারণ সব object ই Nationality class এর subclass।
উদাহরণ(JavaScript):
class Nationality{
constructor(){}
des(){}
}
class Bangladesh extends Nationality {
constructor(){super();}
des(){
return " Bangladeshi \n";
}
}
class Uk extends Nationality {
constructor(){super();}
des(){
return " British \n";
}
}
class China extends Nationality {
constructor(){super();}
des(){
return "Chinese\n";
}
}
class Demo{
constructor (){
this.s=new Nationality();
}
showNat(n){
this.s=n;
document.write(this.s.des());
}
}
var a=new Demo();
a.showNat(new China());
a.showNat(new Bangladesh());
কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia, internet ও আমার তৈরি করা নানা program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com
No comments:
Post a Comment