4 Tính Chất Của Lập Trình Hướng Đối Tượng
Lập trình hướng đối tượng (OOP) là một mô hình lập trình mạnh mẽ và phổ biến, tập trung vào việc tổ chức code thành các “đối tượng” chứa dữ liệu (thuộc tính) và hành vi (phương thức). Để hiểu rõ về OOP, cần nắm vững 4 tính chất của lập trình hướng đối tượng: tính đóng gói (Encapsulation), tính kế thừa (Inheritance), tính đa hình (Polymorphism) và tính trừu tượng (Abstraction).
Tính Đóng Gói (Encapsulation)

Khái niệm
Tính đóng gói là quá trình kết hợp dữ liệu (thuộc tính) và các phương thức (hành vi) liên quan đến dữ liệu đó vào trong một đơn vị duy nhất, gọi là lớp. Nó giống như việc “đóng gói” tất cả các thành phần liên quan đến một đối tượng vào trong một hộp. Mục đích chính của tính đóng gói là bảo vệ dữ liệu khỏi sự truy cập trực tiếp từ bên ngoài và đảm bảo tính toàn vẹn của dữ liệu.
Cơ chế hoạt động
Tính đóng gói được thực hiện thông qua việc sử dụng các cấp độ truy cập (access modifiers) như private, protected và public.
Private: Các thành viên (thuộc tính và phương thức) được khai báo là private chỉ có thể được truy cập từ bên trong lớp đó. Điều này đảm bảo rằng dữ liệu bên trong đối tượng không thể bị thay đổi trực tiếp từ bên ngoài.
Protected: Các thành viên được khai báo là protected có thể được truy cập từ bên trong lớp đó và từ các lớp con (lớp kế thừa) của lớp đó.
Public: Các thành viên được khai báo là public có thể được truy cập từ bất kỳ đâu.
Thông thường, các thuộc tính của một lớp sẽ được khai báo là private hoặc protected, và các phương thức để truy cập và thay đổi các thuộc tính này (getter và setter) sẽ được khai báo là public. Điều này cho phép kiểm soát quyền truy cập vào dữ liệu và đảm bảo rằng dữ liệu chỉ được thay đổi thông qua các phương thức được định nghĩa sẵn.
Ưu điểm của tính đóng gói
Bảo vệ dữ liệu: Ngăn chặn truy cập trực tiếp vào dữ liệu, giảm nguy cơ dữ liệu bị thay đổi một cách không mong muốn.
Tính linh hoạt: Dễ dàng sửa đổi code bên trong mà không ảnh hưởng đến các phần khác của chương trình.
Khả năng tái sử dụng: Mã đã đóng gói có thể được tái sử dụng trong nhiều ứng dụng khác nhau.
Dễ bảo trì: Giúp mã nguồn dễ đọc, dễ hiểu và dễ bảo trì hơn.
Tính Kế Thừa (Inheritance)

Khái niệm
Tính kế thừa là khả năng một lớp (lớp con/subclass) kế thừa các thuộc tính và phương thức của một lớp khác (lớp cha/superclass). Lớp con có thể sử dụng lại các thành phần đã được định nghĩa trong lớp cha, đồng thời có thể mở rộng hoặc sửa đổi các thành phần này để phù hợp với nhu cầu của mình. Tính kế thừa thể hiện mối quan hệ “là một” (is-a) giữa các lớp.
Các loại kế thừa
Có nhiều loại kế thừa khác nhau:
Đơn kế thừa (Single Inheritance): Một
