Bài 09: Tính đa hình ở trong lập trình hướng đối tượng PHP

Ở trong bài này chúng ta sẽ tìm hiểu một tính chất nữa trong lập trình hướng đối tượng đó là tính đa hình.

Nội dung chính

  • 1. Tính đa hình là gì?
    • Vậy ở đây bản chất của tính đa hình là gì?
  • 2. Ví dụ tính đa hình.

1. Tính đa hình là gì?

Tính đa hình bên trong PHP hay còn gọi là tính đa hình, trong lập trình hướng đối tượng là sự đa hình của mỗi hành động cụ thể ở những đối tượng khác nhau. Ví dụ hành động ăn ở các loài động vật hoàn toàn khác nhau như: con heo ăn cám, hổ ăn thịt, con người thì … ăn hết.

Đó chính là sự đa hình trong thực tế, còn đa hình trong lập trình thì được hiểu là Lớp Con sẽ viết lại những phương thức lớp cha.

VÍ DỤ:

Ta thấy lớp ConHeo đã được định nghĩa lại hàm An() của lớp DongVat nên khi gọi đến hàm An() sẽ được tính là gọi ở lớp ConHeo. Nếu trong lớp ConHeo nếu như không có ham An() thì lúc này mới tính ở hàm DongVat.

Vậy ở đây bản chất của tính đa hình là gì?

Là kỹ thuật cho phép thay đổi nội dung cùng một hành vi (hàm). Trong hai lớp cha và con. Hay nói cách khác là viết lại hàm ở lớp cha trong lớp con.

2. Ví dụ tính đa hình

Xét ví dụ sau:

Trong ví dụ này lớp HinhHoc là lớp biểu hiện cho các hình học không gian. Lớp HinhVuong và HinhChuNhat là 2 hình xác định năm trong hình học không gian.

Trong hình học không gian có các hành động như là vẽ hình, tính diện tích nên tôi khai báo 2 hàm đó ở lớp HinhHoc.

Ở lớp Hình Vuông và Hình chữ nhật tôi viết lại hai hàm tính diện tích và vẽ hình. Vì mỗi hình có một cách tính khác nhau nên nếu viết ở lớp HinhHoc thì không thể biểu diễn ra được cho tất cả các hình.

Lưu ý: Với tất cả các bạn khi viết lại hàm thì các biến truyền vào hàm ở lớp cha và lớp con phải khớp nhau, nghĩa là hàm ở lớp cha có truyền vào bao nhiêu tham số thì hàm ở lớp con truyền vào bấy nhiêu tham số.

Bài 10: Đặc tính đóng gói trong lập trình hướng đối tượng PHP

Trong bài này chúng ta sẽ tìm hiểu đến tính chất cuối cùng trong lập trình hướng đối tượng. Đó là tính đóng gói, đây là một trong ba tính chất quan trọng mà chúng ta cần phải nắm được.

Nội dung chính:

  • 1. Tính đóng gói là gì?
  • 2. Tổng kết.

1. Tính đóng gói là gì?

Tính đóng gói là tính chất không cho phép người dùng hay đối tượng khác thay đổi dữ liệu thành viên của đối tượng nội tại. Chỉ có các hàm và thành viên của đối tượng đó mới có quyền thay đổi trạng thái nội tại của nó mà thôi. Các đối tượng khác muốn thay đổi thuộc tính thành viên của đối tượng nội tại thì chúng cần truyền thông điệp cho đối tượng và việc quyết định thay đổi hay không vẫn do đối tượng nội tại quyết định.

Chúng ta có thể hiểu nôm la tính đóng gói là: không cho bên ngoài biết được bên trong đối tượng có những gì hay được cài đặt như thế nào. Nếu ta muốn thay đổi bên trong đối tượng thì phải được sự chấp nhận của đối tượng đó thông qua ba mức độ truy cập private protected và public.

Ví dụ: Trong đối tượng kế toán có một chức năng tính lương chức năng này có những phép tính mà các đối tượng khác không hề biết cách tính nó như thế nào. Đối tượng kế toán sẽ có những chức năng dành cho các hàm kế thừa nó có thể truy xuất vào và thông qua ba mức độ truy cập để giới hạn chúng. Đây cũng chính là bảo mật thông tin cho đối tượng.

2. Tổng kết

