Programação D - Interfaces
Uma interface é uma forma de forçar as classes que herdam dela a implementar certas funções ou variáveis. As funções não devem ser implementadas em uma interface porque elas são sempre implementadas nas classes que herdam da interface.
Uma interface é criada usando a palavra-chave interface em vez da palavra-chave class, embora as duas sejam semelhantes em vários aspectos. Quando você deseja herdar de uma interface e a classe já herda de outra classe, você precisa separar o nome da classe e o nome da interface com uma vírgula.
Vejamos um exemplo simples que explica o uso de uma interface.
Exemplo
import std.stdio;
// Base class
interface Shape {
public:
void setWidth(int w);
void setHeight(int h);
}
// Derived class
class Rectangle: Shape {
int width;
int height;
public:
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}
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());
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Total area: 35
Interface com funções finais e estáticas em D
Uma interface pode ter um método final e estático para o qual as definições devem ser incluídas na própria interface. Essas funções não podem ser substituídas pela classe derivada. Um exemplo simples é mostrado abaixo.
Exemplo
import std.stdio;
// Base class
interface Shape {
public:
void setWidth(int w);
void setHeight(int h);
static void myfunction1() {
writeln("This is a static method");
}
final void myfunction2() {
writeln("This is a final method");
}
}
// Derived class
class Rectangle: Shape {
int width;
int height;
public:
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}
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());
rect.myfunction1();
rect.myfunction2();
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Total area: 35
This is a static method
This is a final method