Tính đóng gói trong lập trình hướng đối tượng OOP

Tính đóng gói trong lập trình hướng đối tượng OOP cho phép kiểm soát được quyền truy cập nhờ các phương thức public, protected, và private. Hãy đọc bài viết sau để hiểu rõ hơn.

I. Tìm hiểu về tính đóng gói trong lập trình hướng đối tượng OOP

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

Tính đóng gói là cơ chế được sử dụng để an toàn dữ liệu hoặc an toàn thông tin trong 1 đối tượng. Nó 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 đối tượng.

Có thể hiểu như sau tính đóng gói không cho phép 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.

II. Tìm hiểu về các mức độ truy cập private, protected và public

Trong lập trình hướng đối tượng OOP việc đóng gói được thực hiện nhờ sử dụng các từ khoá public, private và protected hay còn gọi là mức độ truy cập.

Có ba mức độ truy cập

  • public: thuộc tính hoặc phương thức có thể được truy cập từ mọi nơi. Khi không khai báo thì mặc định sẽ là public.
  • protected: thuộc tính hoặc phương thức có thể được truy cập trong lớpbên trong các lớp được kế thừa từ nó.
  • private: thuộc tính hoặc phương thức chỉ có thể được truy cập trong chính lớp được khai báo.

Ví dụ 1

<?php
class Fruit {
  public $name;
  protected $color;
  private $weight;
}

$mango = new Fruit();
$mango->name = 'Mango'; // OK  ==> Mức truy cập public được quyền truy cập mọi nơi.
$mango->color = 'Yellow'; // ERROR  ==> Mức truy cập protected chỉ được quyền truy cập ở bên trong class đó và những class được kế thừa.
$mango->weight = '300'; // ERROR    ==> Mức truy cập private chỉ được quyền truy cập bên trong class đó.
?>

Ví dụ 2

<?php
class Fruit {
  public $name;
  public $color;
  public $weight;

  function set_name($n) {  // không khai báo mức truy cập thì mặc định sẽ là public
    $this->name = $n;
  }
  protected function set_color($n) {
    $this->color = $n;
  }
  private function set_weight($n) {
    $this->weight = $n;
  }
}

$mango = new Fruit();
$mango->set_name('Mango'); // OK
$mango->set_color('Yellow'); // ERROR
$mango->set_weight('300'); // ERROR
?>

Ví dụ 3

<?php
class Fruit {
  protected $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
  public function hello(){
    echo "Hello {$this->name}"; // ==> $name có mức độ truy cập là protected nên gọi được thuộc tính $name từ class Fruit
  }
}


$strawberry = new Strawberry("Strawberry", "red");  // OK ==> __construct() mức truy cập là public
$strawberry->message(); // OK ==> message() mức truy cập là public
$strawberry->hello(); // OK ==> hello() mức truy cập là public
$strawberry->intro(); // ERROR ==> vì mức truy cập là protected
?>

Bài viết nên đọc

Trên đây là những kiến thức từ kinh nghiệm bản thân mình nên các bạn có thể tham khảo. Nếu các bạn có góp ý cho mình thì hãy gửi vào đây, mình sẵn sàng nhận ý kiến đóng góp từ các bạn.

Ngoc Phuong

Ngoc Phuong - 82 bài viết - Đánh giá:

Có 2 cách học hiệu quả nhất, 1 là nói cho người khác biết thứ bạn mới học được, 2 là nói cho người khác biết thứ bạn sắp quên. Tôi mới học được rất nhiều thứ. Tôi cũng sắp quên rất nhiều thứ.

Để lại bình luận

Địa chỉ email của bạn sẽ không được công khai