Method Overriding এবং Polymorphism দুটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর গুরুত্বপূর্ণ কনসেপ্ট। এই দুটি কনসেপ্টের মাধ্যমে কোডের পুনঃব্যবহারযোগ্যতা, নমনীয়তা এবং এক্সটেনশিবিলিটি বৃদ্ধি পায়। অবজেক্টিভ-সি তে এই কনসেপ্টগুলি ব্যবহারের মাধ্যমে আপনি আরও শক্তিশালী এবং ভালোভাবে সংগঠিত কোড লিখতে পারেন।
১. Method Overriding
Method Overriding হল একটি কৌশল যেখানে একটি সাবক্লাস একটি প্যারেন্ট ক্লাসের মেথডকে পুনঃসংজ্ঞায়িত (override) করে। এই প্রক্রিয়ায় সাবক্লাস একটি প্যারেন্ট ক্লাসের মেথডকে পুনরায় সংজ্ঞায়িত করতে পারে, যা মূল ক্লাসে থাকা মেথডের আচরণ পরিবর্তন করে। এটি পোলিমরফিজমের একটি অংশ।
Method Overriding এর প্রয়োজনীয়তা:
- বিশেষায়িত আচরণ: সাবক্লাস প্যারেন্ট ক্লাসের সাধারণ আচরণ কাস্টমাইজ বা বিশেষায়িত করতে পারে।
- লুকআপ ও ভেরিয়েবেল আপডেট: প্রোগ্রামিংয়ের বিভিন্ন ধাপে সাবক্লাস নির্দিষ্ট প্রয়োজন অনুযায়ী আচরণ সংশোধন করতে সক্ষম হয়।
উদাহরণ:
// প্যারেন্ট ক্লাস
@interface Animal : NSObject
- (void) makeSound;
@end
@implementation Animal
- (void) makeSound {
NSLog(@"Animal makes a sound");
}
@end
// সাবক্লাস
@interface Dog : Animal
@end
@implementation Dog
- (void) makeSound {
NSLog(@"Dog barks");
}
@endএখানে, Dog ক্লাসটি Animal ক্লাসের makeSound মেথডটি override করেছে। এর ফলে, Dog অবজেক্টে makeSound মেথড কল করলে "Dog barks" মেসেজ প্রিন্ট হবে, যখন Animal অবজেক্টে কল করলে "Animal makes a sound" মেসেজ প্রিন্ট হবে।
মেথড কল:
Animal *animal = [[Animal alloc] init];
[animal makeSound]; // Output: Animal makes a sound
Dog *dog = [[Dog alloc] init];
[dog makeSound]; // Output: Dog barksএখানে, Method Overriding ব্যবহার করা হয়েছে, যেখানে Dog ক্লাস Animal ক্লাসের মেথডকে পুনরায় সংজ্ঞায়িত করেছে।
২. Polymorphism
Polymorphism হল একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং কনসেপ্ট যেখানে একাধিক অবজেক্ট একই নামের মেথড বা ফাংশন কল করতে পারে, তবে তাদের আচরণ (implementation) ভিন্ন হতে পারে। এটি Method Overriding এর মাধ্যমে অর্জিত হয়, এবং প্রোগ্রামিংয়ের বিভিন্ন অংশে কোডের পুনঃব্যবহার এবং নমনীয়তা বৃদ্ধি করে।
Polymorphism এর প্রয়োজনীয়তা:
- ফ্লেক্সিবিলিটি: কোডে একাধিক অবজেক্ট একই মেথড কল করতে পারে, এবং তারা ভিন্নভাবে আচরণ করতে পারে।
- সহজ এক্সটেনশন: নতুন ক্লাস তৈরি করলে পুরনো কোডে কোনো পরিবর্তন ছাড়াই নতুন আচরণ যোগ করা যায়।
উদাহরণ:
// প্যারেন্ট ক্লাস
@interface Animal : NSObject
- (void) makeSound;
@end
@implementation Animal
- (void) makeSound {
NSLog(@"Animal makes a sound");
}
@end
// সাবক্লাস ১
@interface Dog : Animal
@end
@implementation Dog
- (void) makeSound {
NSLog(@"Dog barks");
}
@end
// সাবক্লাস ২
@interface Cat : Animal
@end
@implementation Cat
- (void) makeSound {
NSLog(@"Cat meows");
}
@endএখানে, Dog এবং Cat দুটি সাবক্লাস Animal ক্লাসের makeSound মেথডকে override করেছে। এটি Polymorphism এর উদাহরণ, যেখানে এক ধরনের মেথড (কিন্তু ভিন্ন বাস্তবায়ন) ব্যবহার করা হচ্ছে।
Polymorphism প্রয়োগ:
- (void) playSound:(Animal *)animal {
[animal makeSound];
}
int main() {
Animal *myAnimal = [[Animal alloc] init];
[myAnimal makeSound]; // Output: Animal makes a sound
Dog *myDog = [[Dog alloc] init];
[myDog makeSound]; // Output: Dog barks
Cat *myCat = [[Cat alloc] init];
[myCat makeSound]; // Output: Cat meows
// Polymorphism example:
[self playSound:myAnimal]; // Output: Animal makes a sound
[self playSound:myDog]; // Output: Dog barks
[self playSound:myCat]; // Output: Cat meows
}এখানে, playSound: মেথডটি Animal টাইপের যেকোনো অবজেক্ট গ্রহণ করে, তবে Dog বা Cat অবজেক্টের জন্য তার আচরণ ভিন্ন। এটি Polymorphism এর উদাহরণ, যেখানে একই মেথড ভিন্ন ধরনের অবজেক্টের জন্য ভিন্ন ভিন্ন আচরণ প্রদর্শন করে।
সারাংশ
- Method Overriding: এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি শক্তিশালী কৌশল, যেখানে সাবক্লাস একটি প্যারেন্ট ক্লাসের মেথডকে পুনরায় সংজ্ঞায়িত করতে পারে। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং নমনীয়তা বৃদ্ধি করে।
- Polymorphism: এটি বিভিন্ন অবজেক্টকে একই নামের মেথড বা ফাংশন কল করতে সক্ষম করে, তবে তাদের আচরণ ভিন্ন হয়। এটি কোডের নমনীয়তা বৃদ্ধি করে এবং প্রোগ্রামিংয়ের বিভিন্ন অংশে একই মেথডের ব্যবহার করতে সক্ষম করে।
Polymorphism এবং Method Overriding অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা কোডের কার্যকারিতা, পুনঃব্যবহারযোগ্যতা এবং নমনীয়তা বৃদ্ধি করতে সাহায্য করে।
Read more