Rất nhiều người đã đề cập đến đóng gói các chi tiết cụ thể của việc thực hiện, mà với tôi là lý do lớn nhất để sử dụng getters và setters trong một lớp học. Với điều này, bạn cũng nhận được rất nhiều lợi ích khác, bao gồm khả năng ném ra và thay thế việc triển khai trên một ý thích mà không cần phải chạm vào từng đoạn mã sử dụng lớp của bạn. Trong một dự án nhỏ, đó không phải là một lợi ích lớn, nhưng nếu mã của bạn kết thúc như một thư viện được sử dụng tốt (nội bộ hoặc công khai), nó có thể là một lợi ích lớn.
Một ví dụ cụ thể: số phức trong toán học. Một số ngôn ngữ có chúng như là một tính năng ngôn ngữ hoặc khung, những người khác thì không. Tôi sẽ sử dụng một lớp có thể thay đổi như một ví dụ ở đây, nhưng nó có thể dễ dàng thay đổi.
Một số phức có thể được viết trên biểu mẫu a + bi
với các bộ phận thực và ảo, tự cho vay tốt với [gs]etRealPart
và [gs]etImaginaryPart
.
Tuy nhiên, trong một số trường hợp, lý do dễ dàng hơn về số phức trên dạng cực re^(iθ)
, cho [gs]etRadius
(r) và [gs]etAngle
(θ).
Bạn cũng có thể hiển thị các phương pháp như [gs]etComplexNumber(realPart, imaginaryPart)
và [gs]etComplexNumber(radius, angle)
. Tùy thuộc vào loại đối số có thể hoặc không cần tên khác nhau, nhưng sau đó người tiêu dùng của lớp có thể sử dụng hoặc là phù hợp với nhu cầu của nó.
Hai biểu mẫu có thể hoán đổi cho nhau; bạn có thể dễ dàng chuyển đổi từ cái này sang cái khác, vì vậy hình thức mà lớp sử dụng cho bộ nhớ trong là không liên quan đến người tiêu dùng của lớp đó. Tuy nhiên, người tiêu dùng có thể sử dụng một trong hai hình thức. Nếu bạn chọn dạng + bi cho biểu diễn nội bộ, và cho biết sử dụng trường thay vì getters và setters, bạn không chỉ ép buộc người tiêu dùng lớp sử dụng biểu mẫu đó, bạn cũng không thể dễ dàng thay đổi ý định và thay thế nội bộ biểu diễn với^(iθ) vì điều đó hóa ra sẽ dễ thực hiện hơn trong kịch bản cụ thể của bạn. Bạn đang mắc kẹt với các API công cộng mà bạn đã xác định, trong đó yêu cầu cụ thể là các phần thực và tưởng tượng được tiếp xúc bằng cách sử dụng tên trường cụ thể.
Nguồn
2012-05-02 08:37:41
xem http://stackoverflow.com/a/1568230/985143 –
trùng lặp chính xác @ZazGmy –
Sự thật là [gs] etters là một gánh nặng lớn và bạn thực sự nên cân nhắc chi phí so với lợi ích trong từng trường hợp. Có những ví dụ mà các lĩnh vực công cộng (đặc biệt là nếu bạn có thể làm cho họ cuối cùng!) Là đúng cách. –