Mối quan hệ HAS-A (Aggregation) trong JAVA

Nếu một class có một thực thể tham chiếu, nó được gọi là Aggregation. Aggregation đại diện cho mối quan hệ HAS-A.

Mối quan hệ HAS-A trong Java
Mối quan hệ HAS-A trong Java

Hãy xem xét một tình huống, đối tượng Employee chứa nhiều thông tin như id, name, emailId, v.v …

Nó chứa thêm một đối tượng có tên Adress, chứa thông tin riêng của mình như thành phố, quốc gia, mã zip, v.v. như được đưa ra dưới đây.

class Employee{
  int id;
  String name;

  Address address; //Address là một class
  ...  
}  

Trong trường hợp đó, Employee có một thực thể tham chiếu, vì vậy mối quan hệ là
Employee HAS-A address.

Ví dụ đơn giản về Aggregation

Trong ví dụ này, mình đã tạo tham chiếu của lớp Operation trong lớp Circle.

class Operation{
  int square(int n){
    return n*n;
  }  
}

class Circle{
  Operation op; //aggregation  
  double pi = 3.14;  
    
  double area(int radius){  
    op = new Operation();
    
    // Tái sử dụng code
    int rsquare = op.square(radius);
    return pi*rsquare;
  }  
  
     
   
  public static void main(String args[]){  
    Circle c = new Circle();
    double result = c.area(5);
    System.out.println(result);
 }  
}

Kết quả:

78.5

Ví dụ thực tế về Aggregation

Trong ví dụ này, lớp Employee có một đối tượng Address, đối tượng Address chứa thông tin riêng của mình như thành phố, quốc gia, mã zip v.v.

File: Address.java

public class Address{  
  String city, state, zipCode;  
  
  public Address(String city, String country, int zipCode) {  
    this.city = city;
    this.country = country;
    this.zipCode = zipCode;
  }
}

File: Employee.java

public class Employee{
  int id;
  String name;
  Address address;
  
  public Employee(int id, String name, Address address){  
    this.id = id;
    this.name = name;
    this.address = address; 
  }  
  
  void display(){
    System.out.println(id+" "+name);  
    System.out.println(address.city+" "+address.country+" "+address.zipCode);
  }
  
  public static void main(String[] args){ 
    Address address1 = new Address("Hanoi", "Vietnam", 100000);  
    Address address2 = new Address("HCM", "Vietnam", 700000);  
  
    Employee e1 = new Employee(111,"Hải", address1); 
    Employee e2 = new Employee(112,"Doanh", address2);
      
    e1.display();
    e2.display();  
  }
}

Kết quả nhận được là:

111 Hải
Hanoi Vietnam 100000
112 Doanh
HCM Vietnam 700000

Câu hỏi thường gặp về Aggregation

Câu hỏi 1: Tại sao sử dụng Aggregation?

Trả lời: Để tái sử dụng code.

Câu hỏi 2: Khi nào sử dụng Aggregation?

Sử dụng Aggregateion tốt nhất khi:
+ Không có mối quan hệ IS-A.
+ Kế thừa chỉ nên sử dụng khi mối quan hệ IS-A khi được duy trì trong suốt vòng đời của các đối tượng liên quan. Ngược lại, Aggregation là lựa chọn tốt nhất.

Bạn đã hiểu về mối quan hệ HAS-A trong Java chưa?

Như vậy là ngoài mối quan hệ IS-A chúng ta còn có mối quan hệ HAS-A giúp tái sử dụng code tốt hơn trong lập trình Java.

Tham khảo thêm:

Chúc bạn học Java tốt!

JavaDEV

Bài viết gần đây

4 Loại Access Modifiers trong JAVA

Access Modifiers trong Java chỉ định khả năng / cấp độ truy cập hoặc phạm vi của một field, method, constructor hoặc class. Có 4 loại: private, default, protected, public

Package trong JAVA

Package trong Java có thể được phân loại theo hai dạng, built-in package (có sẵn) và user-defined package (gói do người dùng định nghĩa)

Sự khác biệt giữa Abstract Class và Interface

Cả Abstract class và Interface đều được sử dụng để đạt được sự trừu tượng nơi chúng ta có thể khai báo các phương thức trừu tượng. Cả Abstract class và Interface đều không thể được khởi tạo.

Interface trong JAVA

Interface trong Java là một cơ chế để đạt được sự trừu tượng. Có thể chỉ có các phương thức trừu tượng trong Interface, không có phần thân phương thức

Abstract class trong JAVA

Trừu tượng là một quá trình ẩn các chi tiết triển khai và chỉ hiển thị chức năng cho người dùng. Cùng mình học cách sử dụng Abstract class trong Java

Hướng dẫn tải và Cài đặt Java cho Windows 10 (Chi tiết)

Bài viết này mình sẽ hướng dẫn bạn cách tải và cài đặt Java cho Windows 10 để học lập trình Java.

Leave a reply

Please enter your comment!
Please enter your name here