Instance Variables অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের (OOP) একটি গুরুত্বপূর্ণ ধারণা, যা ক্লাসের মধ্যে সংরক্ষিত তথ্য বা স্টেট রক্ষার জন্য ব্যবহৃত হয়। Objective-C তে Instance Variables একটি ক্লাসের অবজেক্টে থাকা ডেটার প্রতিনিধিত্ব করে, যা শুধুমাত্র ঐ ক্লাসের ইন্সট্যান্সের (অবজেক্ট) মাধ্যমে অ্যাক্সেস করা যায়। এই ভেরিয়েবলের মান প্রতিটি অবজেক্টের জন্য আলাদা থাকে।
১. Instance Variables (প্রাইভেট ভেরিয়েবল)
Instance Variables হল সেই ভেরিয়েবলগুলো যা ক্লাসের অবজেক্টে সংরক্ষিত থাকে। এগুলো সাধারণত @interface এবং @implementation এর মধ্যে সংজ্ঞায়িত করা হয়। ইনস্ট্যান্স ভেরিয়েবল সাধারণত প্রাইভেট হয়, অর্থাৎ, এগুলি ক্লাসের বাইরের কোড থেকে সরাসরি অ্যাক্সেস করা যায় না। তবে, getter এবং setter মেথড ব্যবহার করে এগুলোর মান সেট এবং রিট্রিভ করা সম্ভব।
উদাহরণ:
// @interface - ক্লাসের প্রাইভেট ভেরিয়েবল
@interface Car : NSObject {
NSString *model; // instance variable
NSInteger year; // instance variable
}
- (void) setModel: (NSString *)newModel;
- (NSString *) getModel;
- (void) setYear: (NSInteger)newYear;
- (NSInteger) getYear;
@end
// @implementation - মেথড ডিফিনেশন
@implementation Car
- (void) setModel: (NSString *)newModel {
model = newModel; // মডেল পরিবর্তন
}
- (NSString *) getModel {
return model; // মডেল রিটার্ন
}
- (void) setYear: (NSInteger)newYear {
year = newYear; // বছর পরিবর্তন
}
- (NSInteger) getYear {
return year; // বছর রিটার্ন
}
@endএখানে model এবং year হলো instance variables যা Car ক্লাসের অবজেক্টে সংরক্ষিত থাকে। এগুলোর মান setModel: এবং setYear: মেথডের মাধ্যমে সেট করা হয়, এবং getModel এবং getYear মেথডের মাধ্যমে রিট্রিভ করা হয়।
২. Instance Variables এর ম্যানিপুলেশন
Instance Variables এর মান ম্যানিপুলেট করার জন্য সাধারণত getter এবং setter মেথড ব্যবহার করা হয়, যা ভেরিয়েবলগুলির অ্যাক্সেস কন্ট্রোল করতে সাহায্য করে। Objective-C তে ইনস্ট্যান্স ভেরিয়েবলগুলোর অ্যাক্সেস সঠিকভাবে পরিচালনার জন্য properties ব্যবহৃত হয়, যা getter এবং setter মেথডের কাজ সহজ করে দেয়।
Properties ব্যবহারের মাধ্যমে instance variables এর ম্যানিপুলেশন:
Objective-C তে properties ব্যবহারের মাধ্যমে মেমরি ম্যানেজমেন্ট এবং getter/setter মেথডের কাজ সহজ হয়। এটি @property এবং @synthesize নির্দেশক দিয়ে করা হয়।
উদাহরণ:
@interface Car : NSObject
@property NSString *model; // property, instance variable হবে
@property NSInteger year; // property, instance variable হবে
@end
@implementation Car
// @synthesize দ্বারা getter এবং setter মেথড তৈরি হবে
@endএখানে, model এবং year হলো প্রপার্টি যা স্বয়ংক্রিয়ভাবে getter এবং setter মেথড তৈরি করে। এখন, আপনি সরাসরি প্যারেন্ট ক্লাসের মেথড ব্যবহার করে এই ভেরিয়েবলের মান অ্যাক্সেস বা পরিবর্তন করতে পারবেন।
Car *myCar = [[Car alloc] init];
myCar.model = @"Tesla"; // setter মেথড কল হবে
myCar.year = 2022; // setter মেথড কল হবে
NSLog(@"Car Model: %@", myCar.model); // getter মেথড কল হবে
NSLog(@"Car Year: %ld", (long)myCar.year); // getter মেথড কল হবেএখানে model এবং year প্যারেন্ট ক্লাসের ভেরিয়েবলগুলোর মান getter এবং setter মেথডের মাধ্যমে পরিবর্তিত হচ্ছে।
৩. Instance Variables এর Access Control
Objective-C তে, আপনি ক্লাসের ইনস্ট্যান্স ভেরিয়েবলগুলোর অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। প্রাইভেট ভেরিয়েবলগুলি সাধারণত @interface এবং @implementation এর মধ্যে সংজ্ঞায়িত হয়, এবং পাবলিক ভেরিয়েবলগুলোর জন্য @public, @private, বা @protected অ্যাক্সেস কন্ট্রোল করা যায়।
উদাহরণ:
@interface Car : NSObject {
@private
NSString *model; // শুধুমাত্র ক্লাসের অভ্যন্তরে অ্যাক্সেসযোগ্য
@public
NSInteger year; // বাইরে থেকেও অ্যাক্সেসযোগ্য
}
@endএখানে, model একটি প্রাইভেট ভেরিয়েবল যা ক্লাসের বাইরের কোড থেকে অ্যাক্সেস করা যাবে না, কিন্তু year একটি পাবলিক ভেরিয়েবল যা বাইরের কোড থেকেও অ্যাক্সেস করা সম্ভব।
৪. Encapsulation (এনক্যাপসুলেশন)
এনক্যাপসুলেশন একটি OOP কনসেপ্ট যা instance variables এর মাধ্যমে বাস্তবায়িত হয়। এই কনসেপ্টের মাধ্যমে, একটি ক্লাসের ভেরিয়েবল এবং মেথডগুলিকে একত্রিত করে একটি সুরক্ষিত ইউনিট তৈরি করা হয়, যাতে বাইরের কোড ওই ভেরিয়েবলগুলির সরাসরি অ্যাক্সেস না পায়। শুধুমাত্র getter এবং setter মেথড ব্যবহার করে বাইরের কোড ভেরিয়েবলগুলির মান রিট্রিভ বা সেট করতে পারে।
উদাহরণ:
@interface Car : NSObject
{
NSString *model; // private instance variable
}
- (void) setModel: (NSString *)newModel; // setter method
- (NSString *) getModel; // getter method
@end
@implementation Car
- (void) setModel: (NSString *)newModel {
model = newModel;
}
- (NSString *) getModel {
return model;
}
@endএখানে, model ভেরিয়েবলটি প্রাইভেট, এবং বাইরের কোড শুধুমাত্র getter এবং setter মেথড ব্যবহার করে এর মান অ্যাক্সেস করতে পারে। এতে কোডের নিরাপত্তা বৃদ্ধি পায় এবং ভেরিয়েবলগুলোর ম্যানিপুলেশন সুনির্দিষ্টভাবে করা যায়।
সারাংশ
- Instance Variables হলো ক্লাসের অবজেক্টে সংরক্ষিত ভেরিয়েবল, যা প্রতিটি অবজেক্টের জন্য আলাদা থাকে।
- এগুলোর মান পরিবর্তন বা অ্যাক্সেস করার জন্য সাধারণত getter এবং setter মেথড ব্যবহার করা হয়।
- Encapsulation এবং Access Control এর মাধ্যমে ইনস্ট্যান্স ভেরিয়েবলগুলির নিরাপত্তা নিশ্চিত করা যায়, এবং কোডের গঠন আরও সুনির্দিষ্ট এবং সুরক্ষিত থাকে।
Read more