京东购物中心,网络优化大师下载,网站建设 应酷,深圳全网营销系统一.模块化与信息隐藏思想
1.设计质量
好的设计要着重满足以下3方面#xff1a;可管理性、灵活性、可理解性好的设计需要侧重于间接性和可观察性——简洁性使得系统模块易于管理#xff08;理解和分解#xff09;、开发#xff08;修改与调试#xff09;和复用。实践者都…
一.模块化与信息隐藏思想
1.设计质量
好的设计要着重满足以下3方面可管理性、灵活性、可理解性好的设计需要侧重于间接性和可观察性——简洁性使得系统模块易于管理理解和分解、开发修改与调试和复用。实践者都同意可理解、易修改和易复用是软件设计中比较常见和重要的质量标准~
软件的变更是不可避免的复用则是人们在实践中提高软件生产效率最好的方式之一因此我们在设计过程中不得不考虑以上提到的软件质量特性以使我们的软件成为好的软件~
2.动机
模块化和信息隐藏就是为了实现上述重要的质量标准而提出的设计方法因为他们所针对的是最为重要的软件设计标准被视为软件设计的核心思想之一。
在分解独立模块的过程中方法是衡量模块的内聚性和耦合性希望分解建立高内聚、低耦合的模块~
3.发展
总的来说模块化和信息隐藏的思想是顺着下面的路线前进的
从意识到要分解模块开始之后人们慢慢意识到要分解出高内聚和低耦合的模块使得结构化方法慢慢盛行起来后来意识到从数据的角度来分解实现数据的封装抽象数据类型提出之后人们越来越意识到信息隐藏思路的重要性再加上继承、多态等思想完善了类和对象的概念逐步走向了面向对象方法的世界 二.模块化
1.分解与模块化
分解将系统分为多个小模块降低复杂度
模块一个词汇上邻接的程序语言序列由边界元素限制范围有一个聚合标识符通俗的说就是一个可通过名称调用的代码片段
在结构化方法中代码片段式程序设计语言中的函数、过程和模块而在面向对象方法中代码片段则是面向对象程序设计语言中的类、方法和模块——无论具体存在如何模块化的原则是通用的——尤其是最重要的高内聚低耦合原则模块内部又最大的关联模块之间有最小的关联~ 2.结构化设计中的耦合
模块之间的联系越多联系的复杂程度越高模块之间的关系就约为复杂。
耦合描述两个模块关系之间的复杂程度——模块耦合性越高模块的划分越差越不利于软件的变更和复用~ 内聚耦合最高级别的耦合耦合性最强公共耦合较弱于前者但耦合性仍然很强重复耦合非常隐蔽的耦合往往不容易发现却危害甚大——同样的逻辑代码如果存在在变更时就要同时修改多处控制耦合一个模块明确控制着另一个模块的逻辑——难点是两个模块都是非独立的他们都需要知道另一个的内部结构和逻辑印记耦合如果把数据结构作为参数进行传输被调用的模块只在该数据结构的个别组件上进行操作~关键点在于共享的是数据结构数据耦合模块之间通过参数传递只共享对方需要的数据
前3种是必须消除的数据耦合是最理想的另外两个是可以接受的
3.结构化设计中的内聚
内聚表达的是一个模块内部的联系的紧密性。
内聚性越高越好越低越不容易实现变更和复用 偶然内聚是指模块中执行的操作毫无关系只是恰好堆砌在这个模块内。比如修车、烤蛋糕、遛狗、看电影放在一个模块内没有任何联系。逻辑内聚指的是模块执行一系列逻辑上相似但没有直接关联的操作。比如乘坐汽车、乘坐火车、乘坐轮船和乘坐飞机它们都是交通方式这个系列的操作。时间类聚也是模块中执行一系列操作但是这些操作在同一时间段内发生。比如我们睡觉前要把奶瓶放到门外、让猫出去溜达、关闭电视机和刷牙。这些都是在同一个时间段内完成它们之间有时间相关性。过程内聚是模块执行的多个操作是解决同一个问题的不同步骤。比如保养车的过程依次为洗车、消除凹痕、打磨和上蜡。这些子过程之间是有顺序关系的。通信内聚则是模块内的操作都是针对同一数据进行的。比如查询书名、查询价格、查询出版社和查询作者。功能内聚只执行一个单一目的的操作。比如计算平方根、计算最短路径或者压缩数据库。信息内聚是模块内有一系列操作每个操作都有各自的入口点和出口点每个操作的代码相对独立而且所有操作都是在相同的数据结构上完成但是却形成一个抽象的整体。信息内聚的模块主要用来实现抽象的数据类型。
在上述各种内聚类型中功能内聚和信息内聚是最好的两种而且这两者的出发点不同一个完全以功能(行为)为依据进行模块分解一个以数据与功能间的相互支撑为依据进行模块分解不可相互比较。一般而言函数与过程应该是功能内的(信息内不适用于函数与过程)模块应该是信息内聚或功能内聚的面向对象方法中的类应该是信息内聚与功能内聚兼顾的。
偶然内聚与逻辑内聚是不能接受的如果软件中出现这两类内聚一定要进行优化。
通信内聚、过程内聚、时间内聚这3种类型的内聚也是各自具有不同的出发点(一个是相同的数据;一个是相同的问题;一个是相同的时间)无法相互比较。这3种类型的内聚都是可以接受而且不可避免的。
三.信息隐藏
1.抽象信息与隐藏
抽象的本质就是总结提炼本质特征消除非本质的细节从而使得人们可以聚焦在本质上降低认知的复杂性~信息隐藏本质上是利用了抽象的方法抽象出每个类的关键细节也就是模块的职责——什么是公开给其他人的什么事隐藏在自己模块中的换句话说抽象出来的就是接口隐藏的就是实现他们共同体现了模块的职责——体现了抽象可以让面向对象方法拥有更好的效率和更多的灵活性~核心设计思路每个模块都隐藏一个重要的设计决策——对外表现为一份契约并在这份契约之下隐藏着只有这个模块知道的设计决策或者秘密决策实现的细节只有模块自己知道
2.信息与隐藏
模块的秘密
根据需求分配的职责内部实现机制
职责就是用一定的方式把模块的信息、秘密等隐藏起来~隐藏独立变化的系统细节分隔不一致变化的模块只暴露出不容易变化的接口
3.模块说明
即用文档化的方式总结模块的设计决策内容如下
主要秘密实现的用户需求次要秘密所设计的关键实现细节角色角色、作用、关系对外接口提供给别的模块