您好,欢迎访问三七文档
概要设计的表示形式正文加工系统的层次图带编号的层次图(HIPO)与层次图(H)中每个方框相对应(按编号),都有一张IPO图描述该框代表的模块的处理过程,称为HIPO图。IPO图的一个例子软件的模块结构图:描述一个软件系统由哪些模块组成,以及模块之间的调用关系结构图的基本成分有:模块、调用和数据模块是指具有一定功能并可以用模块名调用的一组程序语句,如函数、子程序等,它们是组成程序的基本单元一个模块具有其外部特征和内部特征–外部特征包括:模块的接口(模块名、输入/输出参数、返回值等)和模块的功能–内部特征包括:模块的内部数据和完成其功能的程序代码在结构图中,模块用矩形框表示,每个模块都有一个应能适当反映该模块功能的名字调用(call):用从一个模块指向另一个模块的箭头来表示,其含义是前者调用了后者–为了方便,有时常用直线替代箭头,此时,表示位于上方的模块调用位于下方的模块数据(data):模块调用时需传递的参数可通过在调用箭头旁附加一个小箭头和数据名来表示,其中小箭头的方向是数据的传输方向SC图的模块调用简单调用简单调用的两种表示法B(a)X,YZACZB(b)1AC2入出X,YZZ—选择调用ABCD注意:图中必须画出数据流循环调用ABC注意:图中必须画出数据流结构图的几个概念深度:程序结构图中控制的层数,例如图中所示的结构图的深度是5宽度:程序结构图中同一层次上模块总数的最大值,例如图中所示的结构图的宽度为7扇出(fanout):该模块直接调用的模块数目。例如,例如图中模块M的扇出是4,模块A的是2,模块B的扇出是1扇入(fanin):能直接调用该模块的模块数目。例如图中模块G的扇入是1,模块I的扇入是2,模块R的扇入是4深度和宽度在一定程度上反映了程序的规模和复杂程度–相对而言,如果程序结构图的深度和宽度较大,则说明程序的规模和复杂程度都较大。–模块的扇入扇出会影响结构图的深度和宽度,例如减少模块的扇出,可能导致宽度变小而深度增加一个模块的扇出过大通常意味着该模块比较复杂,然而扇出太少,可能导致深度的增加–一般情况,一个模块的扇出以3~9为宜一个模块的扇入表示有多少模块可直接调用它,它反映了该模块的复用(reuse)程度,因此模块的扇入越大越好模块和模块化模块化:当系统的每项功能恰好由一个输入输出都明确定义的组件完成的时候,我们称这个系统模块化。模块——表示能够用计算机程序代码实现的,相对独立的单一数据处理功能,所以模块有时也叫功能模块。进一步明确模块是拥有明确定义的输入、输出和特性的程序实体。设计方法的选择应该允许不同的设计者使用他们喜欢的技巧,只要他们的文档能让其他设计者明白就可以了。设计方法的选择又是取决于设计者的偏好,而更多的时候取决于系统要求的结构或数据。软件设计中涉及的问题抽象(abstract)与细化(refinement)–抽象:分层次考虑和处理问题(数据和过程)–细化:从高到低的逐步分解过程信息隐藏–对其它模块隐藏模块内部的数据和过程抽象抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。–先注意问题的本质及描述,其次是实现过程或细节。–数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。–代码抽象:描述某类对象的共有的行为特征或具有的功能。–抽象的实现:通过类的声明。模块化设计的好处信息隐藏从不同角度了解系统将难以解决的问题独立出来;抽象层次通过逐层分析来了解问题允许不同的模块采用不同的设计方法模块化设计把大型软件按照规定的原则划分成一个个较小的、相对独立但又相互关联的模块重要指导思想:–分解–模块独立性分解(Decomposition)模块化是为了使一个复杂的大型程序能被人的智力所管理设函数c(x)定义问题x的复杂程度,函数E(X)确定解决问题x需要的工作量(时间)。对于两个问题P1和P2,如果)()(21PCPC)()(21PEPE显然模块化的依据人类解决一般问题时一个有趣的规律:C(P1+P2)C(P1)+C(P2)E(P1+P2)E(P1)+E(P2)结论:各个击破——把复杂的问题分解成容易解决的小问题,原来的问题也就容易解决了问题提出如果无限的分割软件,最后为了开发软件而需要的工作量也就小得可以忽略了。?模块数与开发工作量的关系模块数接口成本最小成本区M软件开发工作量总成本模块成本模块划分的基本原则概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准。但是到目前为止,没有统一的标准判断一个系统化分成几个模块是最优的。模块划分的四项基本原则1.模块独立性强–块内联系强–块间联系弱2.高内聚–模块内部各成分之间3.低耦合–一个模块与其它模块之间4.公共(共享)模块–多个模块公用模块独立性问什么模块的独立性很重要?–有效模块化的软件容易开发出来–独立的模块比较容易测试和维护人的独立性强如何?人没有独立性,什么都依赖别人如何?内聚内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。一个模块内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其他模块之间的耦合就会减低,而模块独立性就越强。内聚与耦合内聚和耦合是相互关联的。在程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。但这也不是绝对的。软件概要设计的目标是力求增加模块的内聚,尽量减少模块间的耦合,但增加内聚比减少耦合更重要,应当把更多的注意力集中到提高模块的内聚程度上来。内聚1234567弱强低内聚中内聚高内聚低内聚1.偶然性内聚–模块内各部分没有联系,或者即使有联系,这种联系也很松散。2.逻辑性内聚–这种模块把几种相关的功能组合在一起,每次调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。这种模块是单入口的多功能模块。类似的有错误处理模块。它接受出错信号,对不同类型的错误打印出不同的出错信息。低内聚3.时间性内聚–时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。中内聚4.过程性内聚–如果一个模块内的处理是相关的,而且必须以特定次序执行,则称这个模块为过程内聚模块。5.通讯性内聚–如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。高内聚6.顺序性内聚–如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)7.功能性内聚–一个模块中各个部分都是某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。七种内聚的优劣评分功能内聚10分顺序内聚9分通信内聚7分过程内聚5分时间内聚3分逻辑内聚1分偶然内聚0分高内聚低内聚逻辑内聚模块判断调用模块读一个记录写一个记录被调用模块常见内聚类型常见内聚类型耦合对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度、调用模块的方式以及哪些信息通过接口。在软件设计中应该追求尽可能松散耦合的系统耦合的七种类型(低——高)非直接耦合:如果两个模块之间没有直接关系,它们之间的联系完全是通过主要模块的控制和调用来实现的,这就是非直接耦合。数据耦合:如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。标记耦合:如果一组模块通过参数表传递记录信息,就是标记耦合。事实上,这组模块共享了这个记录,它是某一类数据结构的子结构,而不是简单变量。这要求这些模块都必须清楚该纪录的结构,并按结构要求对此记录进行操作。耦合的七种类型(续)控制耦合:如果一个模块通过传递开关、标志、名字等控制信息,明显的控制选择另一模块的功能,就是控制耦合。外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。弱耦合数据耦合非直接耦合模块2模块1模块4模块3特征耦合(参数表传递数据结构)公共耦合DCBANL公共耦合公共耦合会引起下列问题:1、所有公共耦合模块都于某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。2、无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。3、公共数据名的使用,明显降低了程序的可读性。内容耦合如果出现下列情况之一,两个模块间就发生了内容耦合:–一个模块访问另一个模块的内部数据–一个模块不通过正常入口而转到另一个模块的内部–两个模块有一部分程序代码重叠(只可能出现在汇编程序中)–一个模块有多个入口(这意味着一个模块有几种功能)内容耦合(a)进入另一模块内部(b)模块代码重叠(c)多入口模块ABABEnty1……enty2……内容耦合0分公共耦合1分外部耦合3分控制耦合5分特征耦合7分数据耦合9分非直接耦合10分高耦合低耦合七种耦合的优劣评分关于耦合的设计原则尽量使用数据(特征)耦合少用控制耦合限制公共环境耦合的范围完全不用内容耦合建立公共(共享)模块建立公共模块的目的是减少冗余,减少不必要的重复工作,划出某项功能成为一个能被几个模块共同利用的模块。也就模块结构图的形态是中层宽大,上下小的。例:球场,田径场…哪种设计方案更好呢?自顶向下和自底向上设计自顶向下–顶层开始–逐步分解由底向上–选择关键部分先设计–扩展到整个系统两种设计方法的比较3.如果在可行性上出现问题,可以较早发现3.需要进行详细可行性论证2.整体测试可能在模块接口间发现不一致等问题2.整体测试较易通过1.可能导致较大的重新设计1.易于修改和扩展由底向上设计自顶向下设计
本文标题:模块和模块化.
链接地址:https://www.777doc.com/doc-2304305 .html