面向对象软件开发代码结构(2)

使用封装降低信息的复杂度

封装是面向对象编程的核心思想之一。

封装的过程,是将大量的信息(过程、数据),凝缩成满足特定需求的接口的过程。
从数量上来说,好的封装必然是将大量的、与业务交互无关的实现细节隐藏起来,只暴露出少量的交互接口。如果封装后比没有封装情况下信息增加了,那这种情况可以考虑不做封装或轻量级封装,当然这需要结合以后是否需要扩展来考虑。

当然与封装相反的是,信息体的访问完全可以在不封装的条件下访问。这种方式存在的问题是,如果访问的代码存在于多个地方的话,就会产生重复。重复的代码是对修改不友好的。因为一旦需要修改访问代码,就需要改动多个地方,会产生大量的工作量。

另外,封装后的接口相对于原有的信息体而言,一般信息量是大幅度减少的,只需要几个函数和较少的参数和返回值即可访问。这对使用此信息体的开发人员来说,只需要掌握必要接口的使用方法即可,无需每次使用此功能时,都重新回顾此信息体的内部运作原理。

由上可以看出,封装的作用有:

  1. 隐藏实现细节
  2. 提高代码复用率
  3. 减少思考负担

封装形式

函数是最基本的封装形式。
面向对象编程中,类是新的一种封装形式。
库/模块是更高级别的封装形式。
大到系统软件、工具软件也是一种信息体的封装形式。

另一种理解方式

既然封装是一种由多到少的过程,可以将一次封装理解为建立树的过程。
实际项目中,一个软件致力于解决某一领域的某一类问题。在分析需求时,需要将需求逐层分解,大问题化成小问题,不相关的问题之间相互独立,这是一种和封装相反的过程。但是其分解后的结果可以为封装提供依据。

封装相关的问题

封装要侧重对需求不易改变的部分进行。如果封装的部分需求易变,那么以后免不了要做出修改,而且修改的内容可能很多,这就导致以前的封装工作白费。在分析需求的基础上,一种可行的方法是对需求易变的部分进行相对宽松的、轻量级的封装。

封装范围问题。封装的范围要尽量小,要对具有高度关联的信息进行封装,实现高内聚。

减少嵌套。嵌套会增加耦合性,并导致访问路径变长。


未完待续

posted @ 2022-05-22 11:22  撬动未来的支点  阅读(16)  评论(0编辑  收藏  举报