C ++ 'da Arayüzler (Soyut Sınıflar)
Bir arabirim, bir C ++ sınıfının davranışını veya yeteneklerini, o sınıfın belirli bir uygulamasını taahhüt etmeden açıklar.
C ++ arayüzleri, abstract classes ve bu soyut sınıflar, uygulama ayrıntılarını ilişkili verilerden ayrı tutma kavramı olan veri soyutlama ile karıştırılmamalıdır.
Bir sınıf, işlevlerinden en az birini şu şekilde bildirerek soyut hale getirilir: pure virtualişlevi. Saf bir sanal işlev, bildirimine aşağıdaki gibi "= 0" yerleştirilerek belirtilir -
class Box {
public:
// pure virtual function
virtual double getVolume() = 0;
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
Bir abstract class(genellikle ABC olarak anılır), diğer sınıfların miras alabileceği uygun bir temel sınıf sağlamaktır. Soyut sınıflar, nesneleri örneklemek için kullanılamaz ve yalnızca birinterface. Soyut bir sınıfın bir nesnesini somutlaştırmaya çalışmak derleme hatasına neden olur.
Bu nedenle, bir ABC'nin bir alt sınıfının somutlaştırılması gerekiyorsa, sanal işlevlerin her birini gerçekleştirmesi gerekir, bu da ABC tarafından bildirilen arabirimi desteklediği anlamına gelir. Türetilmiş bir sınıfta saf bir sanal işlevi geçersiz kılmama ve ardından bu sınıfın nesnelerini başlatmaya çalışma bir derleme hatasıdır.
Nesneleri somutlaştırmak için kullanılabilen sınıflar denir concrete classes.
Soyut Sınıf Örneği
Ana sınıfın, adı verilen bir işlevi uygulamak için temel sınıfa bir arabirim sağladığı şu örneği göz önünde bulundurun: getArea() -
#include <iostream>
using namespace std;
// Base class
class Shape {
public:
// pure virtual function providing interface framework.
virtual int getArea() = 0;
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}
protected:
int width;
int height;
};
// Derived classes
class Rectangle: public Shape {
public:
int getArea() {
return (width * height);
}
};
class Triangle: public Shape {
public:
int getArea() {
return (width * height)/2;
}
};
int main(void) {
Rectangle Rect;
Triangle Tri;
Rect.setWidth(5);
Rect.setHeight(7);
// Print the area of the object.
cout << "Total Rectangle area: " << Rect.getArea() << endl;
Tri.setWidth(5);
Tri.setHeight(7);
// Print the area of the object.
cout << "Total Triangle area: " << Tri.getArea() << endl;
return 0;
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Total Rectangle area: 35
Total Triangle area: 17
Soyut bir sınıfın getArea () açısından bir arabirimi nasıl tanımladığını ve diğer iki sınıfın aynı işlevi uyguladığını ancak şekle özgü alanı hesaplamak için farklı algoritmalarla nasıl olduğunu görebilirsiniz.
Strateji Tasarlama
Nesne yönelimli bir sistem, tüm harici uygulamalara uygun ortak ve standartlaştırılmış bir arayüz sağlamak için soyut bir temel sınıf kullanabilir. Ardından, bu soyut temel sınıftan kalıtım yoluyla, benzer şekilde çalışan türetilmiş sınıflar oluşturulur.
Harici uygulamaların sunduğu yetenekler (yani, genel işlevler) soyut temel sınıfta saf sanal işlevler olarak sağlanır. Bu saf sanal işlevlerin uygulamaları, uygulamanın belirli türlerine karşılık gelen türetilmiş sınıflarda sağlanır.
Bu mimari aynı zamanda sistem tanımlandıktan sonra bile yeni uygulamaların bir sisteme kolayca eklenmesine izin verir.