কাদের জন্যঃ Object-oriented programming language সম্পর্কে ধারণা আছে এমন মানুষ।
যা প্রয়োজনঃ class,inheritance,JavaScript সম্পর্কে পূর্ব ধারণা।
Adaptor Pattern: adaptor এর কাজ যেমন কাজে মিল নেই এমন দু'টি জিনিসকে নিয়ে একত্রে কাজ করা ,তেমনি adaptor pattern এর কাজ হলো অমিল দু'টি interface কে নিয়ে একসাথে কাজ করা একটি interface এর ভেতর পরিবর্তন ঘটিয়ে। এটি Structural Design Pattern এর মধ্যে পরে। উদাহরণে Pegasus হচ্ছে adaptor class । Horse interface দৌড়ানোর আর Bird interface উড়বার কাজ করছে।TamedH আর TamedB কেবল abstract Horse ও Bird class দু'টিকে implement করছে। কিন্তু Pegasus উড়তে পারে এমন এক ঘোড়া। কাজেই Pegasus ঘোড়ার বৈশিষ্ট্য inherit করছে Horse থেকে আর উড়বার জন্য তার পাখির বৈশিষ্ট্য লাগবে সেজন্য সে Bird object কে ব্যবহার করছে attribute হিসেবে ,যা composition এর উদাহরণ। যেহেতু সে উড়বে সেজন্য Horse থেকে পাওয়া তার run() method এ আমরা Bird এর fly() method এর ব্যবহার করেছি।
উদাহরণঃ
class Horse {
constructor(){}
run(){document. write(" ");}
}
class Bird{
constructor(){}
fly(){document. write(" ");}
}
class TamedH extends Horse{
constructor (){super();}
run(){
document. write("Horse runs...");
}
}
class TamedB extends Bird{
constructor (){super ();}
fly (){
document. write("Bird flies...");
}
}
class Pegasus extends Horse{
constructor(b){
super();
this.b=b;
}
run (){
document. write(" Inside Pegasus:");
this.b.fly ();
}
}
var t=new TamedH();
t.run ();
var a=new TamedB();
a.fly();
var f=new Pegasus (a);
f.run();
চেষ্টা করা যাক: Human এবং Doll নামের দু'টি interface বানাতে হবে। এদের talk() ও animate() নামের দু'টি method থাকবে। এদের implementing class/subclass বানাতে হবে। এবার TalkingDoll নামে একটি adaptor class তৈরি করতে হবে যে Doll কে inherit করে কিন্তু composition এ Human object ব্যবহার করে। তার animate() method এ talk() method থাকবে ।
কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia, আকর বই "'Design Patterns:Elements Of Reusable Object-Oriented Software' by Eric Gamma,Richard Helm,Ralph Johnson and John Vlissides(Addisson-Wesley.1994)" ও লেখকের তৈরি করা নানা program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com
No comments:
Post a Comment