Delegation Pattern এর মাধ্যমে Object Communication

Protocols এবং Delegation (প্রোটোকল এবং ডেলিগেশন) - অবজেক্টিভ-সি (Objective-C) - Computer Programming

244

Delegation Pattern একটি অবজেক্ট-ওরিয়েন্টেড ডিজাইন প্যাটার্ন যা এক অবজেক্টের কাজ বা দায়িত্ব অন্য অবজেক্টকে Delegate (অথবা পাঠানো) করার মাধ্যমে কাজ করে। এই প্যাটার্নটি মূলত একটি অবজেক্ট অন্য একটি অবজেক্টকে দায়িত্ব দেয় এবং সেই অবজেক্ট কাজটি সম্পাদন করে, মূল অবজেক্টের বদলে। এইভাবে, একাধিক অবজেক্টের মধ্যে কমিউনিকেশন বা যোগাযোগ স্থাপন করা সম্ভব হয়।

Delegation হল অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP)-এর একটি মৌলিক কৌশল যা অনেক প্রোগ্রামিং ভাষায় ব্যবহৃত হয়, যেমন Objective-C, Swift, Java, এবং **C#**। এটি ব্যাপকভাবে ব্যবহৃত হয় অ্যাপ্লিকেশন ডিজাইন এবং ইভেন্ট হ্যান্ডলিং এর ক্ষেত্রে।


Delegation Pattern এর মূল ধারণা

  1. Sender (Delegator): এটি সেই অবজেক্ট যা কাজটি করতে সক্ষম নয় বা কাজটি অন্য অবজেক্টে প্রেরণ করতে চায়। এটি ডেলিগেট অবজেক্টকে অ্যাকশন বা দায়িত্ব পাঠায়।
  2. Receiver (Delegate): এটি সেই অবজেক্ট যা ডেলিগেটেড কাজটি সম্পাদন করবে। এটি কার্যক্রমের জন্য দায়ী।
  3. Protocol (Interface): ডেলিগেট অবজেক্টের সাথে যোগাযোগের জন্য একে প্রোটোকল বা ইন্টারফেসের মাধ্যমে যোগাযোগ করা হয়। এটি প্রোগ্রামের অন্যান্য অংশকে ডেলিগেট অবজেক্টের বৈশিষ্ট্য জানায়।

Delegation Pattern এর ব্যবহার উদাহরণ (Objective-C)

Objective-C-এ delegation প্যাটার্ন সাধারণত protocol ব্যবহার করে প্রয়োগ করা হয়। Sender অবজেক্ট তার কাজ Receiver (delegate) অবজেক্টের কাছে পাঠায়। প্রোটোকল (interface) অবজেক্টের মধ্যে যে মেথড বা আচরণ ডেলিগেট করা হচ্ছে তা ঘোষণা করে।

১. Sender এবং Delegate এর মধ্যে যোগাযোগ

// Delegate.h - Protocol Declaration
@protocol Delegate <NSObject>
- (void)didFinishTask;
@end

// Sender.h - Sender Class Declaration
#import <Foundation/Foundation.h>
#import "Delegate.h"

@interface Sender : NSObject
@property (nonatomic, weak) id<Delegate> delegate;
- (void)startTask;
@end

// Sender.m - Sender Class Implementation
#import "Sender.h"

@implementation Sender

- (void)startTask {
    // Task is started and completed
    NSLog(@"Task started!");
    
    // Notify delegate once task is finished
    [self.delegate didFinishTask];
}

@end

// Receiver.h - Receiver Class Declaration
#import <Foundation/Foundation.h>
#import "Delegate.h"

@interface Receiver : NSObject <Delegate>
- (void)didFinishTask;
@end

// Receiver.m - Receiver Class Implementation
#import "Receiver.h"

@implementation Receiver

- (void)didFinishTask {
    // Handle the task completion
    NSLog(@"Task completed by the delegate.");
}

@end

// Main.m - Usage Example
#import <Foundation/Foundation.h>
#import "Sender.h"
#import "Receiver.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Sender *sender = [[Sender alloc] init];
        Receiver *receiver = [[Receiver alloc] init];
        
        // Setting the delegate
        sender.delegate = receiver;
        
        // Start the task
        [sender startTask];
    }
    return 0;
}

