我学校的CS程序避免了任何有关面向对象编程的问题,所以我一直在自己做一些阅读来补充它-特别是Bertrand Meyer的面向对象软件构造。
Meyer反复指出,类应隐藏尽可能多的有关其实现的信息,这是有道理的。特别是,他反复指出,属性(即类的静态,非计算属性)和例程(与函数/过程调用相对应的类的属性)应该是无法区分的。
例如,如果一个类Person
具有属性age
,他断言,它应该是不可能告诉,从符号,是否Person.age
相当于国内喜欢的东西return current_year - self.birth_date
或干脆return self.age
,其中self.age
已被定义为一个常量属性。这对我来说很有意义。但是,他继续声称以下内容:
将设计类的标准客户端文档(称为类的简称),以免透露给定功能是属性还是函数(在可能的情况下)。
即,他声称即使是该类的文档也应避免指定“ getter”是否执行任何计算。
这,我不明白。难道文档不是将这种区别告知用户的重要场所吗?如果我要设计一个包含Person
对象的数据库,那么知道是否Person.age
是一个昂贵的调用就不重要了,那么我可以决定是否为其实现某种缓存?我是否误解了他的意思,还是他只是OOP设计哲学的一个极端例子?