একটি ইন্টারফেস একটি C++ ক্লাসের আচরণ বা ক্ষমতা বর্ণনা করে সেটার নির্দিষ্ট ইমপ্লিমেন্টেশন বাধ্য না করে। C++-এ ইন্টারফেস অ্যাবস্ট্র্যাক্ট ক্লাস ব্যবহার করে ইমপ্লিমেন্ট করা হয়। অ্যাবস্ট্র্যাক্ট ক্লাসকে ডেটা অ্যাবস্ট্র্যাকশনের সাথে গুলিয়ে ফেলা উচিত নয়, যা ইমপ্লিমেন্টেশন ডিটেইলস ডেটা থেকে আলাদা রাখার ধারণা।
কমপক্ষে একটি পিউর ভার্চুয়াল ফাংশন ঘোষণা করে একটি ক্লাসকে অ্যাবস্ট্র্যাক্ট করা যায়। পিউর ভার্চুয়াল ফাংশন ঘোষণায় = 0 ব্যবহার করা হয়:
class Box {
public:
virtual double getVolume() = 0; // পিউর ভার্চুয়াল ফাংশন
private:
double length;
double breadth;
double height;
};অ্যাবস্ট্র্যাক্ট ক্লাস (ABC) এর উদ্দেশ্য হলো একটি উপযুক্ত বেস ক্লাস প্রদান করা जिससे অন্যান্য ক্লাস ইনহেরিট করতে পারে। অ্যাবস্ট্র্যাক্ট ক্লাস থেকে অবজেক্ট ইনস্ট্যানশিয়েট করা যায় না, এটি শুধু ইন্টারফেস হিসেবে কাজ করে। অ্যাবস্ট্র্যাক্ট ক্লাসের অবজেক্ট তৈরির চেষ্টা কম্পাইলেশন এরর দেয়।
যদি ABC-এর সাবক্লাস ইনস্ট্যানশিয়েট করা হয়, তবে সেটাকে প্রতিটি ভার্চুয়াল ফাংশন ইমপ্লিমেন্ট করতে হবে। পিউর ভার্চুয়াল ফাংশন ওভাররাইড না করলে সাবক্লাসের অবজেক্ট তৈরিতে কম্পাইলেশন এরর হয়। অবজেক্ট তৈরি করা যেতে পারে এমন ক্লাসকে কনক্রিট ক্লাস বলা হয়।
উদাহরণ কোড
#include <iostream>
using namespace std;
class Shape { // বেস ক্লাস
public:
virtual int getArea() = 0; // পিউর ভার্চুয়াল ফাংশন
void setWidth(int w) { width = w; }
void setHeight(int h) { height = h; }
protected:
int width;
int height;
};
class Rectangle : public Shape {
public:
int getArea() { return (width * height); }
};
class Triangle : public Shape {
public:
int getArea() { return (width * height) / 2; }
};
int main() {
Rectangle rect;
Triangle tri;
rect.setWidth(5);
rect.setHeight(7);
cout << "Total Rectangle area: " << rect.getArea() << endl;
tri.setWidth(5);
tri.setHeight(7);
cout << "Total Triangle area: " << tri.getArea() << endl;
return 0;
}আউটপুট
Total Rectangle area: 35 Total Triangle area: 17
এখানে অ্যাবস্ট্র্যাক্ট ক্লাস getArea() ইন্টারফেস ডিফাইন করেছে এবং দুটি ক্লাস আলাদা অ্যালগরিদম দিয়ে একই ফাংশন ইমপ্লিমেন্ট করেছে।
ডিজাইন কৌশল
অবজেক্ট-অরিয়েন্টেড সিস্টেমে অ্যাবস্ট্র্যাক্ট বেস ক্লাস ব্যবহার করে সমস্ত এক্সটার্নাল অ্যাপ্লিকেশনের জন্য সাধারণ এবং স্ট্যান্ডার্ড ইন্টারফেস প্রদান করা যায়। সেখান থেকে ইনহেরিটেন্সের মাধ্যমে ডেরাইভড ক্লাস তৈরি করা হয় যারা একইভাবে কাজ করে। এক্সটার্নাল অ্যাপ্লিকেশনের ক্ষমতা (পাবলিক ফাংশন) অ্যাবস্ট্র্যাক্ট বেস ক্লাসে পিউর ভার্চুয়াল ফাংশন হিসেবে দেওয়া হয়। এই ফাংশন들의 ইমপ্লিমেন্টেশন ডেরাইভড ক্লাসে থাকে। এই আর্কিটেকচার নতুন অ্যাপ্লিকেশন সিস্টেমে সহজে যোগ করার সুবিধা দেয়।