Rate this post

Tính trừu tượng (abstraction) là một khái niệm trong lập trình hướng đối tượng. Tính trừu tượng cho phép bạn tập trung vào tính năng chung của một đối tượng hoặc một nhóm đối tượng mà không cần biết cách hoạt động chi tiết của chúng.

Các bài viết liên quan:

Trong Java, bạn có thể sử dụng tính trừu tượng bằng cách sử dụng từ khóa abstract để khai báo một lớp hoặc phương thức trừu tượng. Một lớp trừu tượng không thể được khởi tạo, và chỉ có thể được kế thừa bởi các lớp con. Các phương thức trong lớp trừu tượng có thể không có thân, và phải được ghi đè bởi các lớp con.

Tính trừu tượng được sử dụng để giấu đi các chi tiết không cần thiết về cách một đối tượng hoạt động, và chỉ hiển thị những tính năng chính của nó. Điều này giúp cho mã dễ dàng hơn để bảo trì và mở rộng, và cho phép bạn tái sử dụng mã dễ dàng hơn.

Các ví dụ về tính trừu tượng

Ví dụ 1: Tính trừu tượng với lớp trừu tượng

abstract class Shape {
    public abstract double area();
}

class Rectangle extends Shape {
    private double width;
    private double height;
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    public double area() {
        return width * height;
    }
}

Trong ví dụ trên, lớp Shape là lớp trừu tượng và không thể được khởi tạo. Phương thức area() trong lớp Shape cũng là trừu tượng và không có thân, nhưng được ghi đè bởi lớp Rectangle.

Ví dụ 2: Tính trừu tượng với interface

interface Printable {
    void print();
}
class Book implements Printable {
    public void print() {
        System.out.println("Printing a book");
    }
}
class Newspaper implements Printable {
    public void print() {
        System.out.println("Printing a newspaper");
	}
}

Trong ví dụ trên, interface Printable là một tính trừu tượng với phương thức trừu tượng print(). Lớp Book và lớp Newspaper implement từ interface Printable và ghi đè lên phương thức print() để in ra tình trạng in sách hoặc báo.

Tính trừu tượng cho phép bạn giấu đi các chi tiết không cần thiết về cách một đối tượng hoạt động, và chỉ hiển thị những tính năng chính của nó. Điều này giúp cho mã dễ dàng hơn để bảo trì và mở rộng, và cho phép bạn tái sử dụng mã dễ dàng hơn.

Tuy nhiên, cần lưu ý rằng tính trừu tượng không nên được sử dụng quá nhiều hoặc sai cách, vì nó có thể gây rối tung và khó hiểu cho mã. Chúng ta cần tìm kiếm cân bằng giữa tính trừu tượng và chi tiết để thiết kế mã dễ dàng hơn để bảo trì và mở rộng.

Ví dụ 3: Tính trừu tượng trong việc xử lý sự kiện

abstract class EventHandler {
    public abstract void handleEvent();
}

class KeyboardEventHandler extends EventHandler {
    public void handleEvent() {
        System.out.println("Handling keyboard event...");
    }
}

class MouseEventHandler extends EventHandler {
    public void handleEvent() {
        System.out.println("Handling mouse event...");
    }
}

Trong ví dụ trên, lớp EventHandler là lớp trừu tượng cho việc xử lý sự kiện. Lớp KeyboardEventHandler và lớp MouseEventHandler kế thừa từ lớp EventHandler và ghi đè lên phương thức handleEvent() để xử lý sự kiện phím và chuột tương ứng. Như vậy, chúng ta có thể tái sử dụng mã dễ dàng hơn khi xử lý các sự kiện khác nhau mà không cần quan tâm đến chi tiết về cách xử lý sự kiện đó.

Ví dụ 4: Tính trừu tượng trong mô hình hóa hệ thống

abstract class Component {
    public abstract void render();
}

class Button extends Component {
    public void render() {
        System.out.println("Rendering button...");
    }
}

class TextField extends Component {
    public void render() {
        System.out.println("Rendering text field...");
    }
}

class Panel extends Component {
    private List<Component> components;
    public Panel() {
        components = new ArrayList<Component>();
    }
    public void add(Component component) {
        components.add(component);
    }
    public void render() {
        System.out.println("Rendering panel...");
        for (Component component : components) {
            component.render();
        }
    }
}

Trong ví dụ trên, lớp Component là lớp trừu tượng cho các thành phần của hệ thống. Lớp Button và lớp TextField kế thừa từ lớp Component và ghi đè lên phương thức render() để hiển thị

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now