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.

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

JavaDEV

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

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.

Ví dụ sử dụng từ khóa Super trong JAVA

Để hiểu cụ thể từ khóa super trong Java làm việc như thế nào, chúng ta cùng đi qua các ví dụ bên dưới đây:

Kiểu trả về Covariant trong Java

Kiểu trả về covariant đề cập đến kiểu trả về của phương thức ghi đè. Nó cho phép thu hẹp loại trả về của một phương thức được ghi đè mà không cần phải truyền loại hoặc kiểm tra loại trả về.

Method Overriding trong Java

Nếu subclass (lớp con) có các phương thức tương tự như trong các super class (class cha), nó được gọi là Method Overriding (Ghi đè phương thức) trong Java.

Method Overloading trong JAVA

Nếu một class có nhiều phương thức có cùng tên, nhưng đối số khác nhau, nó được gọi là Method Overloading. Có 2 cách thực hiện method Overloading trong Java

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.

Leave a reply

Please enter your comment!
Please enter your name here