Chương trình CS của trường tôi tránh mọi đề cập đến lập trình hướng đối tượng, vì vậy tôi đã tự mình đọc một số thứ để bổ sung cho nó - cụ thể là Xây dựng phần mềm hướng đối tượng của Bertrand Meyer.
Meyer đưa ra quan điểm nhiều lần rằng các lớp nên che giấu càng nhiều thông tin về việc thực hiện chúng càng tốt, điều này có ý nghĩa. Cụ thể, ông lập luận nhiều lần rằng các thuộc tính (nghĩa là các thuộc tính tĩnh, không tính toán của các lớp) và các thường trình (các thuộc tính của các lớp tương ứng với các lệnh gọi hàm / thủ tục) không thể phân biệt được với nhau.
Ví dụ, nếu một lớp Person
có thuộc tính age
, anh ta khẳng định rằng không thể biết, từ ký hiệu, cho dù Person.age
tương ứng bên trong với một cái gì đó giống như return current_year - self.birth_date
hoặc đơn giản return self.age
, nơi self.age
đã được định nghĩa là một thuộc tính không đổi. Điều này có ý nghĩa với tôi. Tuy nhiên, ông tiếp tục yêu cầu như sau:
Tài liệu khách hàng tiêu chuẩn cho một lớp, được gọi là dạng ngắn của lớp, sẽ được phát minh để không tiết lộ liệu một tính năng nhất định là thuộc tính hay hàm (trong trường hợp có thể là một trong hai).
tức là, ông tuyên bố rằng ngay cả tài liệu cho lớp cũng nên tránh chỉ định liệu "getter" có thực hiện bất kỳ tính toán nào hay không.
Cái này, tôi không làm theo. Không phải tài liệu là nơi quan trọng để thông báo cho người dùng về sự khác biệt này sao? Nếu tôi thiết kế một cơ sở dữ liệu chứa đầy Person
các đối tượng, điều quan trọng là phải biết liệu đó có phải Person.age
là một cuộc gọi đắt tiền hay không , vì vậy tôi có thể quyết định có thực hiện một số loại bộ đệm cho nó không? Tôi đã hiểu sai những gì anh ấy nói, hay anh ấy chỉ là một ví dụ đặc biệt cực đoan về triết lý thiết kế OOP?