6.5.10 Kết hợp nhiều class để tạo ra class mới – composition (1)

Kế thừa không phải là hình thức duy nhất để lớp/đối tượng cùng tồn tại. Trên thực tế, kế thừa là hoàn toàn vô ích khi chúng ta thể hiện nhiều mối quan hệ phức tạp hiện có trong thế giới thực.

Ví dụ, chúng ta có thể tưởng tượng một lớp được thiết kế để thu thập các loài chó khác nhau. Tạo ra một class và đặt nó ở dưới cùng của một cây thừa kế giống chó không phải là một ý tưởng tốt và sẽ không mang lại kết quả mong muốn.

Để đưa ra giải pháp đúng, chúng ta cần hiểu được vai trò thực tế của class – đó là thu thập một số loài chó, do đó, nó sẽ bao gồm những loài chó. Điều này có nghĩa là class đó nên chứa các loài chó chứ không kế thừa chúng.

Chúng ta có thể nói rằng bất kỳ cấu trúc phức tạp nào cũng được cấu tạo bằng cách thành phần đơn giản hơn – ví dụ: một chiếc xe thì bao gồm động cơ, hệ dẫn động, phanh… Nếu chúng ta tưởng tượng tất cả các thành phần này dưới dạng class, chúng ta sẽ thấy class thể hiện chiếc xe sẽ không có gì để làm với kế thừa cả.

Như bạn có thể đoán, xây dựng một lớp từ các lớp khác được gọi là composition (từ này dịch sang tiếng Việt nó thốn vđ nên xin phép các bạn dùng thuật ngữ English).

Hãy xem ví dụ sau →

Ví dụ này đưa ra một lớp Compo đơn giản bao gồm (composed) hai đối tượng của hai lớp độc lập (lớp A  B). Chương trình sẽ cho ra kết quả sau: