D Programlama - Kalıtım
Nesne yönelimli programlamadaki en önemli kavramlardan biri kalıtımdır. Kalıtım, bir sınıfı başka bir sınıf açısından tanımlamaya izin verir, bu da bir uygulamanın oluşturulmasını ve sürdürülmesini kolaylaştırır. Bu aynı zamanda kod işlevselliğini yeniden kullanma ve hızlı uygulama süresi için bir fırsat sağlar.
Bir sınıf oluştururken, tamamen yeni veri üyeleri ve üye işlevler yazmak yerine, programcı yeni sınıfın mevcut bir sınıfın üyelerini miras alması gerektiğini belirleyebilir. Bu mevcut sınıfabase sınıf ve yeni sınıf, derived sınıf.
Miras fikri bir ilişkidir. Örneğin, memeli IS-A hayvan, köpek IS-A memelidir, dolayısıyla köpek IS-A hayvandır vb.
D'de Temel Sınıflar ve Türetilmiş Sınıflar
Bir sınıf, birden fazla sınıftan türetilebilir; bu, verileri ve işlevleri birden çok temel sınıftan devralabileceği anlamına gelir. Türetilmiş bir sınıfı tanımlamak için, temel sınıf (lar) ı belirtmek için bir sınıf türetme listesi kullanırız. Bir sınıf türetme listesi, bir veya daha fazla temel sınıfı adlandırır ve şu biçime sahiptir:
class derived-class: base-class
Temel bir sınıf düşünün Shape ve türetilmiş sınıfı Rectangle aşağıdaki gibi -
import std.stdio;
// Base class
class Shape {
public:
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}
protected:
int width;
int height;
}
// Derived class
class Rectangle: Shape {
public:
int getArea() {
return (width * height);
}
}
void main() {
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// Print the area of the object.
writeln("Total area: ", Rect.getArea());
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Total area: 35
Erişim Kontrolü ve Kalıtım
Türetilmiş bir sınıf, temel sınıfının özel olmayan tüm üyelerine erişebilir. Bu nedenle, türetilmiş sınıfların üye işlevlerine erişilememesi gereken temel sınıf üyeleri, temel sınıfta özel olarak bildirilmelidir.
Türetilmiş bir sınıf, aşağıdaki istisnalarla tüm temel sınıf yöntemlerini miras alır -
- Temel sınıfın oluşturucuları, yıkıcıları ve kopya oluşturucuları.
- Temel sınıfın aşırı yüklenmiş operatörleri.
Çok Düzeyli Kalıtım
Kalıtım birden çok seviyede olabilir ve aşağıdaki örnekte gösterilmiştir.
import std.stdio;
// Base class
class Shape {
public:
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}
protected:
int width;
int height;
}
// Derived class
class Rectangle: Shape {
public:
int getArea() {
return (width * height);
}
}
class Square: Rectangle {
this(int side) {
this.setWidth(side);
this.setHeight(side);
}
}
void main() {
Square square = new Square(13);
// Print the area of the object.
writeln("Total area: ", square.getArea());
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Total area: 169