Aggregation vs Composition relationship

Qua bài này sẽ minh họa sự khác nhau giữa 2 loại quan hệ trong thiết kế hướng đối tượng và minh họa rõ sự khác biệt khi cài đặt trong code

Aggregation

Aggregation là mối quan hệ mà ở đó thực thể có thể tồn tại độc lập với các lớp khác. Ví dụ: một người nào đó có thể thuộc một công ty hoặc không thuộc một công ty, người đó vẫn có thể tồn tại độc lập, có nghĩa là họ không làm cho một công ty bất kỳ.

Composition

Composition đề cập đến trường hợp khi một đối tượng (obj1) tồn tại phụ thuộc vào sự tồn tại của một đối tượng khác(obj2). Có nghĩa rằng, nếu đối tượng được phụ thuộc obj2 tồn tại thì đối tượng obj1 mới có thể tồn tại.

Cài đặt mã khi viết chương trình biểu diễn mối quan hệ Aggregation

public class Subject {
   private String name;
   public void setName(String name)
   {
     this.name = name;
   }
   public String getName()
   {
     return name;
   }
 }
 
 public class Student {
   private Subject[] studyAreas = new Subject[10];
   //the rest of the Student class
 } 

Cài đặt mã khi viết chương trình biểu diễn mối quan hệ Composition

public class Job {
    private String role;
    private long salary;
    private int id;
        
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }
    public long getSalary() {
        return salary;
    }
    public void setSalary(long salary) {
        this.salary = salary;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
}
public class Person {
    //composition has-a relationship
    private Job job; 
    public Person(){
        this.job=new Job();
        job.setSalary(1000L);
    }
    public long getSalary() {
        return job.getSalary();
    }
}

Source: internet

Lập trình hướng đối tượng

Các đặc tính của lập trình hướng đối tượng (OOP)

  • Thừa kế (Inheritance)

Thừa kế các tính năng của lớp cha (lớp cơ sở), cho phép sử dụng lại mã nguồn của những phương thức chung, không cần viết lại mã. Tính năng mở rộng được đưa vào các lớp mở rộng (lớp con)

  • Trừu tượng (Abstraction)

Chỉ focus vào những thông tin cần thiết của đối tượng, không đề cập/quan tâm thông tin chi tiết

  • Đóng gói (Encapsulation)

Là cách che đậy đi cài đặt chi tiết bên trong của đối tượng và bảo vệ dữ liệu an toàn, chỉ đưa ra bên ngoài những chức năng cho phép. Bên ngoài không truy cập được các chi tiết bên trong hoặc các chức năng mà đối tượng muốn dấu đi,.

private int age;
public int Age {
get
{
}
set
{
if(value<18){throw new Exception(“Invalid age”);}
else age = value;
}

}

  • Đa hình (Polymorphism)

Một đối tượng có thể đóng nhiều vai (role). Có 2 loại đa hình là
– Đa hình tĩnh (compiled time): chính là kỹ thuật overloading trong lập trình
– Đa hình động (run time): kiểu được gọi chỉ xác định được khi chạy