Programação D - Classes abstratas
Abstração refere-se à capacidade de tornar uma classe abstrata em OOP. Uma classe abstrata é aquela que não pode ser instanciada. Todas as outras funcionalidades da classe ainda existem e seus campos, métodos e construtores são todos acessados da mesma maneira. Você simplesmente não pode criar uma instância da classe abstrata.
Se uma classe for abstrata e não puder ser instanciada, a classe não terá muito uso, a menos que seja uma subclasse. Normalmente é assim que as classes abstratas surgem durante a fase de design. Uma classe pai contém a funcionalidade comum de uma coleção de classes filho, mas a própria classe pai é muito abstrata para ser usada por conta própria.
Usando classe abstrata em D
Use o abstractpalavra-chave para declarar um resumo de classe. A palavra-chave aparece na declaração da classe em algum lugar antes da palavra-chave da classe. O seguinte mostra um exemplo de como uma classe abstrata pode ser herdada e usada.
Exemplo
import std.stdio;
import std.string;
import std.datetime;
abstract class Person {
int birthYear, birthDay, birthMonth;
string name;
int getAge() {
SysTime sysTime = Clock.currTime();
return sysTime.year - birthYear;
}
}
class Employee : Person {
int empID;
}
void main() {
Employee emp = new Employee();
emp.empID = 101;
emp.birthYear = 1980;
emp.birthDay = 10;
emp.birthMonth = 10;
emp.name = "Emp1";
writeln(emp.name);
writeln(emp.getAge);
}
Quando compilamos e executamos o programa acima, obteremos a seguinte saída.
Emp1
37
Funções Abstratas
Semelhante às funções, as classes também podem ser abstratas. A implementação de tal função não é fornecida em sua classe, mas deve ser fornecida na classe que herda a classe com função abstrata. O exemplo acima é atualizado com a função abstrata.
Exemplo
import std.stdio;
import std.string;
import std.datetime;
abstract class Person {
int birthYear, birthDay, birthMonth;
string name;
int getAge() {
SysTime sysTime = Clock.currTime();
return sysTime.year - birthYear;
}
abstract void print();
}
class Employee : Person {
int empID;
override void print() {
writeln("The employee details are as follows:");
writeln("Emp ID: ", this.empID);
writeln("Emp Name: ", this.name);
writeln("Age: ",this.getAge);
}
}
void main() {
Employee emp = new Employee();
emp.empID = 101;
emp.birthYear = 1980;
emp.birthDay = 10;
emp.birthMonth = 10;
emp.name = "Emp1";
emp.print();
}
Quando compilamos e executamos o programa acima, obteremos a seguinte saída.
The employee details are as follows:
Emp ID: 101
Emp Name: Emp1
Age: 37