Tính đóng gói cũng không có ví dụ gì vì nó chỉ là lý thuyết cho tất cả các bạn hiểu mà thôi. Kiến thức mình cũng chỉ có thế. Nếu các bạn có những ý hay hơn thì góp ý cho mình thì mình rất vui. Bài tiếp theo chúng ta sẽ tìm hiểu hàm khởi tạo và hàm hủy trong PHP. Thân chào chúc các bạn vui vẻ.

Bài 11: Các hàm khởi tạo và hàm hủy trong lập trình hướng đối tượng PHP

Trong mỗi lớp có hai hàm rất đặc biệt đó là hàm khởi tạo và hàm hủy. Hàm khởi tạo sẽ được tự động gọi khi các bạn khởi tạo mới một đối tượng. Còn hàm hủy thì sẽ được gọi khi đối tượng bị hủy.

Nội dung chính:

  • 1. Hàm khởi tạo
  • 2. khởi tạo trong kế thừa
  • 3. Hàm hủy
  • 4. hủy trong kế thừa
  • 5. Lời kết

1. Hàm khởi tạo

Hàm khởi tạo cũng là một hàm rất bình thường nhưng có điểm đặc biệt là nó luôn luôn được gọi tới khi ta khởi tạo một đối tượng. Hàm khởi tạo có thẻ có tham số hoặc không có tham số có thể có giá trị trả về hoặc không. Ở một hàm bình thường khác các bạn cũng có thể gọi lại hàm khởi tạo được và hàm khởi tạo cũng có thể gọi một hàm bình thường khác.

Trong PHP có hai cách khai báo tên hàm khởi tạo. Cách thứ nhất là khai báo tên trùng với tên lớp:

Kết quả của cả hai đoạn code trên sẽ được xuất ra màn hình dòng chữ “Lớp sinh viên được khởi tạo” vì khi khởi tạo đối tượng SinhVien thì hàm khởi tạo đối tượng __construct() và SinhVien() sẽ tự động được gọi.

Hàm khởi tạo cũng có thể có tất cả các tham số truyền vào. Lúc này khi khởi tạo đối tượng thì ta sẽ truyền các tham số đó vào trong lớp.

2. Hàm khởi tạo trong kế thừa

Khi lớp con kế thừa từ lớp cha thì khi ta tạo một đối tượng thuộc lớp con thì sẽ xảy ra một trong các trường hợp sau đây:

Trường hợp 1: Nếu lớp Con có hàm khởi tạo và lớp cha cũng có hàm khởi tạo.

Trường hợp này sẽ hàm khởi tạo của lớp con sẽ được chạy. còn hàm khởi tạo ở lớp cha không được chạy.

Ví dụ:

Kết quả là xuất ra màn hình là “Lớp B được khởi tạo”.

Trường hợp 2: Nếu lớp con không có hàm khởi tạo, lớp Cha có hàm khởi tạo.

Ở trường hợp này hàm khởi tạo ở lớp cha sẽ được chạy.

Ví dụ:

Kết quả được xuất ra màn hình là “Lớp A được khởi tạo”.

Trường hợp 3: Lớp Con có hàm khởi tạo, lớp cha không có hàm khởi tạo.

Ở trường hợp này hàm khởi tạo lớp con sẽ được chạy.

 Ví dụ:

Kết quả được xuất ra màn hình là “Lớp B được khởi tạo

Trường hợp 4: Cả 2 lớp chà và lớp con đều không thể có hàm khởi tạo.

Trường hợp này đương nhiên là sẽ không có hàm nào được chạy.

Ví dụ:

3. Hàm hủy

Hàm hủy là các hàm tự động gọi sau khi đối tượng đã bị hủy. Nó thường được sử dụng để giải phóng bộ nhớ chương trình. Ở trong đó đối tượng hàm hủy có thể có hoặc không.

Ví dụ:

Kết quả hiển thị ra màn hình là:

Lớp A được khởi tạo
Lớp A đang được sử dụng
Lớp A bị hủy

4. Hàm hủy trong kế thừa

Tương tự như hàm khởi tạo trong kế thừa. Nếu lớp Con có hàm hủy thì được ưu tiên chạy còn nếu lớp Con không có thì hàm hủy thì sẽ chạy ở lớp Cha, còn nếu cả 2 đều không có thì sẽ không chạy hàm nào.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.