information-hiding - 隐藏信息如何帮助模块化?

标签 information-hiding modularization

信息隐藏如何帮助解耦构成系统的模块?

最佳答案

封装(信息隐藏)允许您只向外界公开绝对最小值。这意味着您可以在不影响客户的情况下将未公开的位更改为您心中的内容。

一个例子。假设您已经实现了一个将字符串保存在数组中的数据结构。如果您公开数组,您的数据结构的用户可以使用 str[7]获取位置 7 处的字符串。

现在,如果您决定将数据结构重新实现为平衡树以加快字符串搜索速度,会发生什么情况。为此,您可以将字符串移动到树中并将数组更改为不是字符串,而是指向树中位置的指针。

这会破坏你的客户,因为他们会期待字符串,而不是指针。每个客户端都必须更改以从数组中获取指针,然后在树中查找这些指针。

但是,如果您完全隐藏了实现并且只提供了一个功能:

String getStringAt (int n);

您只需更改数据结构和功能以保持兼容。

客户端不会中断,因为您的应用程序编程接口(interface) (API) 没有更改。

我对类遵循的最重要的规则之一是最大的连贯性,最小的耦合。换句话说,一个类应该拥有它所需要的一切(仅此而已),并且它应该与外界共享尽可能少的信息。

这意味着客户端所能做的就是调用 API。不公开非 API 方法或允许不受限制地访问公共(public)变量 - 一切都应该使用 setter 和 getter 完成。

关于information-hiding - 隐藏信息如何帮助模块化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641742/

相关文章:

java - 在 java 程序运行之间存储数据的最佳方式?

c# - 界面的目的是隐藏信息吗?

javascript - 关于 JavaScript 中的模块模式

java - 一个 OSGi 用例——我说的对不对?

java - OOD - 设置一次值,使其无法更改

delphi - Delphi中使用Frames进行GUI信息隐藏

angularjs - angular.js - 定义实用程序库的最佳实践

C++ 模块化框架(如 OSGi)?

javascript - javascript模块化和依赖注入(inject)之间的区别

c# - 为什么不是所有字段/属性/方法都是公开的?