【发布时间】:2011-09-12 00:09:57
【问题描述】:
对于将类中的所有成员设为私有并设为公共方法来处理突变的想法,我有点不清楚。原始类型不是问题,它是我不清楚的封装对象。将对象成员设为私有的好处是能够隐藏不适用于正在构建的类的上下文的方法。缺点是您必须提供公共方法来将参数传递给底层对象(更多方法,更多工作)。另一方面,如果你想让底层对象的所有方法和属性都暴露出来,你不能把对象公开吗? 以这种方式暴露物体有什么危险?
例如,我会发现将向量或数组列表中的所有内容都暴露出来很有用。我能想到的唯一缺点是公共成员可能会分配一个类型,它不是通过隐式转换(或其他影响的东西)。一个易变的名称会减少问题的可能性吗?
附带说明:我理解真正的封装意味着成员是私有的。
【问题讨论】:
-
参见得墨忒耳定律en.wikipedia.org/wiki/Law_of_Demeter,在 OOP 语言中,您应该尽量减少依赖关系。这取决于“类”是否真正具有功能,或者实际上是一种数据结构。如果它只是一个数据结构,那么 getter 'n' setter 似乎有点矫枉过正,特别是如果所有字段都可以是不可变的(最终)。
标签: oop class-design encapsulation