Categories এবং Subclassing দুটি গুরুত্বপূর্ণ কনসেপ্ট Objective-C তে, কিন্তু তাদের ব্যবহার এবং কাজের ধরনে কিছু মৌলিক পার্থক্য রয়েছে। এ দুটি কনসেপ্ট সাধারণত কোডে বিভিন্ন কার্যাবলী যোগ করার জন্য ব্যবহৃত হয়, তবে তাদের ব্যবহারের ক্ষেত্রে কিছু স্পষ্ট পার্থক্য আছে।
1. Categories
Categories হল একটি ক্লাসের কার্যকলাপে নতুন মেথড যোগ করার একটি উপায়, তবে এটি মূল ক্লাসের সোর্স কোড বা উপাদান পরিবর্তন ছাড়াই। Categories ব্যবহার করে, আপনি একটি ক্লাসের ক্ষমতা বাড়াতে পারেন, বিশেষত যখন আপনি তৃতীয় পক্ষের ক্লাস বা অ্যাপলের প্রিপ্যাকেজড লাইব্রেরি ব্যবহার করছেন এবং আপনি তার কার্যকারিতা বাড়াতে চান।
Categories এর বৈশিষ্ট্য:
- এটি একটি ক্লাসে নতুন মেথড যোগ করতে ব্যবহৃত হয়।
- এটি মূল ক্লাসের সোর্স কোড পরিবর্তন না করে নতুন কার্যকারিতা যোগ করতে সাহায্য করে।
- আপনি একটি ক্লাসের মেথডকে অ্যাক্সেস এবং এক্সটেন্ড করতে পারেন।
- আপনি মেথড ওভাররাইডিং করতে পারবেন না।
- আপনি শুধুমাত্র মেথড যোগ করতে পারবেন, কোনো প্রপার্টি বা ইনস্ট্যান্স ভেরিয়েবল যুক্ত করতে পারবেন না।
Categories এর সিনট্যাক্স:
// ClassName+CategoryName.h
@interface ClassName (CategoryName)
- (void)newMethod; // New method declaration
@end
// ClassName+CategoryName.m
@implementation ClassName (CategoryName)
- (void)newMethod {
NSLog(@"New method in category");
}
@endউদাহরণ:
@interface NSString (UppercaseAdditions)
- (NSString *)reverseString;
@end
@implementation NSString (UppercaseAdditions)
- (NSString *)reverseString {
NSMutableString *reversedString = [NSMutableString string];
for (NSInteger i = [self length] - 1; i >= 0; i--) {
[reversedString appendString:[NSString stringWithFormat:@"%C", [self characterAtIndex:i]]];
}
return reversedString;
}
@endএখানে NSString ক্লাসের একটি category তৈরি করা হয়েছে, যার মাধ্যমে reverseString নামক নতুন একটি মেথড যোগ করা হয়েছে।
2. Subclassing
Subclassing হল একটি ক্লাসের একটি নতুন ক্লাস তৈরি করা, যা পূর্ববর্তী (Super) ক্লাসের সমস্ত বৈশিষ্ট্য (properties) এবং মেথড (methods) উত্তরাধিকারসূত্রে পায়। Subclassing এর মাধ্যমে, আপনি মূল ক্লাসের আচরণ পরিবর্তন বা সম্প্রসারিত করতে পারেন। এটি মূল ক্লাসের ফিচার (features) এবং আচরণ (behavior) ধারণ করে এবং নতুনভাবে সেগুলোকে ডিফাইন করতে পারে।
Subclassing এর বৈশিষ্ট্য:
- একটি ক্লাস থেকে নতুন ক্লাস তৈরি করা হয় যা পুরনো ক্লাসের বৈশিষ্ট্য উত্তরাধিকারসূত্রে পায়।
- নতুন ক্লাসে আপনি মেথড ওভাররাইডিং এবং প্রপার্টি পরিবর্তন করতে পারেন।
- আপনি নতুন ইনস্ট্যান্স ভেরিয়েবল এবং মেথড যোগ করতে পারেন।
- এটি inheritance কনসেপ্টের উপর ভিত্তি করে কাজ করে।
Subclassing এর সিনট্যাক্স:
// Superclass
@interface Animal : NSObject
- (void)eat;
@end
@implementation Animal
- (void)eat {
NSLog(@"Animal is eating");
}
@end
// Subclass
@interface Dog : Animal
- (void)bark;
@end
@implementation Dog
- (void)bark {
NSLog(@"Dog is barking");
}
@endউদাহরণ:
Dog *myDog = [[Dog alloc] init];
[myDog eat]; // Superclass method
[myDog bark]; // Subclass methodএখানে Dog ক্লাসটি Animal ক্লাস থেকে ইনহেরিট করছে। তাই Dog অবজেক্ট eat মেথড (যা Animal ক্লাসে ডিফাইন করা) এবং bark মেথড (যা Dog ক্লাসে ডিফাইন করা) উভয়ই কল করতে পারবে।
Categories এবং Subclassing এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Categories | Subclassing |
|---|---|---|
| ব্যবহার | একটি ক্লাসের মেথডে নতুন ফাংশন বা বৈশিষ্ট্য যোগ করতে | নতুন ক্লাস তৈরি করা এবং পুরনো ক্লাস থেকে উত্তরাধিকার নেওয়া |
| ফাংশনালিটি | শুধুমাত্র মেথড যোগ করা যায়, নতুন প্রপার্টি বা ভেরিয়েবল যোগ করা যায় না | নতুন প্রপার্টি, মেথড এবং ইনস্ট্যান্স ভেরিয়েবল যোগ করা যায় |
| মেথড ওভাররাইডিং | সম্ভব নয় | মেথড ওভাররাইড করা যায় |
| প্রপার্টি এবং ভেরিয়েবল | যোগ করা যায় না | প্রপার্টি এবং ইনস্ট্যান্স ভেরিয়েবল যোগ করা যায় |
| ব্যবহার ক্ষেত্র | ক্লাসের মেথড এক্সটেন্ড বা নতুন কার্যকারিতা যোগ করতে | নতুন ক্লাস তৈরি করতে এবং পুরনো ক্লাসের আচরণ পরিবর্তন করতে |
| ক্লাসের অবস্থা | ক্লাসের সোর্স কোড পরিবর্তন ছাড়াই নতুন ফাংশন যোগ করা যায় | পুরনো ক্লাস থেকে সমস্ত বৈশিষ্ট্য উত্তরাধিকার পাওয়া যায় |
সারাংশ
- Categories: এটি একটি ক্লাসে নতুন মেথড যোগ করার জন্য ব্যবহৃত হয়, তবে এটি প্রপার্টি বা ইনস্ট্যান্স ভেরিয়েবল যুক্ত করতে পারে না। Categories মূল ক্লাসের সোর্স কোড পরিবর্তন ছাড়াই তার কার্যকারিতা বাড়াতে সহায়তা করে।
- Subclassing: এটি একটি ক্লাস থেকে একটি নতুন ক্লাস তৈরি করে, যা পুরনো ক্লাসের বৈশিষ্ট্য (properties) এবং মেথড (methods) উত্তরাধিকারসূত্রে পায়। এটি নতুন প্রপার্টি, মেথড এবং ইনস্ট্যান্স ভেরিয়েবল যোগ করতে পারে এবং method overriding করতে পারে।
এটি ছিল Categories এবং Subclassing এর মধ্যে পার্থক্য।
Read more