I. 4 tính chất cơ bản của lập trình hướng đối tượng
Trừu tượng (Abstraction) tập trung vào việc xác định các hành vi và thuộc tính cốt lõi mà tất cả các lớp con cần tuân theo.
Đa hình (Polymorphism) cho phép các đối tượng thuộc các lớp khác nhau thực hiện cùng một hành vi. Mỗi lớp có thể định nghĩa hành vi theo cách riêng của nó.
- Trừu tượng giúp định nghĩa các hành vi cần có cho một nhóm đối tượng, tạo điều kiện cho việc tổ chức mã nguồn và bảo trì.
- Đa hình cho phép các đối tượng thực hiện các hành vi đó theo cách riêng của mình, mang lại tính linh hoạt và khả năng mở rộng cho phần mềm.
Ví dụ, các lớp Dog
và Cat
đều có cùng một phương thức sound()
(hành vi giống nhau) -> (Từu tượng) nhưng có cách cài đặt riêng ((Đa hình)), tạo ra âm thanh khác nhau cho từng loài.
Tính đóng gói cho phép bạn điều chỉnh quyền truy cập vào các thuộc tính và phương thức trong một đối tượng. Thông qua việc sử dụng các modifier (như private
, protected
, public
trong nhiều ngôn ngữ lập trình), bạn có thể kiểm soát ai có thể truy cập và thay đổi dữ liệu trong đối tượng đó. Điều này giúp bảo vệ dữ liệu, ngăn chặn truy cập trái phép và duy trì tính toàn vẹn của đối tượng.
Kế thừa cho phép lớp con sử dụng lại các thuộc tính và phương thức của lớp cha, giúp tái sử dụng mã và giảm trùng lặp. Lớp con có thể mở rộng hoặc thay đổi các thuộc tính và phương thức từ lớp cha nếu cần.
II. Sử dụng interface và abstract class
Sử dụng Interface
- Khi nào?: Khi bạn muốn định nghĩa một bộ phương thức mà không quan tâm đến việc các phương thức này thuộc về loại đối tượng nào.
- Đặc điểm:
- Tất cả các phương thức đều là trừu tượng (không có phần thân).
- Không thể chứa trạng thái (thuộc tính), nhưng có thể chứa các hằng số.
- Hỗ trợ kế thừa nhiều, tức là một lớp có thể implements nhiều interface.
- Ví dụ: Định nghĩa hành vi như
Flyable
,Soundable
mà không cần biết lớp cụ thể là gì.
Sử dụng Abstract Class
- Khi nào?: Khi bạn muốn chia sẻ mã (phương thức và thuộc tính) giữa các lớp con và cần định nghĩa một cấu trúc chung cho chúng.
- Đặc điểm:
- Có thể chứa cả phương thức trừu tượng và phương thức đã được triển khai.
- Có thể chứa các thuộc tính (fields) để giữ trạng thái.
- Hỗ trợ kế thừa đơn, tức là một lớp chỉ có thể kế thừa từ một lớp trừu tượng duy nhất.
- Ví dụ: Lớp
Animal
có thể chứa phương thức trừu tượngmakeSound()
và phương thức đã triển khaieat()
, chia sẻ chúng cho các lớp con nhưDog
vàCat
.
Tóm tắt
- Interface: Định nghĩa hành vi mà không cần biết loại đối tượng; không chia sẻ mã.
- Abstract Class: Chia sẻ mã và định nghĩa cấu trúc chung cho các lớp con.

Dương Trần Hà, hiện mình đang là kỹ công nghệ phần mềm và cũng là giám đốc thành lập công ty DTH Solutions. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn lập trình, nodejs, nestjs, laravel, yii2, reactjs, nextjs. Mình đã phát triển rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số thành công nhỏ, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.