9. Tính quan hệ trong lập trình java hướng đối tượng

Quan hệ HAS-A (có một) là một khái niệm trong lập trình java hướng đối tượng (OOP) trong Java, mô tả một quan hệ giữa các đối tượng khi một đối tượng chứa một đối tượng khác như một thành viên của nó. Điều này tạo ra một mối quan hệ sở hữu giữa các đối tượng, trong đó một đối tượng được coi là có thành phần hoặc phụ thuộc vào một đối tượng khác.

Quan hệ HAS-A là một dạng mở rộng của quan hệ sở hữu, trong đó đối tượng chứa đối tượng khác như một phần của nó, và sự tồn tại của đối tượng con không phụ thuộc vào đối tượng cha.

Có hai cách thường được sử dụng để thể hiện quan hệ HAS-A trong Java:

  1. Sử dụng composition (tổng hợp):
    • Composition là một quan hệ HAS-A trong đó một đối tượng chứa một hoặc nhiều đối tượng khác và có trách nhiệm về vòng đời của các đối tượng đó.
    • Đối tượng chứa được tạo ra và quản lý các đối tượng con của nó, và khi đối tượng chứa bị hủy, các đối tượng con cũng sẽ bị hủy.

Ví dụ về quan hệ HAS-A sử dụng composition:

java
public class Car {
    private Engine engine;    // Đối tượng Engine là thành phần của Car
    
    public Car() {
        engine = new Engine();
    }
    
    // ...
}

public class Engine {
    public void start() {
        System.out.println("Engine is starting.");
    }
    
    // ...
}

Trong ví dụ trên, lớp “Car” có một thuộc tính “engine” là một đối tượng của lớp “Engine”. Lớp “Car” tạo ra và quản lý đối tượng “engine” bên trong nó. Khi đối tượng “Car” được tạo ra hoặc hủy, đối tượng “engine” cũng được tạo ra hoặc hủy tương ứng.

  1. Sử dụng aggregation (tổ chức):
    • Aggregation cũng là một quan hệ HAS-A trong đó một đối tượng chứa một hoặc nhiều đối tượng khác, nhưng không có quyền kiểm soát vòng đời của các đối tượng con.
    • Đối tượng chứa không tạo ra hoặc quản lý các đối tượng con, và các đối tượng con có thể tồn tại độc lập.

Ví dụ về quan hệ HAS-A sử dụng aggregation:

java
public class Department {
    private List<Employee> employees;    // Đối tượng Employee là thành phần của Department
    
    public Department() {
        employees = new ArrayList<>();
    }
    
    // ...
}

public class Employee {
    private String name;
    
    // ...
}

Trong ví dụ trên, lớp “Department” có một thuộc tính “employees” là một danh sách các đối tượng “Employee”. Lớp “Department” không tạo ra hoặc quản lý các đối tượng “Employee”, mà chỉ chứa một danh sách các đối tượng “Employee” có thể tồn tại độc lập.

Quan hệ HAS-A cho phép xây dựng các cấu trúc phức tạp hơn và tạo ra mối liên kết giữa các đối tượng. Nó cho phép tái sử dụng mã và phân chia công việc thành các phần nhỏ hơn, tăng tính linh hoạt và khả năng mở rộng của mã.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top