TypeScript-এ অ্যাবস্ট্রাক্ট ক্লাস এবং ইন্টারফেস দুটি গুরুত্বপূর্ণ কনসেপ্ট। এগুলোর সাহায্যে আপনি আরও শক্তিশালী, পুনঃব্যবহারযোগ্য এবং নির্ভরযোগ্য কোড লিখতে পারেন।
১. অ্যাবস্ট্রাক্ট ক্লাস (Abstract Class)
অ্যাবস্ট্রাক্ট ক্লাস হলো এমন একটি ক্লাস যেটি সরাসরি ইনস্ট্যান্স তৈরি করতে পারে না, তবে এটি অন্যান্য ক্লাস দ্বারা এক্সটেন্ড করা যেতে পারে। অ্যাবস্ট্রাক্ট ক্লাসে সাধারণত অ্যাবস্ট্রাক্ট মেথড থাকে, যেগুলো সাব-ক্লাসে অবশ্যই ইমপ্লিমেন্ট করতে হয়।
অ্যাবস্ট্রাক্ট ক্লাসের ব্যবহার
অ্যাবস্ট্রাক্ট ক্লাস তৈরির জন্য abstract কিওয়ার্ড ব্যবহার করা হয়।
উদাহরণ:
abstract class Animal {
abstract sound(): void; // অ্যাবস্ট্রাক্ট মেথড
move(): void {
console.log("The animal moves");
}
}
class Dog extends Animal {
sound(): void {
console.log("Bark");
}
}
const dog = new Dog();
dog.sound(); // Output: Bark
dog.move(); // Output: The animal moves
এখানে, Animal ক্লাসটি একটি অ্যাবস্ট্রাক্ট ক্লাস যা sound() নামক একটি অ্যাবস্ট্রাক্ট মেথড ডিক্লেয়ার করেছে। Dog ক্লাসটি Animal থেকে এক্সটেন্ড করে এবং sound() মেথড ইমপ্লিমেন্ট করেছে।
অ্যাবস্ট্রাক্ট ক্লাসের সুবিধা:
- একাধিক ক্লাসের মধ্যে সাধারণ বৈশিষ্ট্য বা ফাংশনালিটি ভাগ করা যায়।
- ইন্টারফেসের তুলনায় অ্যাবস্ট্রাক্ট ক্লাসে কিছু সাধারণ কোডও থাকতে পারে, যা ইন্টারফেসে সম্ভব নয়।
নোট:
- অ্যাবস্ট্রাক্ট ক্লাসের অবজেক্ট সরাসরি তৈরি করা যায় না।
- শুধুমাত্র ক্লাস এক্সটেন্ড করার পরেই অ্যাবস্ট্রাক্ট মেথডের ইমপ্লিমেন্টেশন দেওয়া হয়।
২. ইন্টারফেস (Interface)
ইন্টারফেস TypeScript-এ একটি চুক্তি (contract) যা নিশ্চিত করে যে একটি ক্লাস বা অবজেক্ট নির্দিষ্ট কিছু মেথড বা প্রপার্টি থাকতে হবে। ইন্টারফেস ব্যবহার করে আপনি কোডের মধ্যে টাইপ সেফটি নিশ্চিত করতে পারেন।
ইন্টারফেসের ব্যবহার
ইন্টারফেসে শুধুমাত্র মেথড সিগনেচার (method signatures) এবং প্রপার্টি ডিক্লেয়ার করা হয়, কিন্তু কোন বাস্তবায়ন থাকে না। একটি ক্লাস যখন ইন্টারফেস ইমপ্লিমেন্ট করে, তখন তাকে ইন্টারফেসে ডিফাইন করা সমস্ত মেথড এবং প্রপার্টি ইমপ্লিমেন্ট করতে হয়।
উদাহরণ:
interface Animal {
sound(): void;
move(): void;
}
class Dog implements Animal {
sound(): void {
console.log("Bark");
}
move(): void {
console.log("The dog runs");
}
}
const dog = new Dog();
dog.sound(); // Output: Bark
dog.move(); // Output: The dog runs
এখানে, Animal একটি ইন্টারফেস যা sound() এবং move() মেথড ডিফাইন করেছে। Dog ক্লাসটি এই ইন্টারফেসটি ইমপ্লিমেন্ট করেছে এবং প্রতিটি মেথডের বাস্তবায়ন প্রদান করেছে।
ইন্টারফেসের সুবিধা:
- ইন্টারফেস শুধুমাত্র চুক্তি নির্ধারণ করে, কোডের রিফ্যাক্টরিং সহজ করে।
- একাধিক ক্লাসে একই ইন্টারফেস ব্যবহার করে কোডের পুনঃব্যবহারযোগ্যতা বাড়ানো যায়।
- একাধিক ইন্টারফেস একসাথে ইমপ্লিমেন্ট করা সম্ভব, যা একাধিক উত্তরাধিকার (inheritance) প্রয়োগের মতো কাজ করে।
নোট:
- ইন্টারফেস শুধুমাত্র মেথড এবং প্রপার্টি সিগনেচার ডিফাইন করতে পারে, বাস্তবায়ন নয়।
- একটি ক্লাস একাধিক ইন্টারফেস ইমপ্লিমেন্ট করতে পারে, কিন্তু শুধুমাত্র একটাই অ্যাবস্ট্রাক্ট ক্লাস এক্সটেন্ড করতে পারে।
৩. অ্যাবস্ট্রাক্ট ক্লাস এবং ইন্টারফেসের মধ্যে পার্থক্য
| বৈশিষ্ট্য | অ্যাবস্ট্রাক্ট ক্লাস (Abstract Class) | ইন্টারফেস (Interface) |
|---|---|---|
| ব্যবহার | সাধারণ কোড ভাগ করতে, ক্লাসের মধ্যে কিছু বাস্তবায়ন দিতে | চুক্তি নির্ধারণ, মেথড/প্রপার্টি সংজ্ঞা |
| একাধিক উত্তরাধিকার | একটি ক্লাস কেবল একটাই অ্যাবস্ট্রাক্ট ক্লাস এক্সটেন্ড করতে পারে | একাধিক ইন্টারফেস ইমপ্লিমেন্ট করা যায় |
| কোড বাস্তবায়ন | অ্যাবস্ট্রাক্ট ক্লাসে কোড বাস্তবায়ন থাকতে পারে | ইন্টারফেসে কোড বাস্তবায়ন থাকে না |
| ডিফাইন করা মেথড | অ্যাবস্ট্রাক্ট মেথড এবং কনক্রিট মেথড থাকতে পারে | শুধুমাত্র মেথড সিগনেচার থাকতে পারে |
৪. অ্যাবস্ট্রাক্ট ক্লাস এবং ইন্টারফেস ব্যবহার করার সময় বিবেচনা
- অ্যাবস্ট্রাক্ট ক্লাস ব্যবহার করুন: যখন আপনার কোডে কিছু সাধারণ লজিক (logic) থাকতে হবে যা একাধিক সাব-ক্লাসে ভাগ করা হবে।
- ইন্টারফেস ব্যবহার করুন: যখন আপনি চুক্তি তৈরি করতে চান যাতে একাধিক ক্লাস একই ধরনের মেথড বা প্রপার্টি ইমপ্লিমেন্ট করে।
TypeScript-এ অ্যাবস্ট্রাক্ট ক্লাস এবং ইন্টারফেস উভয়ই শক্তিশালী কনসেপ্ট, এবং এগুলোর সঠিক ব্যবহারের মাধ্যমে আপনি আরও নির্ভরযোগ্য এবং পুনঃব্যবহারযোগ্য কোড লিখতে পারবেন।
Read more