ডেলিগেশন প্যাটার্ন হলো Swift বা অন্যান্য অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষায় একটি গুরুত্বপূর্ণ এবং বহুল ব্যবহৃত ডিজাইন প্যাটার্ন, যা একটি অবজেক্ট তার দায়িত্ব বা কার্যক্রম আরেকটি অবজেক্টের কাছে অর্পণ করতে ব্যবহার করে। এটি কোডকে আরও মডুলার, পুনঃব্যবহারযোগ্য এবং মেইনটেইনেবল করে তোলে।
Swift-এ ডেলিগেশন প্যাটার্ন
Swift-এ ডেলিগেশন সাধারণত প্রোটোকল (protocol) এবং ক্লাস বা স্ট্রাক্ট ব্যবহার করে ইমপ্লিমেন্ট করা হয়। একটি অবজেক্ট (ডেলিগেটর) ডেলিগেট প্রোটোকলের মাধ্যমে তার কিছু কাজ ডেলিগেট (অন্য অবজেক্ট) এর কাছে অর্পণ করে।
ডেলিগেশন প্যাটার্নের উপাদান
১. প্রোটোকল (Protocol): এটি ডেলিগেটর ক্লাস বা স্ট্রাক্টের জন্য একটি রুল বা নির্দেশিকা তৈরি করে, যা ডেলিগেট ক্লাস বা স্ট্রাক্টকে অনুসরণ করতে হয়। ২. ডেলিগেটর (Delegator): এটি মূল ক্লাস বা অবজেক্ট, যেটি তার কিছু কাজ ডেলিগেটের কাছে পাঠায়। ৩. ডেলিগেট (Delegate): এটি সেই ক্লাস বা অবজেক্ট, যা ডেলিগেটর থেকে কাজ গ্রহণ করে এবং প্রোটোকল অনুযায়ী কাজ সম্পন্ন করে।
ডেলিগেশন প্যাটার্নের উদাহরণ
আমরা একটি সাধারণ উদাহরণ ব্যবহার করবো যেখানে একটি ক্লাস Teacher শিক্ষার্থীকে (অন্য ক্লাস) একটি কাজ ডেলিগেট করছে। শিক্ষার্থীরা বিভিন্ন কাজ করে এবং তাদের কাজের ফলাফল প্রদর্শন করে।
ধাপ ১: প্রোটোকল তৈরি করা
প্রথমে আমরা একটি প্রোটোকল তৈরি করবো, যা ডেলিগেটর (Teacher) ব্যবহার করবে এবং ডেলিগেট (Student) অনুসরণ করবে।
protocol HomeworkDelegate: AnyObject {
func completeAssignment(topic: String)
}
এখানে, HomeworkDelegate প্রোটোকলটি একটি মেথড ডিফাইন করছে completeAssignment(topic:), যা ডেলিগেটর ডেলিগেটকে কল করবে।
ধাপ ২: ডেলিগেটর ক্লাস তৈরি করা
এরপর আমরা Teacher ক্লাস তৈরি করবো, যা এই প্রোটোকল ব্যবহার করবে এবং ডেলিগেটকে কাজ অর্পণ করবে।
class Teacher {
weak var delegate: HomeworkDelegate? // ডেলিগেট প্রপার্টি
func assignHomework(topic: String) {
print("Teacher assigned homework on: \(topic)")
delegate?.completeAssignment(topic: topic)
}
}
এখানে, Teacher ক্লাসে একটি delegate প্রপার্টি আছে, যা HomeworkDelegate প্রোটোকল অনুসরণকারী কোনো অবজেক্টকে রেফারেন্স করে। assignHomework মেথডে ডেলিগেটকে কল করা হচ্ছে যাতে ডেলিগেট কাজটি সম্পন্ন করতে পারে।
ধাপ ৩: ডেলিগেট ক্লাস তৈরি করা
এরপর আমরা Student ক্লাস তৈরি করবো, যা HomeworkDelegate প্রোটোকল অনুসরণ করবে এবং কাজ সম্পন্ন করবে।
class Student: HomeworkDelegate {
var name: String
init(name: String) {
self.name = name
}
func completeAssignment(topic: String) {
print("\(name) completed the assignment on: \(topic)")
}
}
এখানে, Student ক্লাস HomeworkDelegate প্রোটোকল অনুসরণ করছে এবং completeAssignment মেথড ইমপ্লিমেন্ট করছে।
ধাপ ৪: ডেলিগেশন সেটআপ এবং কাজ সম্পাদন করা
এখন আমরা Teacher এবং Student এর অবজেক্ট তৈরি করবো এবং ডেলিগেট প্যাটার্ন ইমপ্লিমেন্ট করবো।
let teacher = Teacher()
let student = Student(name: "Alice")
teacher.delegate = student // ডেলিগেট সেট করা
teacher.assignHomework(topic: "Mathematics")
আউটপুট:
Teacher assigned homework on: Mathematics
Alice completed the assignment on: Mathematics
এখানে, Teacher তার delegate প্রপার্টি হিসেবে student অবজেক্ট সেট করেছে। এরপর, assignHomework কল করার সময় Teacher ডেলিগেটকে কল করেছে, এবং Student ক্লাসের completeAssignment মেথডটি কাজ সম্পন্ন করেছে।
কেন ডেলিগেশন প্যাটার্ন ব্যবহার করা হয়?
১. কোডকে মডুলার এবং পুনঃব্যবহারযোগ্য করা: ডেলিগেশন প্যাটার্ন ব্যবহার করে কোডকে সহজে আলাদা এবং পুনঃব্যবহারযোগ্য করা যায়। ২. ক্লাসগুলির মধ্যে যোগাযোগ সহজ করা: দুটি ক্লাস একে অপরের সাথে সরাসরি যুক্ত না থেকে প্রোটোকল ব্যবহার করে ইন্টারঅ্যাক্ট করতে পারে। ৩. লুজ কাপলিং (Loose Coupling): ডেলিগেট এবং ডেলিগেটর একে অপরের উপর খুব বেশি নির্ভরশীল নয়, যার ফলে এক ক্লাস পরিবর্তন করলে অন্য ক্লাসে কম প্রভাব পড়ে।
উপসংহার
Swift-এ ডেলিগেশন প্যাটার্ন:
- একটি সাধারণ ডিজাইন প্যাটার্ন, যা কাজ অর্পণ করতে ব্যবহৃত হয়।
- প্রোটোকল এবং ডেলিগেট ব্যবহার করে এটি ক্লাসগুলির মধ্যে যোগাযোগ করে এবং কোডকে আরও মডুলার এবং মেইনটেইনেবল করে তোলে।
- অ্যাপল এর UIKit-এ বিভিন্ন ক্ষেত্রে ডেলিগেশন প্যাটার্ন ব্যবহার করা হয়, যেমন
UITableViewDelegate,UICollectionViewDelegateইত্যাদি।
Swift প্রোগ্রামিংয়ে ডেলিগেশন প্যাটার্ন একটি অত্যন্ত গুরুত্বপূর্ণ ধারণা, যা অ্যাপ্লিকেশনকে আরও রেসপন্সিভ, পুনঃব্যবহারযোগ্য এবং কার্যকর করে তোলে।