Giới thiệu
Trong nội dung bài này, chúng ta cùng nhau tìm hiểu tính chất kế thừa trong tư duy Lập trình hướng đối tượng.
Chúng ta sẽ thử nghiệm tính chất này qua một ví dụ đơn giản về hình chữ nhật và hình vuông.
Nhắc lại đặc điểm của tính chất kế thừa như sau:
- Đặ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.
Xây dựng lớp đối tượng HinhChuNhat
Bước 1.
Chúng ta tạo một PHP Project trong Eclipse IDE và đặt tên là PHPOOPSecondProject.
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.

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ề Tính chất kế thừa, một lớp đối tượng có thể được kế thừa và mở rộng những thuộc tính và phương thức nào đó của lớp cơ sở.
- Trong ví dụ ở đây, chúng ta đều biết rằng mỗi hình vuông đều là một hình chữ nhật và đều có 02 thuộc tính là chiều dài và chiều rộng. Do vậy chúng ta định nghĩa 02 thuộc tính của
class HinhChuNhattheo cách mà có thể được kế thừa.
- Chúng ta sử dụng từ khóa
protectedđược PHP cung cấp. Từ khóa này quy định một thuộc tính hoặc một phương thức là ẩn, cho phép kế thừa và chỉ được truy xuất bên trong một lớp và những lớp con của nó.
Bước 4.
Chúng ta định nghĩa constructor cho lớp đối tượng:

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:

Bước 6.
Chúng ta định nghĩa các phương thức tính chu vi, diện tích và đường chéo hình chữ nhật:

Những kỹ thuật lập trình cần chú ý:
Có lẽ cũng cần nhắc lại một chút về công thức tính đường chéo ở đây: (đường_chéo)^2 = (chiều_dài)^2 + (chiều_rộng)^2.
- Kết quả của công thức tính đường chéo là một số thực có phần thập phân. Do vậy chúng ta sử dụng kiểu dữ liệu
floatdo PHP cung cấp để đặc tả kết quả trả về này.
Xây dựng lớp đối tượng HinhVuong
Bước 1.
Chúng ta tạo class HinhVuong.php.

Những kỹ thuật lập trình cần chú ý:
- Trong ví dụ ở đây, chúng ta sử dụng từ khóa
extendsdo PHP cung cấp để đặc tả sự kế thừa.
- Như đã mô tả ở trên về định nghĩa 02 thuộc tính
chieuDaivàchieuRong. Chúng ta không cần định nghĩa lại 02 thuộc tính này trongclass HinhVuongmà kế thừa từHinhChuNhat.
- Nếu phân tích theo một hướng khác, chúng ta có thể định nghĩa thuộc tính
canhchoclass HinhVuong. Như vậy thì nên thiết lập lại phạm vi làprivatecho 02 thuộc tính củaclass HinhChuNhatđể không cho kế thừa.
Bước 2.
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ú ý:
- Trong
constructorchoclass HinhVuong, chúng ta có thể thực thi tác vụ khởi tạo giá trị mặc định nào đó cho riêngclass HinhVuong.
- Nếu chúng ta muốn gọi
constructorcủa lớp cơ sở để thực thi, ví dụ ở đây làclass HinhChuNhat, chúng ta sử dụng phương thứcparentvà truyền tham số tương ứng vớiconstructorchoclass HinhChuNhat.
Bước 3.
Chúng ta thực hiện kế thừa và điều chỉnh phương thức setter:

Những kỹ thuật lập trình cần chú ý:
- Thuật ngữ để kế thừa, điều chỉnh và mở rộng một phương thức của lớp cơ sở được gọi là
nạp chồng hàm(override).
- Trong ví dụ ở đây, chúng ta cần điều chỉnh phương thức
settervì trong hình vuông thì chiều dài và chiều rộng là bằng nhau (nên được gọi chung là cạnh).
- Chú ý rằng chúng ta sử dụng phương thức
parentđể gọi đếnsetterđã được định nghĩa ở lớp cơ sở.
Bước 4.
Chúng ta thực hiện kế thừa và điều chỉnh phương thức tinhDuongCheo():

Những kỹ thuật lập trình cần chú ý:
- Chúng ta không cần điều chỉnh các phương thức về tính chu vi và diện tích vì thực ra công thức là như nhau. Do vậy trong
class HinhVuongchúng ta không đặc tả lại mà kế thừa hoàn toàn từclass HinhChuNhatđối với 02 phương thứctinhChuVi()vàtinhDienTich().
- Đối với tác vụ tính đường chéo, chúng ta có 03 lựa chọn. Lựa chọn thứ nhất. Tương tự như 02 phương thức
tinhChuVi()vàtinhDienTich(), chúng ta không đặc tả lại mà kế thừa hoàn toàn từclass HinhChuNhat. Lựa chọn thứ hai. Chúng ta thực hiện kế thừa lại bằng cách gọi phương thức củaclass HinhChuNhatđể thực thi:parent::tinhDuongCheo(). Lựa chọn thứ ba. Chúng ta thực thi theo công thức thu gọn dành riêng cho hình vuông:(đường_chéo) ^2 = 2 * (cạnh)^2.
Thử nghiệm chương trình
Bước 1.
Chúng ta thực hiện thử nghiệm tạo mới 01 hình chữ nhật, 01 hình vuông và tính chu vi, diện tích, đường chéo:

Bước 2.
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 tính chất kế thừa trong 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ề tính chất kế thừa 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.






























































