ব্যাখ্যা:

  1. Delegate Protocol: প্রথমে Delegate নামে একটি প্রোটোকল ডিফাইন করা হয়েছে, যা একটি মেথড didFinishTask ঘোষণা করছে।
  2. Sender Class: Sender ক্লাসে একটি প্রপার্টি delegate রয়েছে যা Delegate প্রোটোকলকে সম্মত একটি অবজেক্টকে রেফার করে। startTask মেথডটি কাজ শুরু করার পরে ডেলিগেটকে অবহিত করার জন্য didFinishTask মেথড কল করে।
  3. Receiver Class: Receiver ক্লাসটি Delegate প্রোটোকল গ্রহণ করে এবং didFinishTask মেথডে কাজ করার সময় প্রয়োজনীয় ব্যবস্থা নেয়।
  4. Main: Sender অবজেক্টের delegate প্রপার্টি Receiver অবজেক্টে সেট করা হয়, এবং startTask মেথডটি কল করা হয়, যা ডেলিগেট অবজেক্টে যোগাযোগ করে।

আউটপুট:

Task started!
Task completed by the delegate.

Delegation Pattern এর সুবিধা

  1. Separation of Concerns: এটি কোডের ভিন্ন ভিন্ন অংশের মধ্যে দায়িত্ব ভাগ করে দেয়, ফলে একটি ক্লাস বা অবজেক্ট একাধিক দায়িত্ব না নিয়ে একটি নির্দিষ্ট কাজের জন্য মনোনিবেশ করতে পারে।
  2. Reuse: ডেলিগেশন প্যাটার্ন অবজেক্টের আচরণ পুনঃব্যবহারযোগ্য করে তোলে। এক ক্লাস একটি নির্দিষ্ট কাজের জন্য ডেলিগেট হতে পারে, এবং সেই কাজ অন্য ক্লাস দ্বারা পুনরায় ব্যবহৃত হতে পারে।
  3. Low Coupling: এক অবজেক্ট তার কাজ অন্য অবজেক্টকে ডেলিগেট করার মাধ্যমে, কোডের মধ্যে লো কপলিং (Low Coupling) স্থাপন হয়, অর্থাৎ দুইটি অবজেক্টের মধ্যে শক্তিশালী সম্পর্ক তৈরি হয় না, যা কোডে পরিবর্তন এবং রক্ষণাবেক্ষণ সহজ করে।

Delegation Pattern এর প্রকার

  1. One-to-One Delegation: এটি সবচেয়ে সাধারণ প্যাটার্ন, যেখানে একটি অবজেক্ট তার কাজ একটি একক ডেলিগেট অবজেক্টে পাঠায়। উপরের উদাহরণটি এর একটি চমৎকার উদাহরণ।
  2. One-to-Many Delegation: একাধিক ডেলিগেটকে একত্রে কাজ দেওয়া। এখানে এক ডেলিগেটের পরিবর্তে একাধিক অবজেক্ট কাজটি সম্পন্ন করবে। সাধারণত অ্যাপ্লিকেশনের ইভেন্ট হ্যান্ডলিং ব্যবস্থায় এই প্যাটার্ন ব্যবহার করা হয়।

Delegation Pattern এর অন্যান্য উদাহরণ

  1. UITableViewDelegate: UITableView বা UICollectionView এর মাধ্যমে ব্যবহৃত হয় যেখানে ভিউ (View) অবজেক্টের কিছু কার্যকলাপ (যেমন সেল নির্বাচন) ডেলিগেট করা হয়। UITableViewDelegate প্রোটোকলটি কল করা হয়।
  2. UIControlEvent: UIButton বা অন্যান্য কন্ট্রোল উপাদানের ইভেন্ট হ্যান্ডলিংয়ের জন্য ডেলিগেশন ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি বাটনে ট্যাপ করার পরে ডেলিগেট মেথড কল করা হয়।

সারাংশ

  • Delegation Pattern হলো একটি ডিজাইন প্যাটার্ন যা এক অবজেক্টের কাজ অন্য অবজেক্টে ডেলিগেট করার মাধ্যমে বাস্তবায়িত হয়।
  • এটি Separation of Concerns এবং Low Coupling নিশ্চিত করে, ফলে কোড ব্যবস্থাপনা সহজ হয়।
  • Objective-C এবং Swift ভাষায় এই প্যাটার্ন ব্যাপকভাবে ব্যবহৃত হয়, যেমন UITableViewDelegate, UIControlEvent, ইত্যাদি ক্ষেত্রে।
  • এটি অনেক ইভেন্ট-ভিত্তিক এবং UI প্রোগ্রামিং ডিজাইনে খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে।

Delegation প্যাটার্নের মাধ্যমে অবজেক্টগুলির মধ্যে যোগাযোগ স্থাপন এবং কার্যকলাপ ভাগ করে নেওয়া যায়, যা কোডের কার্যক্ষমতা এবং পুনঃব্যবহারযোগ্যতা উন্নত করে।

Content added By
Promotion

Are you sure to start over?

Loading...