Thursday, March 21, 2024

কম্পোজিট

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

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

Composite:যখন objects দের মাঝের সম্পর্ককে part-whole সম্পর্কে রূপ দেয়া যায় এবং user কোন পার্থক্য করতে চায় না সাধারণ object এবং অনেক objects এর composition এর মাঝে তখন Composite Design Pattern ব্যবহার করা হয়। প্রধান অংশগুলো হচ্ছে: Component(composition এ objects এর interface গঠন করে এবং সব class এর জন্য common behavior [এখানে des()] implement করে),Leaf(Composition এর leaf objects কে প্রতিনিধিত্ব করে; leaf/part object এর কোন সন্তান নেই), Composite(যেসব Component objects র সন্তান আছে তাদের behavior কে define করা এবং সন্তানদের ধারণ করা )। উদাহরণে Pen ও Pencil হচ্ছে PencilBox নামের Composite class এর parts/leaves। আবার এরা সবাই Component Item কে implement করছে। তবে Pen ও Pencil সরাসরি implement করছে আর Composite class PencilBox অনুরোধকে forward করছে তার child components এর কাছে।

উদাহরণ:
*/ //component
class Item{
constructor(){}
des(){}
}
//leaf
class Pen extends Item{
constructor(){super();}
des() {
document.write("Pen");
}
}
//leaf
class Pencil extends Item{
constructor(){super();}
des() {
document.write("Pencil");
}
}
//composite
class PencilBox extends Item{
constructor(){
super();
this.a=[];
}
add(s){
this.a.push(s);
}
remove (index){
this.a.splice(index,1);
}
des(){
document.write("Pencil Box:");
for(var k=0;k < this.a.length ; k++)
{
this.a[k].des();
}
}
}
var z=new Pen();
var c=new Pencil();
var b=new PencilBox();
b.add(c);
b.add(z);
b.des();
b.remove(0);
b.des();

চেষ্টা করা যাক:Bookshelf নামে একটি program লিখি। আগের মতই Item হচ্ছে আমাদের Component আর এবার leaf হচ্ছে Book, Exercisebook ও Notebook। Composite হচ্ছে Bookshelf। আগের মতই সবার des() 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