অবজেক্টিভ-সি (Objective-C) একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা, এবং এটি সি ভাষার উপর ভিত্তি করে তৈরি। এর কোড স্ট্রাকচার সি ভাষার সাদৃশ্য হলেও কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে, বিশেষ করে অবজেক্ট এবং মেসেজ পাসিং সিস্টেমের ব্যবহার। অবজেক্টিভ-সি কোডের মূল স্ট্রাকচার অনেকটা সি ভাষার মতো, তবে কিছু অতিরিক্ত ফিচার থাকে যা অবজেক্ট-ওরিয়েন্টেড ধারণাগুলোর বাস্তবায়ন ঘটায়।
নিচে Objective-C এর কোড স্ট্রাকচারের মূল উপাদানগুলি আলোচনা করা হয়েছে:
১. প্রধান অংশ: #import বা #include নির্দেশনা
অবজেক্টিভ-সি কোডে বিভিন্ন ফ্রেমওয়ার্ক বা লাইব্রেরি ব্যবহারের জন্য #import বা #include ডিরেকটিভ ব্যবহার করা হয়। এতে আপনি অন্যান্য ফাইলগুলোকে কোডে অন্তর্ভুক্ত করতে পারেন। সাধারণত, #import ব্যবহৃত হয় কারণ এটি একাধিক ফাইল ইনক্লুড করার ক্ষেত্রে সমস্যার সৃষ্টি হতে দেয় না (যেমন সি তে #include).
#import <Foundation/Foundation.h> // ফাউন্ডেশন ফ্রেমওয়ার্ক২. ইন্টারফেস (@interface)
অবজেক্টিভ-সি তে একটি ক্লাসের ইন্টারফেস @interface কিওয়ার্ড দিয়ে ডিফাইন করা হয়। এখানে আপনি ক্লাসের প্রপার্টি এবং মেথড ডিক্লেয়ার করেন। একটি ক্লাসের ইন্টারফেস সাধারণত .h ফাইল (হেডার ফাইল) এ থাকে।
উদাহরণ:
@interface Car : NSObject // Car ক্লাস NSObject থেকে উত্তরাধিকারী
@property NSString *model;
@property int year;
- (void) displayCarDetails; // মেথড ঘোষণা
@end@interface: ক্লাসের ইন্টারফেসের শুরু।@property: ক্লাসের প্রপার্টি ঘোষণা (যেমন: model, year)।- (void): মেথড ডিক্লেয়ারেশন, যেটি ক্লাসের কাজের অংশ।
৩. ইমপ্লিমেন্টেশন (@implementation)
ক্লাসের কার্যকরী অংশ (মেথড ইমপ্লিমেন্টেশন) @implementation কিওয়ার্ড দিয়ে ডিফাইন করা হয়। এটি সাধারণত .m ফাইল (এমপ্লিমেন্টেশন ফাইল) এ থাকে। এখানে আপনি ক্লাসের মেথডগুলোর বাস্তবায়ন করেন।
উদাহরণ:
@implementation Car
- (void) displayCarDetails { // মেথড বাস্তবায়ন
NSLog(@"Car Model: %@, Year: %d", self.model, self.year);
}
@end@implementation: ক্লাসের বাস্তবায়ন শুরু।- (void): মেথড বাস্তবায়ন, যা ক্লাসের কার্যক্রম চালায়।
৪. মেইন ফাংশন (main)
অবজেক্টিভ-সি প্রোগ্রামের এন্ট্রি পয়েন্ট হল main ফাংশন, যেখানে প্রোগ্রামটি চালু হয়। সাধারণত এটি একটি @autoreleasepool ব্লক ব্যবহার করে, যা মেমরি ম্যানেজমেন্টে সাহায্য করে।
উদাহরণ:
int main(int argc, const char * argv[]) {
@autoreleasepool {
Car *myCar = [[Car alloc] init]; // নতুন Car অবজেক্ট তৈরি
myCar.model = @"Tesla Model S"; // প্রপার্টি সেট করা
myCar.year = 2022;
[myCar displayCarDetails]; // মেথড কল করা
}
return 0;
}@autoreleasepool: এটি একটি মেমরি ম্যানেজমেন্ট ব্লক, যা অবজেক্টগুলোকে অটোমেটিকালি রিলিজ করতে সাহায্য করে।allocএবংinit: অবজেক্ট তৈরি করার জন্য ব্যবহার করা হয়।[myCar displayCarDetails]: মেসেজ পাসিং সিস্টেমের মাধ্যমে মেথড কল।
৫. মেসেজ পাসিং সিস্টেম
অবজেক্টিভ-সি তে মেসেজ পাসিং সিস্টেম ব্যবহৃত হয়, যেখানে ক্লাসের অবজেক্ট অন্য অবজেক্টে মেসেজ পাঠিয়ে ফাংশন বা মেথড কল করে।
[object method]; // মেসেজ পাঠানোএটি সি তে ব্যবহৃত সাধারণ ফাংশন কলের তুলনায় আলাদা। এখানে মেসেজ পাঠানো হচ্ছে এবং ক্লাস নিজে এই মেসেজের জন্য একটি মেথড এক্সিকিউট করবে।
৬. প্রটোকল ও ডেলিগেট
অবজেক্টিভ-সি তে প্রটোকল এবং ডেলিগেট ব্যবহার করা হয় ক্লাসের মধ্যে ইন্টারঅ্যাকশন এবং চুক্তি স্থাপনের জন্য। প্রটোকল একটি ইন্টারফেস যা ক্লাসকে কিছু মেথড ইমপ্লিমেন্ট করতে বলে।
উদাহরণ:
@protocol CarDelegate <NSObject>
- (void) carDidStart;
- (void) carDidStop;
@endএখানে CarDelegate একটি প্রটোকল যা দুটি মেথড carDidStart এবং carDidStop ডিক্লেয়ার করেছে।
৭. এক্সটেনশন
একটি ক্লাসের বাইরে অতিরিক্ত মেথড বা প্রপার্টি যোগ করতে এক্সটেনশন ব্যবহার করা হয়।
@interface Car (AdditionalMethods)
- (void) startEngine;
@endএখানে Car ক্লাসের জন্য startEngine মেথডটি এক্সটেনশনের মাধ্যমে যোগ করা হয়েছে।
সারাংশ
অবজেক্টিভ-সি কোডের স্ট্রাকচার মূলত সি ভাষার মতোই, তবে এতে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর কনসেপ্ট এবং মেসেজ পাসিং সিস্টেম যুক্ত করা হয়েছে। এর কোড স্ট্রাকচারে @interface, @implementation, @autoreleasepool, এবং মেসেজ পাসিং সিস্টেম ইত্যাদি গুরুত্বপূর্ণ উপাদান থাকে। ক্লাস, অবজেক্ট, মেথড, প্রপার্টি, এবং প্রটোকল ব্যবহার করে কোড সংগঠিত করা হয়, যা অ্যাপ্লিকেশন ডেভেলপমেন্টে শক্তিশালী এবং মডুলার কাঠামো তৈরি করতে সহায়ক।
Read more