Câu hỏi này về khi nào nên sử dụng riêng tư và khi nào sử dụng được bảo vệ trong các lớp học khiến tôi phải suy nghĩ. (Tôi cũng sẽ mở rộng câu hỏi này cho các lớp và phương thức cuối cùng, vì nó có liên quan. Tôi đang lập trình bằng Java, nhưng tôi nghĩ rằng điều này có liên quan đến mọi ngôn ngữ OOP)
Câu trả lời được chấp nhận sais:
Một nguyên tắc tốt là: làm cho mọi thứ riêng tư nhất có thể.
- Làm cho tất cả các lớp cuối cùng trừ khi bạn cần phân lớp chúng ngay lập tức.
- Làm cho tất cả các phương thức cuối cùng trừ khi bạn cần phân lớp và ghi đè chúng ngay lập tức.
- Làm cho tất cả các tham số phương thức là cuối cùng trừ khi bạn cần thay đổi chúng trong phần thân của phương thức, điều này hơi khó xử trong hầu hết các trường hợp.
Điều này khá đơn giản và rõ ràng, nhưng nếu tôi chủ yếu viết thư viện (Nguồn mở trên GitHub) thay vì các ứng dụng thì sao?
Tôi có thể đặt tên cho rất nhiều thư viện và tình huống, trong đó
- Một thư viện đã được mở rộng theo cách mà các nhà phát triển sẽ không bao giờ nghĩ tới
- Điều này phải được thực hiện với "ma thuật trình nạp lớp" và các bản hack khác vì những hạn chế về tầm nhìn
- Các thư viện đã được sử dụng theo cách mà họ không được xây dựng và cách thức chức năng cần thiết "bị hack" trong
- Thư viện không thể được sử dụng do một vấn đề nhỏ (lỗi, thiếu chức năng, hành vi "sai") không thể thay đổi do giảm tầm nhìn
- Một vấn đề không thể khắc phục được dẫn đến các cách giải quyết lớn, xấu xí và lỗi, trong đó ghi đè một chức năng đơn giản (đó là riêng tư hoặc cuối cùng) có thể đã giúp
Và tôi thực sự bắt đầu đặt tên cho đến khi câu hỏi quá dài và tôi quyết định loại bỏ chúng.
Tôi thích ý tưởng không có nhiều mã hơn mức cần thiết, khả năng hiển thị nhiều hơn mức cần thiết, trừu tượng hơn mức cần thiết. Và điều này có thể hoạt động khi viết một ứng dụng cho người dùng cuối, trong đó mã chỉ được sử dụng bởi những người viết nó. Nhưng làm thế nào để giữ vững nếu mã này được sử dụng bởi các nhà phát triển khác, nơi mà nhà phát triển ban đầu nghĩ về mọi trường hợp sử dụng có thể xảy ra trước và các thay đổi / tái cấu trúc khó thực hiện?
Vì các thư viện nguồn mở lớn không phải là một điều mới, cách xử lý khả năng hiển thị phổ biến nhất trong các dự án như vậy với các ngôn ngữ hướng đối tượng là gì?