Программа CS моей школы избегает каких-либо упоминаний об объектно-ориентированном программировании, поэтому я немного читал сам, чтобы дополнить его - в частности, конструкцию объектно-ориентированного программного обеспечения Бертрана Мейера.
Мейер неоднократно подчеркивал, что классы должны скрывать как можно больше информации об их реализации, что имеет смысл. В частности, он неоднократно утверждает, что атрибуты (т. Е. Статические неисчисляемые свойства классов) и процедуры (свойства классов, соответствующие вызовам функций / процедур) должны быть неотличимы друг от друга.
Например, если у класса Person
есть атрибут age
, он утверждает, что из обозначений должно быть невозможно определить, Person.age
соответствует ли он внутренне чему-либо подобному return current_year - self.birth_date
или просто return self.age
, где self.age
он был определен как постоянный атрибут. Это имеет смысл для меня. Тем не менее, он продолжает утверждать следующее:
Будет разработана стандартная клиентская документация для класса, известная как краткая форма класса, чтобы не раскрывать, является ли данная функция атрибутом или функцией (в тех случаях, когда она может быть любой).
то есть он утверждает, что даже в документации для класса следует избегать указания, выполняет ли «получатель» какие-либо вычисления.
Этого я не понимаю. Разве документация не является единственным местом, где было бы важно информировать пользователей об этом различии? Если бы я проектировал базу данных, заполненную Person
объектами, не было бы важно знать, Person.age
является ли это дорогостоящим вызовом, или нет , поэтому я мог бы решить, следует ли реализовывать какой-либо кеш для него? Я неправильно понял, что он говорит, или он просто особенно яркий пример философии дизайна ООП?