Công khai, riêng tư và bảo vệ trong lập trình hướng đối tượng là gì?
Câu trả lời:
Chúng là công cụ sửa đổi quyền truy cập và giúp chúng ta thực hiện Encapsulation (hoặc ẩn thông tin). Chúng cho trình biên dịch biết lớp nào khác nên có quyền truy cập vào trường hoặc phương thức đang được định nghĩa.
private
- Chỉ lớp hiện tại mới có quyền truy cập vào trường hoặc phương thức.
protected
- Chỉ lớp hiện tại và các lớp con (và đôi khi cả các lớp cùng gói) của lớp này mới có quyền truy cập vào trường hoặc phương thức.
public
- Bất kỳ lớp nào cũng có thể tham chiếu đến trường hoặc gọi phương thức.
Điều này giả định rằng các từ khóa này được sử dụng như một phần của khai báo trường hoặc phương thức trong định nghĩa lớp.
Chúng không thực sự là khái niệm mà là những từ khóa cụ thể có xu hướng xuất hiện (với ngữ nghĩa hơi khác nhau) trong các ngôn ngữ phổ biến như C ++ và Java.
Về cơ bản, chúng có nghĩa là cho phép một lớp hạn chế quyền truy cập vào các thành viên (trường hoặc chức năng). Ý tưởng là càng ít một loại được phép truy cập trong một loại khác, thì càng ít phụ thuộc càng có thể được tạo ra. Điều này cho phép thay đổi đối tượng được truy cập dễ dàng hơn mà không ảnh hưởng đến các đối tượng tham chiếu đến nó.
Nói rộng ra, public nghĩa là mọi người đều được phép truy cập, private có nghĩa là chỉ các thành viên của cùng một lớp mới được phép truy cập và được bảo vệ có nghĩa là các thành viên của các lớp con cũng được phép. Tuy nhiên, mỗi ngôn ngữ lại thêm những thứ riêng vào điều này. Ví dụ, C ++ cho phép bạn kế thừa không công khai. Trong Java, cũng có mức truy cập (gói) mặc định và có các quy tắc về các lớp bên trong, v.v.
Cả ba đều là công cụ sửa đổi quyền truy cập và từ khóa được sử dụng trong một lớp. Bất cứ thứ gì được khai báo public đều có thể được sử dụng bởi bất kỳ đối tượng nào trong lớp hoặc bên ngoài lớp, các biến trong private chỉ có thể được sử dụng bởi các đối tượng trong lớp và không thể thay đổi thông qua truy cập trực tiếp (vì nó có thể thay đổi thông qua các hàm như hàm friend) .Bất kỳ thứ gì được định nghĩa trong phần được bảo vệ đều có thể được sử dụng bởi lớp và lớp dẫn xuất của chúng.
Mục công khai là mục có thể truy cập được từ bất kỳ lớp nào khác. Bạn chỉ cần biết đối tượng đó là gì và có thể sử dụng toán tử dấu chấm để truy cập nó. Được bảo vệ có nghĩa là một lớp và các lớp con của nó có quyền truy cập vào biến, chứ không phải bất kỳ lớp nào khác, chúng cần sử dụng getter / setter để làm bất cứ điều gì với biến. Riêng tư có nghĩa là chỉ lớp đó có quyền truy cập trực tiếp vào biến, mọi thứ khác cần một phương thức / hàm để truy cập hoặc thay đổi dữ liệu đó. Hi vọng điêu nay co ich.
như trên, nhưng về mặt chất lượng:
private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation
bạn càng cung cấp ít quyền truy cập thì càng ít chi tiết triển khai lọt ra ngoài các đối tượng của bạn. Loại rò rỉ ít hơn có nghĩa là linh hoạt hơn (hay còn gọi là "khớp nối lỏng hơn") về mặt thay đổi cách một đối tượng được triển khai mà không phá vỡ các ứng dụng khách của đối tượng. đây là một điều thực sự cơ bản để hiểu.
Tóm lại, trong lập trình hướng đối tượng, mọi thứ đều được mô hình hóa thành các lớp và đối tượng. Các lớp chứa các thuộc tính và phương thức. Các từ khóa công khai, riêng tư và được bảo vệ được sử dụng để chỉ định quyền truy cập vào các thành viên này (thuộc tính và phương thức) của một lớp từ các lớp khác hoặc .dlls khác hoặc thậm chí các ứng dụng khác.