详细设计中的模块化与信息隐藏
13-详细设计中的模块化与信息隐藏
模块化和信息隐藏
是软件设计的核心思想之一。
模块化:将系统分解为不同的模块,每个模块承担一定的职责,目标为高内聚,低耦合
信息隐藏:隐藏模块具体的实现细节和变更,抽象出模块的接口
模块化的本质是分解,信息隐藏的本质是抽象。
结构化方法和面向对象方法的区别:
结构化方法:更重视功能内聚
依赖功能分解组织函数/过程,数据的组织以方便函数/过程的组织为第一原则。
面向对象方法:更重视信息内聚。
是数据结构为中心的设计方法的发展。
以职责为组织类/对象的标准:数据和功能的结合。
模块(代码片段)的定义
在程序设计语言中表现为:1.函数 2.过程 3.模块
在面向对象方法中表现为:1.类 2.方法 3.模块
软件设计的质量标准:
可理解、易修改、易复用。
耦合(六种耦合):描述了两个模型之间关系的复杂程度。(从高到低)
①内容耦合:一个模块直接修改或者依赖于另一个模块的内容。(无法接受)
②公共耦合:模块之间共享全局的数据。(无法接受)
③重复耦合:模块之间有同样逻辑的重复代码。(无法接受)
④控制耦合:一个模块给另一个模块传递控制信息。
⑤印记耦合:共享一个数据结构,但是却只用了其中一部分。
⑥数据耦合:模块之间通过参数传递,只共享了对方需要的数据。
(内功充值技术)
内聚(七种内聚):描述了一个模块内部联系的紧密性。(从低到高)
①偶然内聚:模块执行多个完全不相关的操作。(无法接受)
②逻辑内聚:模块执行一系列相似但没有直接关联的操作,通过其他模块决定调用。(无法接受)
③时间内聚:模块执行一系列与时间有关的操作。
④过程内聚:模块执行一系列与步骤顺序有关的操作。
⑤通信内聚:模块执行一系列与步骤有关的操作,并把这些操作在相同的数据上进行。
⑥功能内聚:模块只执行一个单一目的的操作。
⑦信息内聚:模块进行许多操作,入口点独立,每个操作的代码独立,但使用相同的数据结构。
(欧罗试过童工信息)
信息隐藏:
1)封装类的职责,隐藏职责的实现
2)预计将会发生的变更,抽象它的接口,隐藏它的内部实现机制
基本思想:每个模块隐藏一个重要的设计决策,每个模块承担一定的职责,对外表现为一份契约,即隐藏实现,抽象出接口。“隐藏”就是希望把未来的变更限制在本地,隐藏独立变化的系统细节,分隔不一致变化的模块,只暴露出不容易变化的接口。
信息隐藏决策:职责的实现、实现的变更。
信息隐藏的目的:为了做到模块与模块之间尽可能的独立,以实现软件的可拓展性和可伸缩性。
模块说明:
将所有的模块及其设计决策文档化。
主要记录四个主题
从内部角度:
1.模块的主要秘密:模块所要实现的用户需要,对用户需求的职责分配。
2.模块的次要秘密:模块实现职责分配所涉及的关键实现细节。
从外部角度:
1.模块的角色::描述了独立的模块再整个系统中所承担的角色,所起的作用,以及与哪些模块有关系。
2.模块的对外接口:模块提供给别的模块的接口。