Kiểu trừu tượng

Trong ngôn ngữ lập trình, kiểu trừu tượng (tiếng Anh: abstract type) là một kiểu trong hệ thống kiểu danh định mà không thể được khởi tạo trực tiếp; một kiểu mà không trừu tượng – nghĩa là có thể được khởi tạo – được gọi là kiểu cụ thể (concrete type). Mỗi thực thể của kiểu trừu tượng là một thực thể của vài kiểu con cụ thể. Kiểu trừu tượng còn được gọi là kiểu tồn tại (existential type).

Một kiểu trừu tượng có thể không cung cấp sự hiện thực, hoặc hiện thực không đầy đủ. Ở một vài ngôn ngữ, kiểu trừu tượng không có sự hiện thực (thay vì hiện thực không đầy đủ) được gọi là giao thức (protocol hay interface), chữ kí (signature), hay kiểu lớp (class type). Trong lập trình hướng đối tượng dựa trên lớp, kiểu trừu tượng được hiện thực như là lớp trừu tượng (abstract class hay abstract base class), và kiểu cụ thể như là lớp cụ thể (concrete class).

Định nghĩa các loại trừu tượng 

Lớp trừu tượng có thể được tạo ra, định nghĩa, hay mô phỏng, theo nhiều cách:
 Bằng cách sử dụng từ khóa abstract trong định nghĩa lớp, như trong Java, D hay C#.
 Bằng cách thêm vào, trong định nghĩa lớp, một hay nhiều phương thức trừu tượng (gọi là các hàm ảo thuần túy trong C++), mà lớp dược khai báo để chấp nhận như là một phần giao thức của nó, nhưng không có hiện thực nào được cung cấp.
 Bằng cách kế thừa từ một kiểu trừu tượng, nhưng không ghi đè tất cả các tính năng cần thiết để hoàn thành định nghĩa lớp.
 Một số ngôn ngữ kiểu động như Smalltalk, bất kì lớp này gửi một phương thức cụ thể tới this, nhưng không hiện thực phương thức đó, thì có thể được xem là trừu tượng. (Tuy nhiên, trong nhiều ngôn ngữ, Objective-C, lỗi không được phát hiện đến khi lớp được sử dụng, và thông báo trả về kết quả trong lỗi ngoại lệ như "Does not recognize selector: xxx" as - [NSObject doesNotRecognizeSelector:(SEL)selector] được gọi khi phát hiện phương thức chưa được hiện thực).

Ví dụ (Java) 

//By default, all methods in all classes are concrete, unless the abstract keyword is used.
abstract class Demo {
    // An abstract class may include abstract methods, which have no implementation.
    abstract public int sum(int x, int y);

    // An abstract class may also include concrete methods.
    public int product(int x, int y) { return x*y; }
}

//By default, all methods in all interfaces are abstract, unless the default keyword is used.
interface DemoInterface {
    [abstract] int getLength(); //Abstract can be used here, though is completely useless
    
    //The default keyword can be used in this context to specify a concrete method in an interface
    default int product(int x, int y) {
        return x * y;
    }
}

Cách dùng kiểu trừu tượng

Xem thêm 
 Lớp (lập trình máy tính)

Tham khảo

Đọc thêm 
 
Core Java: An Integrated Approach by  R. Nageswara Rao

Liên kết ngoài 
 "Abstract or Skeletal Interfaces Explained" 
 Types and Programming Languages by Benjamin Pierce (MIT Press 2002) 
 Abstract type at Rosetta Code

Lý thuyết kiểu