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

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.

Tìm hiểu về instanceof trong JAVA

Một vài ví dụ đơn giản để bạn hiểu hơn về toán tử instanceof trong Java. Cũng như cách sử dụng instanceof trong thực tế như thế nào.

Static Binding và Dynamic Binding trong Java

Bạn đang tìm hiểu về Binding trong Java? Về cơ bản, việc kết nối một cuộc gọi phương thức...

Tìm hiểu về Đa hình trong JAVA

Đa hình (Polymorphism) trong Java là một khái niệm để chỉ những hành động có thể thực hiện theo nhiều cách khác nhau.

Từ khóa FINAL trong JAVA

Từ khóa final có thể được áp dụng với các biến, một biến final không có giá trị, nó được gọi là biến final trống hoặc biến cuối cùng chưa được khởi tạo.

Khối Khởi tạo thể hiện trong JAVA

Khối khởi tạo thể hiện được sử dụng để khởi tạo các biến thể hiện. Nó chạy mỗi lần khi đối tượng của lớp được tạo.

Leave a reply

Please enter your comment!
Please enter your name here