[OOP] Tính đóng gói trong OOP – Encapsulation

1. Đóng gói trong lập trình hướng đối tượng là gì?

Đóng gói tức là cách thức mà Class che giấu thông tin, hạn chế quyền try cập từ bên ngoài vào.
Chắc hẳn anh em đều biết đến 3 loại Access modifiers: Public – Protected – Private. Chúng giúp ta thể hiện tính chất đóng gói của OOP bằng cách nói cho Complier biết nên, có quyền try cập vào thuộc tính, phương thức nào.

2. Phân biệt Public – Protected – Private

Phân biệt giữa các Access modifiers là một trong những câu hỏi huyền thoại khi phỏng vấn  :10: 

private – Chỉ có Class hiện tại (không phải Class kế thừa, không phải Object) mới có thể truy cập được vào thuộc tính và phương thức có kiểu là private.

protected – Chỉ có Class hiện tại và Class kế thừa nó (subclasses) mới có quyền truy cập vào thuộc tính và phương thức có kiểu là protected.

public – Class hiện tại, Class kế thừa, Object khởi tạo từ Class đều có thể truy cập đến thuộc tính và phương thức với kiểu là public.

3. Ví dụ + tại sao lại có tính chất này?

Có anh em từng nói với mình: gớm ông chỉ lắm trò, để hết là public cho nó dễ làm việc, có cái gì đâu mà phải đắn đo, suy nghĩ xem là private hay protected hay public.  :38: 

Nghe có vẻ không ổn, tưởng tượng mình xây một cái nhà, xây xong lại cứ để ai thích vào thì vào, thích lấy gì thì lấy, thích thay đổi gì thì thay đổi, thế thì loạn mất.

Ví như có một Class Nhà.

  • Class Nhà có thuộc tính Public $name: giả định nhà mình có tên là hanhtrinhtuoitre. Nhà mình mặc định tên là vậy nhưng ai đó thích đổi tên, thích gọi với một cái tên khác cũng được. hoặc lại có một nhà khác (object khác) được khởi tạo từ Class Nhà nhưng với tên khác: cuocdoivandepsao.
  • Class Nhà có một phương thức là Protected vaoThamNha(): tức là chỉ có hàng xóm, người thân thì vào được (chính class này hoặc class kế thừa). Một thanh niên giời ơi đất hỡi đòi vào nhà là lỗi ngay.
  • Class Nhà có một phương thức là Private moKetSatLayTienDiChoi(): thôi xong, method này thì chỉ mỗi ông chủ nhà mở được thôi (chính tại class này), chứ không ai mém động vào nó được.
Series Navigation<< Lập trình hướng đối tượng là gì? OOP là gì?

Leave a comment

Leave a Reply