封装与数据隐藏?

时间:2013-09-24 11:29:31

标签: java c++ oop encapsulation information-hiding

这可能是重复的问题,但我还没有找到答案。

Link 1

封装:

  

封装是将类中的字段设为私有的技术   并通过公共方法提供对田地的访问。如果是一个领域   声明私有,它不能被课外的任何人访问,   从而隐藏了类中的字段。因此,封装也称为数据隐藏

Link 2

封装:

  

"它[...]指的是围绕某些东西构建一个胶囊,在概念屏障的情况下。" - [Wirfs-Brock等,1990 ]

     

"作为一个过程,封装意味着将一个或多个物品封闭在容器内的行为。封装作为一个实体,是指包含(包含,包含)一个或多个项目的包或封装。"

     

"如果封装与信息隐藏相同,那么'然后,人们可能会提出这样的论点:“封装的所有内容也都是隐藏的。”#39;这显然不是真的。"

我应该选择哪一个?或者我误解了这个定义?

4 个答案:

答案 0 :(得分:3)

重点是它并不重要。任何人都可以用稍微不同的方式定义一个术语,通常各个作者都会将这些含义适应于他们使用这些术语的各种语境。

你不会从试图找出哪一个是“正确”哪一个是“错误”获得任何启示。脱离背景的行情特别缺乏信息。

重要的是要理解基本思想,而不要参考用于引用它们的词汇项。

答案 1 :(得分:2)

关于封装的定义是否应该包含数据隐藏存在分歧,因此这将是严格的意见回答。我相信后面的定义更正确,因为数据隐藏并不是OO编程所特有的。它是一个单独的功能,不排除封装,即封装函数/方法与一组变量的绑定。事实上,数据隐藏是早期模块化编程的标志,如C和Pascal等语言。

答案 2 :(得分:1)

第一个定义是以Java为中心的。第二个更通用。两者都是正确的。至于哪一个,这是一个主观问题。由于两者都是正确的,我建议你选择你喜欢的那个......

答案 3 :(得分:0)

封装不仅仅是数据隐藏。它将内部数据表示实现与公共接口分离。由于封装,只要您不破坏接口合同,您就可以在没有任何人知道的情况下更改内部实现。所以我要说封装=数据隐藏+实现隐藏。