Friday, March 15, 2024

আইটেরেটর

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

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

Iterator: এটি Behavioral Design Pattern দলের। Aggregate object যেমন List এর ভেতরকার জিনিস প্রকাশ না করে ক্রম অনুযায়ী item গুলো একে একে প্রবেশের উপায় বের করে এই pattern। List এবং ক্রম অনুযায়ী item গুলো একে একে প্রবেশ করার (traversal) কাজ দুটিকে আলাদা দু'টি interface এ ফেলা হয়। এদের একটি List interface এবং অপরটি হলো Iterator interface। Aggregate object এর নানাবিধ traversal পেতে এই pattern ব্যবহার করা যায় (যেমন সবশেষ item থেকে প্রথম item এ যাওয়া)। এছাড়া একই Iterator interface কে ভিন্ন Aggregate object এর traversal এর কাজেও এই pattern ব্যবহার করা যায়। এখানে কোন Abstract class ব্যবহার করা হয়নি। আমরা চাইলে List ও Iterator এর জন্য দু'টি abstract class নিয়ে দরকারি method ভেতরে জুড়ে দিয়ে তারপর subclassing এর মাধ্যমে interface দু'টির বিকাশ ঘটাতে পারি। যেমন List interface এর Product এবং Beverage নামের দু'টি subclass থাকতে পারে। উদাহরণে ProductList classটির constructor একটি list কে initialize করছে তারপর add() এর সাহায্যে user থেকে item নিয়ে list এর push() কে call করছে । getIterator() নামক factory method এর সাহায্যে ListIterator object তৈরি করছে। ListIterator এর constructorএ list object কে parameter হিসেবে নিচ্ছে আর indexকে initialize করছে। hasNext() দেখছে index কি list এর length এর চেয়ে ছোট কি না; ছোট হলে traversal এর কাজটা চলতে থাকবে। first() প্রথম এবং last() শেষ item কে return করছে। next() একটি থেকে আরেকটি itemএ নিয়ে যাচ্ছে index increment এর সাহায্যে।

উদাহরণ:
class ProductList {
constructor() {
this.list = [];
}
add(item) {
this.list.push(item);
}
getIterator() {
return new ListIterator(this);
}
}
class ListIterator {
constructor(list) {
this.list = list.list;
this.index = 0;
}
hasNext() {
return this.index < this.list.length;
}
first(){return this.list[0];}
last(){return this.list[this.list.length-1];}
next() {
return this.list[this.index++];
}
}
const Product = new ProductList();
Product.add("Milk");
Product.add("Pudding");
Product.add("Butter");
const iterator = Product.getIterator();
while (iterator.hasNext()) {
document. write(iterator.next());
}
document. write(Product.getIterator().first());
document. write(Product.getIterator().last());

চেষ্টা করা যাক: ProducList এর মত BeverageList নিয়ে program টি লিখি। ListIterator এ কেবল জোড় index এর item দেখানোর জন্য একটি method() জুড়ে দিয়ে program টি আবার লিখি।

কৃতজ্ঞতাঃ এই লেখা তৈরি করতে দরকারি তথ্য নেয়া হয়েছে Wikipedia,www.geeksforgeeks.org,আকর বই "'Design Patterns:Elements Of Reusable Object-Oriented Software' by Eric Gamma,Richard Helm,Ralph Johnson and John Vlissides(Addisson-Wesley.1994)" ও https://www.geeksforgeeks.org/iterator-method-javascript-design-pattern/ এ ব্যবহৃত program থেকে।
মন্তব্য ও যোগাযোগঃ mrh4478@gmail.com

No comments:

Post a Comment