Composition over Inheritance Principle

Huy NguyenHuy Nguyen
2 min read

Hi mọi người, hôm nay mình sẽ tiếp tục series Design Pattern thông dụng. Tuy nhiên bài hôm nay không liên quan đến một design pattern nào cả mà là về một nguyên lý trong lập trình hướng đối tượng. Đó chính là Composition over Inheritance

Ví dụ

Cụ thể như nào, hãy xem xét ví dụ sau:

  • Class Animal có 2 method Eat() và Sleep(),

  • Class SwimmingAnimal kế thừa class Animal và có thêm method Swim()

  • Class FlyingAnimal kế thừa class Animal và có thêm phương thức Fly()

Article content

Sử dụng Inheritance

Vấn đề

Vậy giả sử ta có 1 loài động vật vừa có thể bơi, vừa có thể bay (như vịt trời - Mallard) thì sao? Ta có thể tạo thêm class FlyingSwimmingAnimal kế thừa Animal và có thêm 2 method là Swim() và Fly(), nhưng điều này lại gây tình trạng trùng lặp logic code. Class FlyingSwimmingAnimal cũng không thể kế thừa cùng lúc cả SwimmngAnimal và FlyingAnimal do tính chất OOP.

Giải pháp

Đây chính là lúc nguyên lý Composition over Inheritance phát huy tác dụng. Thay vì kế thừa, chúng ta có thể sử dụng Composition để giải quyết vấn đề này một cách hiệu quả hơn. Ta có thể tạo ra các class đại diện cho các hành vi cụ thể và kết hợp chúng trong một lớp.

Trong ví dụ này, lớp Mallard không kế thừa các lớp SwimmingAnimal hoặc FlyingAnimal, mà thay vào đó sử dụng Composition bằng cách kết hợp các hành vi Swimming và Flying. Điều này giúp giảm thiểu trùng lặp code và tăng tính linh hoạt trong việc mở rộng chức năng.

Article content

Sử dụng Composition

Kết luận

Nguyên lý Composition over Inheritance giúp chúng ta tránh được những vấn đề phát sinh từ việc sử dụng kế thừa quá mức, đặc biệt là khi cần kết hợp nhiều hành vi hoặc chức năng. Thay vì tạo ra các lớp kế thừa phức tạp và dễ gây lỗi, chúng ta có thể xây dựng các lớp có thể kết hợp nhiều hành vi khác nhau thông qua Composition. Điều này giúp tạo ra các hệ thống dễ quản lý hơn, đồng thời tăng cường khả năng tái sử dụng mã nguồn và giảm thiểu sự trùng lặp.

0
Subscribe to my newsletter

Read articles from Huy Nguyen directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Huy Nguyen
Huy Nguyen

I am a software engineer with 4 years of experience in developing web applications. My expertise lies in backend development, and I have a deep interest in problem-solving, algorithms, system design, and databases. I am always eager to learn and embrace challenging projects, striving to deliver applications that exceed user expectations. I also love sharing my knowledge and learning from others to foster mutual growth and improvement