Giới thiệu
Lập trình hướng đối tượng (tiếng Anh: Object-oriented programming, viết tắt: OOP) là một mô hình kiến trúc lập trình dựa trên khái niệm “công nghệ đối tượng”, mà trong đó, đối tượng chứa đựng các dữ liệu: (i) thuộc tính của đối tượng; (ii) phương thức để thực thi các hành động của đối tượng.
OOP được xem là giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn.
Một số khái niệm cơ bản
Khái niệm đầu tiên là “đối tượng”, được hiểu như là 1 thực thể: người, vật hoặc 1 bảng dữ liệu, . . .
Một đối tượng bao gồm 2 thông tin chính:
Thuộc tính. Là những thông tin, đặc điểm của đối tượng. Ví dụ: một hình chữ nhật sẽ có chiều dài, chiều rộng, . . .
Phương thức. Là những thao tác, hành động mà đối tượng đó có thể thực hiện. Ví dụ: một hình chữ nhật sẽ có thao tác tính chu vi, diện tích, . . .
Khái niệm thứ hai là “lớp”, được hiểu như là một khuôn mẫu mà từng đối tượng là một thể hiện cụ thể dựa trên khuôn mẫu đó.
Ví dụ một lớp hình chữ nhật sẽ định nghĩa: (i) các thuộc tính chiều dài / chiều rộng; (ii) các phương thức tính chu vi, tính diện tích. Còn từng đối tượng hình chữ nhật sẽ có số đo cụ thể cho từng thuộc tính cũng như chu vi và diện tích riêng.
Các tính chất của lập trình hướng đối tượng
Tính đóng gói (encapsulation) và che giấu thông tin (information hiding):
- Tính chất này không cho phép tác nhân bên ngoài thay đổi trạng thái nội tại của một đối tượng.
- Chỉ có các phương thức nội tại của đối tượng cho phép thay đổi trạng thái của nó.
- Đây là tính chất đảm bảo sự toàn vẹn của đối tượng.
Tính trừu tượng (abstraction):
- Là phương pháp trừu tượng hóa định nghĩa lên những hành động, tính chất của loại đối tượng nào đó cần phải có.
- Mỗi đối tượng có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác.
- Tính chất này thường được gọi là sự trừu tượng của dữ liệu.
Tính kế thừa (inheritance):
- Đặc tính này cho phép một đối tượng có thể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa.
- Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại.
Tính đa hình (polymorphism):
- Thể hiện thông qua việc gửi các thông điệp (message).
- Việc gửi các thông điệp này có thể so sánh như việc gọi các phương thức bên trong của một đối tượng.
- Các phương thức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có phản ứng khác nhau.
Xây dựng lớp đối tượng độc lập
Trong nội dung bài này, chúng ta cùng tìm hiểu cách xây dựng một lớp đối tượng độc lập cùng với tính chất đóng gói (encapsulation) bằng ngôn ngữ PHP.
Bước 1.
Chúng ta tạo một PHP Project trong Eclipse IDE và đặt tên là PHPOOPFirstProject.
Chúng ta tiếp tục tạo file index.php.

Bước 2.
Chúng ta tạo folder object và class HinhChuNhat.php.

Những kỹ thuật lập trình cần chú ý:
- Như đã trình bày ở phần Giới thiệu về Tính đóng gói (encapsulation) và che giấu thông tin (information hiding). Mỗi
foldercó thể được xem như là một hình thức để gom nhóm các lớp đối tượng có cùng chung những đặc điểm nào đó.
- PHP là một ngôn ngữ lập trình rất linh động và hỗ trợ nhiều phong cách lập trình khác nhau. Chúng ta có thể tự do lựa chọn việc có đặt một
classvào bên trong mộtfolderhay không. Tuy nhiên, để dễ quản lý một chương trình phần mềm lớn, chúng ta nên phân hoạch cácclassvào trong nhữngfoldertheo tư duy hướng đối tượng.
- Trong ví dụ hiện tại, chúng ta có thể đặt tên
folderlàobject(nghĩa là đối tượng nói chung) hoặcshape(nghĩa là hình vẽ nói chung).
Bước 3.
Chúng ta định nghĩa 02 thuộc tính cơ bản của một hình chữ nhật:

Những kỹ thuật lập trình cần chú ý:
- Như đã trình bày ở phần Giới thiệu về đặc trưng của một lớp đối tượng. Các thuộc tính nội tại của một đối tượng thì chỉ có thể được trông thấy và điều chỉnh bởi các phương thức nội tại của chính đối tượng đó.
- Chúng ta sử dụng từ khóa
privateđược PHP cung cấp. Thuộc tính này quy định một thuộc tính hoặc một phương thức là ẩn bên trong một lớp.
Bước 4.
Chúng ta định nghĩa constructor cho lớp đối tượng:

Những kỹ thuật lập trình cần chú ý:
Constructorlà một dạng đặc biệt của phương thức, được sử dụng để khởi tạo các đối tượng.
Constructorđược gọi tại thời điểm tạo đối tượng. Nó khởi tạo các giá trị để cung cấp dữ liệu cho các đối tượng, đó là lý do tại sao nó được gọi làconstructor.
- Khác với nhóm ngôn ngữ Java / C#, PHP chỉ cung cấp một phương thức constructor duy nhất là
__construct(). Chúng ta sẽ chủ động quyết định xem có để tham số choconstructorhay không. Ngoài ra chúng ta chỉ có thể tạo duy nhất một dạngconstructorcó hoặc không có tham số. Đối với những phương thức khác, chúng ta sẽ tiếp tục tìm hiểu nội dung này trong những bài tiếp theo về lập trình hướng đối tượng.
- Từ khóa
thisgiúp chúng ta liên hệ đến thuộc tính hoặc phương thức nội tại của lớp đối tượng. Chúng ta sử dụng từ khóa này để phân biệt khi muốn định nghĩa các biến có cùng tên với các thuộc tính hoặc phương thức nội tại của lớp.
Bước 5.
Chúng ta định nghĩa các phương thức truy xuất và điều chỉnh dữ liệu, được gọi là các getter và setter:

Những kỹ thuật lập trình cần chú ý:
- Đây chính là những phương thức nội tại được dành riêng để truy xuất và điều chỉnh thông tin cho các thuộc tính nội tại.
- Theo quy tắc chung, tên của các phương thức này nên để
getvàsetđứng trước tên của thuộc tính.
- Mỗi thuộc tính nên được theo kèm bởi một cặp
get/set.
Bước 6.
Chúng ta định nghĩa các phương thức tính chu vi và diện tích hình chữ nhật:

Bước 7.
Chúng ta thực hiện thử nghiệm tạo mới hình chữ nhật và tính chu vi, diện tích:

Những kỹ thuật lập trình cần chú ý:
- Để truy xuất đến một
file phpở mộtfolderkhác, chúng ta sử dụng từ khóarequire_once. Ví dụ ở đây làrequire_once ‘object/HinhChuNhat.php’. Khác với nhóm ngôn ngữ Java / C# / Python, cách thức thực hiện của PHP là sẽ sao chép toàn bộ mã nguồn của file vào đúng vị trí sử dụngrequire_once. Trên thực tế chúng ta có thể sử dụng từ khóarequire. Nhưng như vậy có thể xảy ra trường hợp một file được truy xuất nhiều lần và có thể gây ra những hệ quả không mong muốn. Do vậy khuyến khích nên dùngrequire_onceđể chỉ truy xuất một lần duy nhất.
- Chúng ta khởi tạo một đối tượng thực bằng cách gọi
constructorcủa lớp đối tượng với toán tửnew. Vớiconstructorđược gọi thì thuộc tính nội tại sẽ được khởi tạo với giá trị mặc định của nó.
Bước 8.
Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Tổng kết
Trong bài này, chúng ta đã cùng nhau tìm hiểu những kiến thức cơ bản về lớp đối tượng cũng như những tính chất về lập trình hướng đối tượng.
Chúng ta đã cùng nhau thực hiện một ví dụ nhỏ về lớp đối tượng với ngôn ngữ PHP.
Trong các bài tiếp theo, chúng ta sẽ tiếp tục tìm hiểu những kiến thức khác xung quanh lập trình hướng đối tượng.