Encapsulation
Tìm hiểu về tính đóng gói trong delphi
Tìm hiểu về tính đóng gói trong delphi
Encapsulation - tính đóng gói là một trong những tính chất của lập trình hướng đối tượng. Nó giúp che giấu, bảo vệ những thông tin cần thiết và ngăn chặn truy cập không được phép vào bên trong class.
OOP sử dụng các mức truy cập (access modifier) để phân quyền truy cập cho các thành phần (field, method, property) bên trong class. Mỗi access modifier có một chức năng cụ thể, điều này sẽ trình bày ở phần sau.
Khi sử dụng class, thường thì các trường sẽ được giữ bí mật, việc thao tác qua các trường cần thông qua property. Các trường thì bí mật, còn property sẽ được công khai. Vì thế, mọi truy cập tới class đều phải thông qua property. Nhờ setter và getter, thông tin vào ra class sẽ được quản lý rõ ràng.
Delphi cung cấp 4 mức truy cập (Access Modifier) cho các thành phần bên trong class:
Private (riêng tư): Không được truy cập bởi các đối tượng bên ngoài
Protected (được bảo vệ): Giống như private, nhưng có thể truy cập ngược từ lớp con (subclass)
Public (công cộng): Cho phép các đối tượng bên ngoài truy cập và sử dụng
Published (công khai): Giống như public và được hiển thị trong Object Inspector (thường sử dụng cho các property).
Khi khai báo lớp, chú ý đặt thứ tự các phần như trên để tránh lỗi.
Mặc định, với các field, method, property không khai báo access modifier (hoặc sử dụng từ khóa var) thì sẽ là private. Private phải được đặt ở trên cùng, trên các access modifier khác.
Dưới đây là ví dụ cho tính đóng gói của class thông qua một lớp TMan.
type
TMan = class
private
FQuyDen: Single;
protected
FLuong: Single;
public
FName: string;
published
FGioiTinh: boolean; // True name, False nữ
end;
Như trên, lớp TMan miêu tả một người đàn ông, với các trường được đặt tên bắt đầu bằng F. Thường thì các trường sẽ được đặt tên như vậy
FQuyDen (quỹ đen): Là private vì đó là bí mật, không cho ai biết
FLuong (lương): Bí mật nhưng có thể cho người trong nhà biết
FName (tên): Công khai nhưng người khác phải hỏi mới biết.
FGioiTinh (giới tính): Công khai và ai nhìn vào cũng biết, không cần hỏi.
Hi vọng, thông qua ví dụ trên các bạn có thể hiểu được phần nào. Nhưng đừng lo, trong những bài tiếp theo sẽ có nhiều code ví dụ, các bạn sẽ quen dần.
Strict (nghiêm ngặt) là từ khóa bổ sung cho hai access modifier: private và protected.
Khi đó, private trở thành strict private, protected trở thành strict protected.
Trong một unit có nhiều class, thì các class khác nhau có thể truy cập đến các phần private hoặc protected của lớp nào đó. Mặc dù được gắn private và protected thì các class trong cùng 1 unit có thể truy cập lẫn nhau. Điều này làm giảm khả năng bảo vệ, che giấu dữ liệu của class.
Để khắc phục điều đó, delphi cung cấp từ khóa strict. Khi sử dụng strict private hoặc strict protected, các class trong cùng unit không thể truy cập lẫn nhau, giúp nâng cao khả năng bảo mật thông tin.