Programmation D - Classes abstraites

L'abstraction fait référence à la capacité de créer un résumé de classe en POO. Une classe abstraite est une classe qui ne peut pas être instanciée. Toutes les autres fonctionnalités de la classe existent toujours, et ses champs, méthodes et constructeurs sont tous accessibles de la même manière. Vous ne pouvez tout simplement pas créer une instance de la classe abstraite.

Si une classe est abstraite et ne peut pas être instanciée, la classe n'a pas beaucoup d'utilité à moins qu'elle ne soit une sous-classe. C'est généralement ainsi que les classes abstraites se produisent pendant la phase de conception. Une classe parent contient la fonctionnalité commune d'une collection de classes enfants, mais la classe parent elle-même est trop abstraite pour être utilisée seule.

Utilisation de la classe abstraite en D

Utilisez le abstractmot-clé pour déclarer un résumé de classe. Le mot-clé apparaît dans la déclaration de classe quelque part avant le mot-clé de classe. L'exemple suivant montre comment une classe abstraite peut être héritée et utilisée.

Exemple

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); 
}

Lorsque nous compilons et exécutons le programme ci-dessus, nous obtiendrons la sortie suivante.

Emp1
37

Fonctions abstraites

À l'instar des fonctions, les classes peuvent également être abstraites. L'implémentation d'une telle fonction n'est pas donnée dans sa classe mais devrait être fournie dans la classe qui hérite de la classe avec une fonction abstraite. L'exemple ci-dessus est mis à jour avec une fonction abstraite.

Exemple

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(); 
}

Lorsque nous compilons et exécutons le programme ci-dessus, nous obtiendrons la sortie suivante.

The employee details are as follows: 
Emp ID: 101 
Emp Name: Emp1 
Age: 37