Một trong những điều đầu tiên tôi làm khi tôi phân lớp một lớp là thay đổi một loạt các phương thức riêng tư để được bảo vệ
Một số lý do về private
so với protected
phương pháp :
private
phương pháp ngăn chặn tái sử dụng mã. Một lớp con không thể sử dụng mã trong phương thức riêng tư và có thể phải thực hiện lại - hoặc thực hiện lại (các) phương thức ban đầu phụ thuộc vào phương thức riêng tư & c.
Mặt khác, bất kỳ phương thức nào không private
thể được xem là API do lớp cung cấp cho "thế giới bên ngoài", theo nghĩa là các lớp con bên thứ ba cũng được coi là "thế giới bên ngoài", như một người khác đề xuất trong câu trả lời của anh ấy đã sẵn sàng.
Đó có phải là một điều xấu? - Tôi không nghĩ vậy.
Tất nhiên, API công khai (giả) khóa lập trình viên gốc và cản trở việc tái cấu trúc các giao diện đó. Nhưng nhìn theo một cách khác, tại sao một lập trình viên không nên thiết kế "chi tiết triển khai" của riêng mình theo cách sạch sẽ và ổn định như API công khai của mình? Anh ta có nên sử dụng private
để anh ta có thể cẩu thả trong việc cấu trúc mã "riêng tư" của mình không? Suy nghĩ có lẽ anh ta có thể làm sạch nó sau, bởi vì sẽ không có ai chú ý? - Không.
Lập trình viên cũng nên suy nghĩ một chút về mã "riêng tư" của mình, để cấu trúc nó theo cách cho phép hoặc thậm chí thúc đẩy việc tái sử dụng càng nhiều mã càng tốt ở nơi đầu tiên. Sau đó, những phần không riêng tư có thể không trở thành gánh nặng trong tương lai như một số nỗi sợ hãi.
Rất nhiều mã (khung) tôi thấy thông qua việc sử dụng không nhất quán private
: protected
, các phương thức không phải là cuối cùng mà hầu như không làm gì hơn là ủy thác cho một phương thức riêng tư thường được tìm thấy. protected
, các phương thức không phải là cuối cùng mà hợp đồng chỉ có thể được thực hiện thông qua truy cập trực tiếp vào các lĩnh vực tư nhân.
Các phương thức này không thể được ghi đè / tăng cường một cách hợp lý, mặc dù về mặt kỹ thuật không có gì để làm cho điều đó (trình biên dịch-) rõ ràng.
Muốn mở rộng và kế thừa? Đừng làm phương pháp của bạn private
.
Không muốn hành vi nhất định của lớp bạn bị thay đổi? Thực hiện các phương pháp của bạn final
.
Thực sự không thể có phương pháp của bạn được gọi bên ngoài một bối cảnh nhất định, được xác định rõ? Làm cho phương thức của bạn private
và / hoặc suy nghĩ về cách bạn có thể làm cho bối cảnh được xác định rõ có sẵn để sử dụng lại thông qua một protected
phương thức trình bao bọc khác .
Đó là lý do tại sao tôi ủng hộ việc sử dụng một private
cách tiết kiệm. Và để không nhầm lẫn private
với final
. - Nếu việc triển khai một phương thức là quan trọng đối với hợp đồng chung của lớp và do đó không được thay thế / ghi đè, hãy thực hiện nó final
!
Đối với các lĩnh vực, private
không thực sự xấu. Miễn là (các) trường có thể được "sử dụng" một cách hợp lý thông qua các phương thức thích hợp ( không phải getXX()
hoặc setXX()
!).