Lập trình D - Các lớp trừu tượng
Tính trừu tượng đề cập đến khả năng làm cho một lớp trừu tượng trong OOP. Một lớp trừu tượng là một lớp không thể được khởi tạo. Tất cả các chức năng khác của lớp vẫn tồn tại và các trường, phương thức và hàm tạo của nó đều được truy cập theo cùng một cách. Bạn chỉ không thể tạo một thể hiện của lớp trừu tượng.
Nếu một lớp là trừu tượng và không thể được khởi tạo, thì lớp đó không có nhiều công dụng trừ khi nó là lớp con. Đây thường là cách các lớp trừu tượng xuất hiện trong giai đoạn thiết kế. Lớp cha chứa chức năng chung của một tập hợp các lớp con, nhưng bản thân lớp cha quá trừu tượng để có thể sử dụng riêng.
Sử dụng lớp trừu tượng trong D
Sử dụng abstracttừ khóa để khai báo một lớp trừu tượng. Từ khóa xuất hiện trong khai báo lớp ở đâu đó trước từ khóa lớp. Sau đây là một ví dụ về cách lớp trừu tượng có thể được kế thừa và sử dụng.
Thí dụ
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);
}
Khi chúng ta biên dịch và chạy chương trình trên, chúng ta sẽ nhận được kết quả sau.
Emp1
37
Các hàm trừu tượng
Tương tự như các hàm, các lớp cũng có thể trừu tượng. Việc triển khai hàm như vậy không được cung cấp trong lớp của nó nhưng phải được cung cấp trong lớp kế thừa lớp có hàm trừu tượng. Ví dụ trên được cập nhật với hàm trừu tượng.
Thí dụ
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();
}
Khi chúng ta biên dịch và chạy chương trình trên, chúng ta sẽ nhận được kết quả sau.
The employee details are as follows:
Emp ID: 101
Emp Name: Emp1
Age: 37