Saturday, March 2, 2024

কমান্ড

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

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

Command: এই pattern এ কোন class কোন কাজ সরাসরি নিজে না করে কোন command object এর মাধ্যমে করে এবং এটি কাজটি করতে পারে এমন objectকে আলাদা করে(decouple) কাজটি করবার জন্য বলছে এমন object থেকে ।আর class এর method গুলো আলাদা Command object এর মাধ্যমে সম্পন্ন করা হয়। চারটি অংশ রয়েছে এই pattern এ:

  • Command: যেটি Receiver object এর method কে call করছে।Command subclass এ Receiver object জমা থাকে। Receiver object আর কাজটির মধ্যে binding তৈরি করে দেয়।
  • Receiver: যার method command object করে দিচ্ছে।
  • Invoker:এটি জানে কিভাবে request করতে হয় command execute করবার জন্য। Command interface সম্পর্কে জানে তবে subclass/concrete Command সম্পর্কে জানে না।
  • Client: যে Receiver,Command এবং Invoker class সম্পর্কে জানে এবং ঠিক করে দেয় কোন Receiver object কে কোন Command object এ দিতে হবে আর কোন Commandটি Invoker দিয়ে করাতে হবে।

উদাহরণে TV Receiver class এর On() আর Off() নামের method দুটি TVOn আর TVOff নামের দুটি Command subclass এর perform () method এর মাধ্যমে সম্পন্ন করা হচ্ছে। Command subclass দু'টিতে Receiver class TV object আছে।TVOn subclassএ TV object আর On() method এর মধ্যে একটি binding তৈরি হয়েছে যা perform() এর মাধ্যমে বোঝা যাচ্ছে। আবার TVOff subclassএ একই ঘটনা ঘটছে Off() method কে ঘিরে। Invoker এর set() methodএ Command interface কে argument হিসেবে pass করা হয়েছে । আর action() method প্রযোজ্য Command object এর perform () method কে সংশ্লিষ্ট কাজ করার অনুরোধ করছে।

উদাহরণ:
class Command{
constructor(){}
perform(){}
}
//Receiver
class TV{
constructor(){}
on(){
document. write("Tv is on.
");
}
off(){
document. write("Tv is off.
");
}
}
class TVOn extends Command{
constructor( a){super();
this.a=a;}
perform(){
this.a.on();
}
}
class TVOff extends Command{
constructor(a){super();
this.a=a;}
perform(){
this.a.off();
}
}
class Invoker{
constructor(){}
set(a){this.a=a;}
action(){
this.a.perform();
}
}
//Client/User decides here
var k=new Invoker();
var t=new TV();
var s=new TVOn(t);
k.set(s);
k.action();

চেষ্টা করা যাক: BedSwitch নামে একটি program লিখতে হবে। BedSwitch নামের Receiver এ on() এবং off() নামে দু'টি method থাকবে। Command নামের abstract class এর SwtichOn এবং SwitchOff নামের subclass থাকবে।এদের সবার perform() নামক method থাকবে। আগের মতই Invoker থাকবে যার set() ও action() নামের 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