Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 5: Cách tính chất đặc thù của hướng đối tượng

Sau khi đã giới thiệu với các bạn cơ bản về hướng đối tượng rồi thì bài này mình sẽ giới thiệu qua về các tính chất đặc thù của hướng đối tượng. Cụ thể là 4 tính chất sau:

  • Tính Kế thừa (inheritance).
  • Tính đa hình (polymorphism).
  • Tính đóng gói (encapsulation).
  • Tính trừng tượng (abstraction).

1, Tính kế thừa.

-Tính chất này cho phép một đối tượng có thể có được các đặc tính (thuộc tính, phương thức) mà đối tượng khác đã có thông qua kế thừa(extends). Đ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. Và tính chất này các bạn đã được học ở trong bài 3 rồi, nên mình sẽ không ví dụ nữa.

2, Tính đa hình.

-Đối với tính chất này, nó được thể hiện rõ nhất qua việc gọi phương thức của đối tượng. Các phương thức hoàn toàn có thể giống nhau, nhưng việc xử lý luồn có thể khác nhau.

VD: ta có 3 lớp Hình, Hình vuông, Hình tròn. Trong đó lớp hình là lớp cha của 2 lớp còn lại có phương thức là tính diện tích.

class Hinh
{
    protected function tinhDienTich()
    {
        //code
    }
}

class HinhVuong extends Hinh
{
    private $canh;

    public function setCanh($canh)
    {
        $this->canh = $canh;
    }

    public function getCanh()
    {
        return $this->canh;
    }

    //xử lý tính diện tích của hình vuông
    public function tinhDienTich()
    {
        return pow($this->canh, 2);
    }
}

class HinhTron extends Hinh
{
    private $bankinh;

    public function setBanKinh($bankinh)
    {
        $this->bankinh = $bankinh;
    }

    public function getBanKinh()
    {
        return $this->bankinh;
    }

    //xử lý tính diện tích của hình tròn
    public function tinhDienTich()
    {
        return (pow($this->bankinh, 2) * pi());
    }
}

$hinhvuong = new HinhVuong();

$hinhvuong->setCanh(4);

echo $hinhvuong->tinhDienTich();
echo '
 ___________________________________________________ 
';
$hinhtron = new HinhTron();

$hinhtron->setBanKinh(4);

echo $hinhtron->tinhDienTich();

 -Như ở trên thi chúng ta có thể nhận thấy cùng là một phương thức tính diện tích, cùng trả về diện tích của hình nhưng luồng xử lý tì hoàn toàn khác nhau -> đó là tính đa hình hóa trong hướng đối tượng.

3, Tính đóng gói.

-Tính chất này không cho phép người sử dụng các đối tượng 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ó. Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã. Đây là tính chất đảm bảo sự toàn vẹn, bảo mật của đối tượng, và tính chất này chính là bài thứ 4 trong series.

4, Tính trừu tượng.

-Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết.

-Mỗi đối tượng phục vụ như là một “động tử” 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 trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành. Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng (phần này mình sẽ nói ở bài sau).

5, Lời kết.

-Như vậy mình đã trình bài xong đến mọi người về các tính chất đặc thù trong hướng đối tượng rồi, các bạn chú ý cho mình bài này vì khi đi phỏng vấn thực tập sinh, khó có thể tránh khỏi câu này. Bài tiếp theo chúng ta sẽ tìm hiểu về phương thức khởi tạo và phương thức hủy trong class.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

7 Comments

  • Tính Kế thừa (interface).--> Inheritance

vodanh

6 năm trước

Cảm ơn bạn đã góp ý! Mình đã sửa rồi nhé!

Vũ Thanh Tài

6 năm trước

Làm sao để overload hàm khởi tạo ? cám ơn ad

Nguyen Phu

5 năm trước

Bạn tham khảo bài này nhé:
https://toidicode.com/ke-thua-class-trong-php-99.html

Vũ Thanh Tài

5 năm trước

cam on nhung bai viet rat de hieu ve OOP nay ak. Chuc a that nhieu suc khoe va co nhung chia se thu vi den moi nguoi

Huy Vu

5 năm trước

Cảm ơn bạn vì bài chia sẻ khá chi tiết và đầy đủ.

Đôi chút có sai xót nhưng không đáng kể đó là diện tích hình vuông là cạnh x cạnh = return pow($this->canh, 2); mới đúng ạ!

Hưng

5 năm trước

Cảm ơn anh!

CườngNT

1 năm trước

Bình luận

Captcha