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

0
7320
Mối quan hệ HAS-A 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