Programmazione D - Classi astratte
L'astrazione si riferisce alla capacità di rendere astratta una classe in OOP. Una classe astratta è quella che non può essere istanziata. Tutte le altre funzionalità della classe esistono ancora e ai suoi campi, metodi e costruttori si accede allo stesso modo. Non puoi creare un'istanza della classe astratta.
Se una classe è astratta e non può essere istanziata, la classe non è molto utile a meno che non sia una sottoclasse. Questo è tipicamente il modo in cui nascono le classi astratte durante la fase di progettazione. Una classe genitore contiene la funzionalità comune di una raccolta di classi figlie, ma la classe genitore stessa è troppo astratta per essere usata da sola.
Utilizzo della classe astratta in D
Utilizzare il abstractparola chiave per dichiarare un abstract di classe. La parola chiave appare nella dichiarazione della classe da qualche parte prima della parola chiave della classe. Di seguito viene mostrato un esempio di come la classe astratta può essere ereditata e utilizzata.
Esempio
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 compiliamo ed eseguiamo il programma sopra, otterremo il seguente output.
Emp1
37
Funzioni astratte
Analogamente alle funzioni, anche le classi possono essere astratte. L'implementazione di tale funzione non è data nella sua classe ma dovrebbe essere fornita nella classe che eredita la classe con funzione astratta. L'esempio sopra è aggiornato con la funzione astratta.
Esempio
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 compiliamo ed eseguiamo il programma sopra, otterremo il seguente output.
The employee details are as follows:
Emp ID: 101
Emp Name: Emp1
Age: 37