Đinh nhĩa ngắn gọn 4 tính chất cơ bản của lập trình hướng đối tượng

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 DogCat đề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 interfaceabstract 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ượng makeSound() và phương thức đã triển khai eat(), chia sẻ chúng cho các lớp con như DogCat.

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.