Friday, April 5, 2024

ভিজিটর

কাদের জন্যঃ Object-oriented programming language সম্পর্কে ধারণা আছে এমন মানুষ।

যা প্রয়োজনঃclass,inheritance,composition,JavaScript সম্পর্কে পূর্ব ধারণা।

Visitor:এটি objectsএ বিভিন্ন behavior যোগ করতে সাহায্য করে objectsএর নিজ নিজ class এর ভেতর কোন পরিবর্তন না ঘটিয়ে। দু'টি প্রধান উপাদান হচ্ছে: Visitor ও Visitable Element(যার object এর উপর behavior যোগ করা হবে)। এক্ষেত্রে behaviors গুলো নানা methods আকারে Visitor class এ থাকে। আর Visitable Element class এ object এর গঠন কিরকম হবে তা নিয়ে ব্যস্ত থাকে আর তার accept() মেথড থাকে যা Visitor object কে argument হিসেবে নেয় এবং প্রযোজ্য Visitor methodকে ব্যবহার করে। উদাহরণে Cost এবং CostWithVat হল Visitor class ProdVisitor এর implementation। আর Banana ও Milk হচ্ছে Visitable Elements class এর উদাহরণ। Runtime এ আমরা Cost কেমন দেখতে চাই ---VAT সহ না VAT ছাড়া--তাই এখানে দেখানো হচ্ছে। এটি করতে গিয়ে আমাদের Banana ও Milk class এ কোন পরিবর্তন করতে হয়নি।

উদাহরণ:
class ProdVisitor{
constructor(){}
vstBanana(banana){}
vstMilk(milk){}
}
class Cost extends ProdVisitor{
constructor(){super();}
vstBanana(banana) {
return banana.price * banana. qty;
}
vstMilk(milk) {
return milk.price * milk.qty;
}
}
class CostWithVat extends ProdVisitor{
constructor(){super();}
vstBanana(banana) {
var a=0.15*(banana.price * banana. qty);
return (banana.price * banana. qty)+a;
}
vstMilk(milk) {
var m=0.15*(milk.price*milk.qty);
return (milk.price * milk.qty)+m;
}
}
class Banana {
constructor (p,q){
this.price=p;
this.qty=q;
}
accept (visitor){
return visitor.vstBanana(this);
}
}
class Milk{
constructor (p,q){
this.price=p;
this.qty=q;
}
accept (visitor){
return visitor.vstMilk(this);
}
}
var b=new Banana(10,1);
var l=new Milk(25,1);
var cost=new Cost();
var vcost=new CostWithVat();
var bcost=b.accept(cost);
var mvcost=l.accept (vcost);
document.write(bcost);
document.write(mvcost);

চেষ্টা করা যাক:ProdVisitor এর বিকাশ ঘটাতে এতে CostWithDelivery class নামে নতুন class যোগ করি যা cost এর সাথে বাড়তি ৫০ টাকা যোগ করবে delivery charge হিসেবে। Program টি নতুন করে আবার লিখি।

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে 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