অবজেক্টিভ-সি (Objective-C) তে ক্লাস ডিক্লারেশন এবং ইনিশিয়ালাইজেশন দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের মূল অংশ। এগুলি ক্লাস তৈরি এবং অবজেক্টের মান ইনিশিয়ালাইজ করার প্রক্রিয়া সহজ করে দেয়। নিচে ক্লাস ডিক্লারেশন এবং ইনিশিয়ালাইজেশন সম্পর্কিত বিস্তারিত আলোচনা করা হয়েছে।
১. ক্লাস ডিক্লারেশন (Class Declaration)
ক্লাস ডিক্লারেশন হল ক্লাসের কাঠামো, যেখানে আপনি ক্লাসের নাম, প্রপার্টি, মেথড, এবং অন্যান্য সদস্যদের ডিক্লেয়ার করেন। ক্লাস ডিক্লারেশন সাধারণত দুটি ফাইলের মাধ্যমে করা হয়:
- Header File (.h): এখানে ক্লাসের ইন্টারফেস (interface) ডিক্লেয়ার করা হয়।
- Implementation File (.m): এখানে ক্লাসের কার্যকারিতা (implementation) ডিক্লেয়ার করা হয়।
ক্লাস ডিক্লারেশন সিনট্যাক্স
// Header File (.h)
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
// প্রপার্টি
@property (nonatomic, strong) NSString *name;
@property (nonatomic) int age;
// মেথড ডিক্লারেশন
- (void) displayDetails;
@endএখানে:
@interface: ক্লাসের ইন্টারফেস ডিক্লেয়ার করার জন্য ব্যবহৃত হয়।MyClass: ক্লাসের নাম।NSObject: এর মানে হচ্ছে,MyClassক্লাসটিNSObjectক্লাস থেকে উত্তরাধিকারী।@property: প্রপার্টি ডিক্লেয়ার করে, যা ক্লাসের অ্যাট্রিবিউট হিসেবে ব্যবহৃত হবে।- (void) displayDetails: একটি মেথড ডিক্লেয়ার করা হয়েছে, যেটিvoidরিটার্ন টাইপের।
ক্লাস ইমপ্লিমেন্টেশন (Implementation)
// Implementation File (.m)
#import "MyClass.h"
@implementation MyClass
// মেথড ইমপ্লিমেন্টেশন
- (void) displayDetails {
NSLog(@"Name: %@, Age: %d", self.name, self.age);
}
@endএখানে:
@implementation: ক্লাসের কার্যকারিতা বা মেথড ইমপ্লিমেন্টেশনের জন্য ব্যবহৃত হয়।self.nameএবংself.age: এই প্রপার্টিগুলির মান অ্যাক্সেস এবং ম্যানিপুলেশন করা হয়।
২. ক্লাস ইনিশিয়ালাইজেশন (Class Initialization)
ক্লাস ইনিশিয়ালাইজেশন হল ক্লাসের অবজেক্ট তৈরি করার প্রক্রিয়া, যাতে অবজেক্টের প্রপার্টি গুলি ডিফল্ট মান নিয়ে ইনিশিয়ালাইজ হয়। অবজেক্টিভ-সি তে ইনিশিয়ালাইজেশন সাধারণত init মেথডের মাধ্যমে করা হয়।
ক্লাস ইনিশিয়ালাইজেশন সিনট্যাক্স
// Header File (.h)
@interface MyClass : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic) int age;
- (instancetype) initWithName:(NSString *)name age:(int)age;
@endএখানে, initWithName:age: একটি কাস্টম ইনিশিয়ালাইজার মেথড। এটি name এবং age প্রপার্টি ইনিশিয়ালাইজ করতে ব্যবহার করা হবে।
ইনিশিয়ালাইজেশন মেথড ইমপ্লিমেন্টেশন
// Implementation File (.m)
@implementation MyClass
- (instancetype) initWithName:(NSString *)name age:(int)age {
self = [super init];
if (self) {
_name = name;
_age = age;
}
return self;
}
@endএখানে:
self = [super init]: প্রথমে সুপারক্লাসেরinitমেথড কল করা হয়।if (self): ইনিশিয়ালাইজেশন সফল হলে, প্রপার্টি গুলিকে ইনিশিয়ালাইজ করা হয়।_name = name;:_nameপ্রপার্টি ইনিশিয়ালাইজ করা হচ্ছে।
ক্লাস ইনিশিয়ালাইজেশন ব্যবহার
এখন এই কাস্টম ইনিশিয়ালাইজার মেথড ব্যবহার করে অবজেক্ট তৈরি করা যেতে পারে:
MyClass *person = [[MyClass alloc] initWithName:@"John" age:30];
[person displayDetails];এখানে:
[[MyClass alloc] initWithName:@"John" age:30]: অবজেক্ট তৈরি এবং ইনিশিয়ালাইজ করা হচ্ছে।displayDetails: অবজেক্টের মেথড কল করে প্রপার্টি গুলি প্রদর্শন করা হচ্ছে।
৩. instancetype কী?
instancetype একটি বিশেষ কিওয়ার্ড যা ব্যবহৃত হয় কাস্টম ইনিশিয়ালাইজার মেথডে। এটি একটি টাইপ নিরাপদ রিটার্ন টাইপ হিসাবে কাজ করে, অর্থাৎ এটি নিশ্চিত করে যে init মেথড থেকে রিটার্ন করা অবজেক্টটি সঠিক টাইপের।
৪. @synthesize (স্বয়ংক্রিয় প্রপার্টি জেনারেশন)
Objective-C তে, আপনি যদি @property ডিক্লেয়ার করেন, তাহলে অ্যাট্রিবিউটটির জন্য স্বয়ংক্রিয়ভাবে সিঁচার এবং গেটার মেথড তৈরি হয়। তবে, পুরনো Objective-C সংস্করণে, @synthesize কিওয়ার্ড ব্যবহৃত হত, তবে এখন এটি প্রযোজ্য নয় কারণ প্রপার্টি সিনথেসাইজ করা এখন স্বয়ংক্রিয়।
@synthesize name = _name; // পুরনো কৌশল, বর্তমানে এটি স্বয়ংক্রিয়উপসংহার
- ক্লাস ডিক্লারেশন: এটি ক্লাসের কাঠামো তৈরি করে এবং ক্লাসের প্রপার্টি, মেথড ইত্যাদি ডিক্লেয়ার করা হয়। এটি সাধারণত
.hফাইলে থাকে। - ক্লাস ইনিশিয়ালাইজেশন: এটি ক্লাসের অবজেক্ট তৈরি এবং প্রপার্টি গুলি ডিফল্ট মান দিয়ে ইনিশিয়ালাইজ করে।
initমেথড ব্যবহৃত হয়।
এই দুটি কনসেপ্ট Objective-C তে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ এবং কোডের সংগঠন এবং ব্যবস্থাপনা সহজ করে তোলে।
Read more