Tôi có nên sử dụng công cụ sửa đổi truy cập mặc định hay không - Thực hành mã hóa?


8

Thông thường khi tạo các biến toàn cục mới, tôi không xác định công cụ sửa đổi truy cập của nó. Vì vậy, theo java, nó sẽ áp dụng sửa đổi truy cập mặc định thuộc tính. Khi tôi cần truy cập vào biến đó trong phạm vi mặc định, tôi thay đổi công cụ sửa đổi truy cập của nó, hãy để nguyên biến đó. Vì vậy, câu hỏi của tôi là " Tôi có làm đúng cách không? Có bình thường khi có các biến truy cập mặc định không? Hoặc tôi nên sử dụng riêng tư / công khai cho họ? Có phải đó là cách thực hành mã hóa tốt để không sử dụng công cụ sửa đổi truy cập? "

Câu trả lời:


13

2 điều ở đây:

  1. không sử dụng toàn cầu :)
  2. Đó là cách phổ biến / tốt nhất để giả sử tất cả các trường là riêng tư trừ khi có lý do quan trọng hơn để biến chúng thành bất kỳ thứ gì khác, trong trường hợp đó nên chọn quyền truy cập hạn chế nhất (thường được bảo vệ).

Tất nhiên luôn có ngoại lệ cho quy tắc, nhưng đó là những điều cơ bản để bắt đầu.


Bất kỳ lý do cụ thể cho điều đầu tiên? "Đừng sử dụng toàn cầu".
Harry Joy

12
Globals có thể được truy cập và sửa đổi từ bất cứ nơi nào trong toàn bộ cơ sở mã. Hơn một số ít trong số chúng là đủ để làm bùng nổ sự phức tạp tiềm năng của một chương trình vượt quá khả năng tinh thần của một người lành mạnh.
tdammers

Nếu họ hành động như statictrong .NET, họ cũng phá vỡ khả năng kiểm tra đơn vị; đơn vị chân thành sử dụng nó LUÔN LUÔN phụ thuộc vào họ và không có cách nào để giả mạo họ để cách ly đơn vị đang thử nghiệm.
StuperUser

1
và tất nhiên chúng nhanh chóng trở thành cơn ác mộng bảo trì. Phải thực hiện một thay đổi "nhỏ" một lần đối với một ứng dụng được đánh dấu bằng hàng trăm toàn cầu (một giá trị phải cho phép đầu vào dài hơn, đại loại như thế). Chúng tôi cuối cùng đã phải thay đổi không chỉ một hoặc hai mà là hàng trăm nguồn, mỗi nguồn ở hàng chục địa điểm.
jwenting

Xin lỗi vì chọn nit, nhưng ở điểm thứ hai, bạn đề nghị được bảo vệ là quyền truy cập hạn chế nhất. Truy cập hạn chế nhất là sửa đổi truy cập mặc định, không được bảo vệ!
oOTesterOo

5

Một vài nguyên tắc lập trình chung ở đây:

  • Đơn giản thì tốt hơn
  • Đừng nói rõ ràng

...nhưng cũng:

  • Rõ ràng là tốt hơn so với ngầm

Tôi không phải là chuyên gia Java, nhưng nguyên tắc chung là: Nếu điều gì xảy ra rõ ràng với người quen với ngôn ngữ mà không rõ ràng, hãy sử dụng hành vi ngầm. Tuy nhiên, nếu điều này có thể khiến ai đó đi sai đường, thì bằng mọi cách có thể rõ ràng.


2
Trong truy cập mặc định của Java là một loại truy cập riêng biệt, vì vậy nếu bạn thêm một công cụ sửa đổi truy cập, bạn không khôi phục các quyền truy cập, bạn thay đổi nó thành một quyền truy cập khác. Đó là lý do tại sao nếu bạn thực sự cần truy cập mặc định rõ ràng, cách duy nhất để làm cho nó rõ ràng là sử dụng một nhận xét.
Malcolm

-1

Java không có các thuộc tính tự động, do đó, tất cả (các) thành viên lớp nói chung nên riêng tư với các phương thức get / set để sử dụng công khai, nếu được yêu cầu.

Theo nguồn (Oracle java Docs) đây là cách tiếp cận được đề xuất.

"Sử dụng mức truy cập hạn chế nhất có ý nghĩa đối với một thành viên cụ thể. Sử dụng riêng tư trừ khi bạn có lý do chính đáng để không. Tránh các trường công cộng trừ các hằng số. Các trường công cộng có xu hướng liên kết bạn với một triển khai cụ thể và hạn chế tính linh hoạt của bạn trong việc thay đổi mã. "

http://doad.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html


1
Nhưng, điều gì sẽ xảy ra nếu bạn muốn chia sẻ quyền truy cập chỉ với một số thứ và không phải tất cả mọi thứ (như publicvậy)?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.