Bài 40: Tính đa hình và tính đóng gói trong php

Ngày đăng: 2024-04-14 15:20:27

Mục lục:

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

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

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

 

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

Tính đa hình 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.

Đó 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 (ovewrite).

Ví dụ:

// Lớp Cha

class DongVat

{

    // Động Vật Ăn

    public function An()

    {

        echo 'Động Vật Đang Ăn';

    }

}

  

// Lớp Con

class ConHeo extends DongVat

{

    public function An()

    {

        parent::An();

        echo 'Con Heo Đang Ăn Cám';

    }

}

  

// Khai Báo Lớp on

$conheo = new ConHeo();

  

// Gọi Hàm Ăn Trong Lớp ConHeo

$conheo->An();

 

Ta thấy lớp ConHeo đã đị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 không có ham An() thì lúc này mới tính ở hàm DongVat.

Vậ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:

 

// Lớp Hình Học

class HinhHoc

{

    // Hàm Vẽ Hình

    function Ve()

    {

        // Code

    }

  

    // Hàm Tính Diện Tích Của Hình

    function tinh_Dien_Tich()

    {

        // Code

    }

}

  

// Lớp hình Vuông

class HinhVuong extends HinhHoc

{

    // Độ Dài Cạnh

    public $canh = 0;

  

    // Định Nghĩa Lại Hàm Vẽ Hình Vuông

    function Ve()

    {

        echo 'Vẽ Hình Vuông';

    }

  

    //  Định Nghĩa Lại Hàm Tính Diện Tích

    function tinh_Dien_Tich()

    {

        return $this->canh*$this->canh;

    }

}

  

// Lớp hình chữ nhật

class HinhChuNhat extends HinhHoc

{

    // Chiều Dài Và Chiều Rộng

    public $dai = 0;

    public $rong = 0;

  

    // Định Nghĩa Lại Hàm Vẽ Hình Chữ Nhật

    public function Ve()

    {

        echo 'Vẽ Hình Chữ Nhật';

    }

  

    // Định Nghĩa Lại Hàm Tính Diện Tích

    public function tinh_Dien_Tich()

    {

        return $this->dai * $this->rong;

    }

}

  

// ------------------ //

// Chương Trình Chính //

// ------------------ //

  

// Hình Chữ Nhật

$HinhChuNhat = new HinhChuNhat();

$HinhChuNhat->Ve();

echo '<br/>';

 

$HinhChuNhat->dai = 25;

$HinhChuNhat->rong = 20;

echo $HinhChuNhat->tinh_Dien_Tich();

echo '<br/>';

  

// Hình Vuông

$HinhVuong = new HinhVuong();

$HinhVuong->Ve();

echo '<br/>';

$HinhVuong->canh = 20;

echo $HinhVuong->tinh_Dien_Tich();

 

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ư vẽ hình, tính diện tích nên  tôi khai báo 2 hàm đó ở lớp HinhHoc.

Ở lớp HinhVuong  và HinhChuNhat 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 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 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ố.

3. 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 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.

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 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 mà chúng ta đã học ở bài trước.

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.

 

Về bài trước...

                                Bài tiếp theo...

 

 


Tài liệu lập trình PHP

Bài viết trong cùng chuyên mục

Góc games giải trí (chơi trực tiếp trên web) Đăng nhập (chơi có thưởng)



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Bắn bóng

Plapy Bird (NH.Đông)

Vượt chướng ngại vật

Vẽ hình cứu người

Game Phases

Game vui chơi có thưởng

Game bắn cá



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

7332