Tuesday, February 27, 2024

স্টেট

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

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

State Pattern:এটি object কে তার অবস্থার পরিবর্তনের সাথে সাথে behavior পরিবর্তন করতে দেয়। যখন behavior অবস্থার(state) উপর নির্ভর করে এবং run-time এ object কে তার behavior পরিবর্তন করতে হয় তখন State pattern ভাল ফল দেয়। আবার কোন program এ যদি অসংখ্য state কে if-else অথবা switch statements দিয়ে একটি class এর ভেতর প্রকাশ করা হয় তবে এটি জটিল হয়ে পড়ে এবং ভবিষ্যতে একে modify করাও কঠিন হয়ে পরে। আলাদা interface তৈরি করে প্রতিটি subclass যদি এক একটি state কে প্রতিনিধিত্ব করে এবং ঐ state এর সাথে জড়িত behavior কি হবে তা ঠিক করে দেয় তবে program কে ভবিষ্যতে আরো বিকাশের সুযোগ তৈরি হয়।এসব ক্ষেত্রেও State pattern বেশ কাজে দেয়।State pattern Behavioral Design Pattern এর দলে পরে।
উদাহরণে Bakery interface তার subclass Regular, Cookies,Muffin,ChocoCake এর মাধ্যমে bakery item এর state গুলো প্রকাশ করছে আর disp() method ঐ state এর behavior সম্পর্কে বলছে। Context নামে একটি class তৈরি করে তার attribute হিসেবে State object ব্যবহার করা হয়েছে। আর run-time এ set() method এর মাধ্যমে internal state পরিবর্তনের সুযোগ রাখা হয়েছে। Client/User এই Context class এর মাধ্যমে State object এর সাথে কাজ করবে। উদাহরণে Context এ current state হিসেবে Bakery তে ঠিক করা হয়েছে Regular state,যেটির behavior হচ্ছে Flat bread বানানো। এরপর run-time এ set() এর সাহায্যে State পরিবর্তন করে ChocoCake ঠিক করা হয়েছে,ফলে behaviorও পরিবর্তিত হয়ে Chocolate cake বানানোতে চলে গেছে।

উদাহরণঃ(script tags এর মাঝে নিচের কোড বসবে)

class Bakery{
constructor(){}
disp(){}
}
class Context{
constructor(a){this.a=a;}
set(c){this.a=c;}
request(){
this.a.disp();
}
}
class Regular extends Bakery{
constructor (){super();}
disp(){
document. write("Flat bread");
}
};
class Cookies extends Bakery{
constructor(){super();}
disp(){
document.write("Cookies");
}
}
class Muffin extends Bakery {
constructor(){super();}
disp(){
document.write("Muffin");
}
}
class ChocoCake extends Bakery{
constructor(){super ();}
disp(){
document.write("Chocolate cake");
}
}
var r =new Regular();
var c=new Context(r);
c.request();
var cc=new ChocoCake();
c.set(cc);
c.request();

চেষ্টা করা যাকঃ একটি program লিখি। CCTV নামে একটি interface যার Right,Left,Straight আর Rotate নামে subclass থাকবে আর সবার des() নামের method থাকবে যা behavior নির্দেশ করে। আগের মতই Context নামে class থাকবে। সবার আগে Context ছাড়া শুধু CCTV নামে একটি class এর ভেতর switch statements ব্যবহার করে Right,Left,Straight এই state গুলোকে ব্যবহার করে program টি লিখি। পরে State pattern ব্যবহার করে 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