版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 5.1 5.1 软件设计概述软件设计概述 5.2 5.2 软件软件体系结构体系结构介绍介绍 5.3 5.3 结构化设计的基础模块化结构化设计的基础模块化 5.4 5.4 结构化的设计方法结构化的设计方法 5.5 5.5 数据的设计数据的设计 5.6 5.6 界面界面设计设计 5.7 5.7 软件详细软件详细( (过程过程) )设计设计 5.8 5.8 设计中的几个问题设计中的几个问题内内 容容第第5 5章章 软件设计软件设计25.3.1 5.3.1 模块特性模块特性5.3.2 5.3.2 模块的深度、宽度、扇入和扇出模块的深度、宽度、扇入和扇出5.3.3 5.3.3 模块的控制范围和判定的
2、作用范围模块的控制范围和判定的作用范围5.3 5.3 软件设计的基础软件设计的基础模块化模块化3结构化设计结构化设计(Structured Design, SD)(Structured Design, SD) q 70 70年代中期提出;年代中期提出;q 采用结构图采用结构图(Structure Chart, SC)(Structure Chart, SC)和程序流和程序流 程图程图(Flow Chart, FC)(Flow Chart, FC)作为描述工具。作为描述工具。结构化设计结构化设计(SD)需求模型需求模型DFD+DD设计模型设计模型SC+FCq 通过通过对模块的合理划分对模块的合理
3、划分,得到软件的体系,得到软件的体系 结构图,进而细化每个模块内部的流程。结构图,进而细化每个模块内部的流程。4模块模块: : 软件被划分成若干个独立命名软件被划分成若干个独立命名, ,可编址的部分。可编址的部分。 模块化模块化: : 程序分程序分解解成若干个模块,且成若干个模块,且: : 5.3 5.3 结构化结构化设计的基础设计的基础模块化模块化n 每一个模块完成一个相对独立的子功能每一个模块完成一个相对独立的子功能 n 每个模块定义了输入和输出的功能。每个模块定义了输入和输出的功能。n 若干个模块集成,构成一个整体,完成一个大功能。若干个模块集成,构成一个整体,完成一个大功能。 l模块化
4、设计降低了复杂性模块化设计降低了复杂性. .l有利于软件的可维护性有利于软件的可维护性. .l系统可并发开发,简化系统实现。系统可并发开发,简化系统实现。 模块化模块化设计的好处设计的好处: :5n 模块的模块的分解分解n 模块的模块的抽象抽象n 模块的模块的信息隐蔽信息隐蔽n 结构化的模块结构化的模块n 模块的模块的独立性独立性 内聚、内聚、 耦合。耦合。 5.3.1 5.3.1 模块特性模块特性6 1) 1) 模块的分解模块的分解n将问题分解为各个可独立解决的子问题将问题分解为各个可独立解决的子问题n目标目标( Goal ) :使模块之间的依赖关系显式化和使模块之间的依赖关系显式化和 最小
5、化最小化软件总成本软件总成本软软件件开开发发工工作作量量模块数量模块数量集成集成成本成本成本最小区域成本最小区域MC (P1+P2) C (P1) + C (P2)E (P1+P2) E (P1) + E (P2) C C 为问题的复杂度,为问题的复杂度, E E 为解题需要的工作量为解题需要的工作量 成本成本/模块模块图图 5-21 5-21 模块的分解成本模块的分解成本7强调一下强调一下: :nFew Interfaces: “Dont talk to many!”尽可能少的接口:尽可能少的接口:“不要对太多人讲话不要对太多人讲话”n Small Interfaces: “Dont tal
6、k a lot!”尽可能小的接口:尽可能小的接口:“不要讲太多不要讲太多”nExplicit Interfaces: “Talk loud and in public! Dont whisper!”显式接口:显式接口:“公开的大声讲话公开的大声讲话不要私下嘀咕不要私下嘀咕”n 容易将模块组容易将模块组 合成新的系统合成新的系统83) 3) 模块的模块的信息隐藏信息隐藏n将可能发生将可能发生变化变化的部分隐藏起来的部分隐藏起来2) 2) 模块的抽象模块的抽象4) 4) 结构化的模块结构化的模块 图图 5-22 非结构化与结构化的模块非结构化与结构化的模块 非结构化的模块非结构化的模块P0P=A+
7、BQ0Q=A-B ynyn结束结束输入输入A,B,P,Q开始开始结束结束P0P=A+BQ0Q=A-B开始开始ynyn结束结束输入输入A,B,P,Q 非结构化的模块非结构化的模块规格不严格规格不严格功夫不到家功夫不到家P0P=A+BQ=A-BQ0Q=A-B结构化的模块结构化的模块ynn结束结束输入输入A,B,P,Q开始开始y95) 5) 模块独立性之模块独立性之内聚性内聚性n模块独立性:用来判断模块模块独立性:用来判断模块构造构造是否合理的标准是否合理的标准。n从两个方面来度量:从两个方面来度量:q模块内部的聚合度模块内部的聚合度(Cohesion)(Cohesion): 描述描述某某一个功能模
8、块一个功能模块内部内部的组成成分之间的组成成分之间相互相互关联关联的紧密程度。的紧密程度。q模块之间的耦合度模块之间的耦合度(Coupling)(Coupling): 多个多个模块之间模块之间相互关联的紧密程度。相互关联的紧密程度。n模块化设计的目标:模块化设计的目标:q高内聚、低耦合高内聚、低耦合(high cohesion and low (high cohesion and low coupling) coupling) 10内聚强度的划分内聚强度的划分1 偶然性内聚偶然性内聚Coincidental Cohesion3 时间性内聚时间性内聚Temporal Cohesion4 过程性内
9、聚过程性内聚Procedural Cohesion5 通讯性内聚通讯性内聚Communicational Cohesion6 顺序性内聚顺序性内聚Sequential Cohesion7 功能性内聚功能性内聚Functional Cohesion弱弱强强低内聚低内聚中内聚中内聚高内聚高内聚2 逻辑性内聚逻辑性内聚Logical Cohesion 模块的模块的内聚性内聚性11(1) (1) 偶然性内聚偶然性内聚n偶然性内聚偶然性内聚( Coincidental) : q构成模块的各组成部分构成模块的各组成部分无无任何关联。任何关联。q通常用于库函数管理,将多个通常用于库函数管理,将多个相互无关相
10、互无关但比较但比较 功能类似功能类似的模块放置在同一个模块内。的模块放置在同一个模块内。sin()cos()tg()ctg()math()缺点:缺点:产品的可维护性退化;模块不可复用,增加软件成本。产品的可维护性退化;模块不可复用,增加软件成本。解决解决:将模块分成更小的模块,每个小模块执行一个操作。:将模块分成更小的模块,每个小模块执行一个操作。12(2) (2) 逻辑性内聚逻辑性内聚n逻辑性逻辑性(Logical)(Logical)内聚:内聚:q一个模块中同时含有几一个模块中同时含有几 个操作,这些操作之间个操作,这些操作之间 既既无顺序关系无顺序关系,也无数也无数 据共享关系据共享关系。
11、问题:问题:接口难于理解;完成多个操作的代码互相纠缠在接口难于理解;完成多个操作的代码互相纠缠在 一起,导致严重的维护问题。一起,导致严重的维护问题。q这些操作仅仅是因为这些操作仅仅是因为控制流控制流,或者说,或者说“逻辑逻辑”的的 原因才联系到一起。它们都被包括在一个很大原因才联系到一起。它们都被包括在一个很大 的的ifif或者或者casecase语句中,彼此之间并没有任何其语句中,彼此之间并没有任何其 它逻辑上的联系。它逻辑上的联系。q它们的执行与否由外面传进来的它们的执行与否由外面传进来的控制标志控制标志所决定所决定输入一组数输入一组数求最大求最大/最小值最小值计算最大值计算最大值计算最
12、小值计算最小值输出结果输出结果求最大求最大求最值求最值图图 5-23 5-23 逻辑性内聚模块逻辑性内聚模块13(3) (3) 时间性内聚时间性内聚(Temporal cohesion)(Temporal cohesion)n时间性内聚:时间性内聚:q模块的各个成分必须在模块的各个成分必须在同一时间段同一时间段执行,但各执行,但各 个成分之间个成分之间无必然的联系无必然的联系。n 问题:问题:不同的功能混在一个模块中,有时共用不同的功能混在一个模块中,有时共用 部分编码,使局部功能的修改牵动全局。部分编码,使局部功能的修改牵动全局。Startup()读取读取配置文件配置文件初始化初始化临时文件
13、临时文件初始化初始化屏幕显示屏幕显示分配分配内存空间内存空间14(4 4)过程内聚)过程内聚 (Procedure)(Procedure)模块的各个成分处理模块的各个成分处理动作不同动作不同,但,但受同一控制受同一控制 流流支配支配(把几个依次调用过程放在一起把几个依次调用过程放在一起, 但一个过程但一个过程 的输出并不一定是下一个过程的输入的输出并不一定是下一个过程的输入).读入读入成绩单成绩单审查审查成绩单成绩单读入并审查读入并审查成绩单成绩单统计统计 成绩成绩 打印打印成绩成绩统计并打印统计并打印成绩单成绩单图图 5- 24 过程内聚模块过程内聚模块例:例:15(5) (5) 通讯性内聚
14、通讯性内聚n通讯性内聚通讯性内聚 (Communicational)q模块内各部分操作访问模块内各部分操作访问相同的相同的数据数据q除此之外,再无任何关系除此之外,再无任何关系q“无特定的次序,非单一功能无特定的次序,非单一功能”删除删除修改修改新建新建查询查询文件文件用户用户信息信息优点:优点:容易维护容易维护,易易修改修改缺点:缺点:难以复用难以复用查询姓名查询姓名修改电话号码修改电话号码图图 5- 25 通讯通讯内聚模块内聚模块16(6) (6) 顺序性内聚顺序性内聚n顺序性内聚顺序性内聚(Sequential Cohesion)(Sequential Cohesion) :q模块完成多
15、个功能,各功能模块完成多个功能,各功能 都在都在同一数据结构上操作同一数据结构上操作。顺序顺序内聚内聚顺序顺序内聚内聚打开文件打开文件读文件读文件计算计算输出结果输出结果关闭文件关闭文件图图 5-26 顺序内聚模块顺序内聚模块q各功能之间各功能之间按顺序按顺序执行,执行, 形成操作序列;形成操作序列;q上一个功能的上一个功能的输出是下输出是下 一个功能的输入一个功能的输入;17(7) (7) 功能性内聚功能性内聚(Functional Cohesion )(Functional Cohesion ) n功能性内聚:模块中各个部分都是为完成一功能性内聚:模块中各个部分都是为完成一 项项单一的功能
16、单一的功能而协同工作。而协同工作。q模块只执行模块只执行单一的单一的计算并返回结果计算并返回结果, ,易修改、易修改、 易替换、易维护。易替换、易维护。q模块的功能只是模块的功能只是生成特定生成特定的输出的输出,无副作用无副作用, , 对其他模块无影响对其他模块无影响, ,模块的可复用性高。模块的可复用性高。 q这类模块通常粒度最小,且不可分解。这类模块通常粒度最小,且不可分解。18计算数学函数的模块如计算数学函数的模块如根据输入的角度,根据输入的角度, 计算正弦计算正弦。 n如下是功能内聚模块如下是功能内聚模块: 矩阵矩阵结果结果功能内聚功能内聚顺顺 序序 内内 聚聚构造构造矩阵矩阵输出输出
17、求解求解 未知数未知数图图 5-27 模块模块 根据一系列方程求解未知数的模块根据一系列方程求解未知数的模块在一工厂中在一工厂中, ,从不同的监控设备获取数据从不同的监控设备获取数据, ,并计算并计算 某一过程的产量某一过程的产量( (占理论最大值的百分比占理论最大值的百分比) )的模块的模块。19n更新数据库更新数据库n创建新文件的模块创建新文件的模块. .不是功能内聚模块不是功能内聚模块: :n和用户交互的模块和用户交互的模块. . 因为对数据库或文件系统有副作用因为对数据库或文件系统有副作用. . 向用户显示提示信息是一种输出向用户显示提示信息是一种输出, ,但违但违 反了功能内聚模块的
18、惟一输出是执行反了功能内聚模块的惟一输出是执行结束时结束时 的返回结果的返回结果这一原则这一原则. . 20算多个地点的算多个地点的每日平均温度每日平均温度初始化求和初始化求和并打开文件并打开文件创建新的创建新的温度记录温度记录存储温存储温度记录度记录关闭文件并关闭文件并打印平均温度打印平均温度功能性内聚功能性内聚偶然内聚偶然内聚偶然内聚偶然内聚功能性内聚功能性内聚读取地点、读取地点、时间和温度时间和温度存储特定存储特定地点温度地点温度编辑地点、时间编辑地点、时间或温度字段或温度字段功能性内聚功能性内聚功能性内聚功能性内聚功能性内聚功能性内聚逻辑内聚逻辑内聚图图 5-28 例例21内聚强度的划
19、分内聚强度的划分该模块是否该模块是否只完只完成单一成单一的功能?的功能?7 功能性内聚功能性内聚6 顺序性内聚顺序性内聚5 通信性内聚通信性内聚4过程性内聚过程性内聚3时间性内聚时间性内聚2逻辑性内聚逻辑性内聚1偶然性内聚偶然性内聚模块内的模块内的活动依据活动依据什么发生什么发生联系?联系?次序是否次序是否重要?重要?次序次序是否是否 重要?重要?所有的活所有的活动是动是同一类的吗?同一类的吗?NONOYESNO数数据据YESNO控控制制流流都不是都不是YESYES图图 5-29 内聚强度的划分内聚强度的划分22小结小结内聚类型内聚类型说说 明明偶然性内聚偶然性内聚各组成部分在功能上各组成部分
20、在功能上互不相关互不相关逻辑性内聚逻辑性内聚各组成部分各组成部分逻辑功能相似逻辑功能相似时间性内聚时间性内聚各组成部分需要在各组成部分需要在同一时间内同一时间内执行执行过程性内聚过程性内聚各组成部分必须按照某一特定的各组成部分必须按照某一特定的控制次序执行控制次序执行,前一个的输出数据前一个的输出数据不一定不一定为后一个的输入数据为后一个的输入数据通信性内聚通信性内聚各组成部分处理各组成部分处理公共的数据公共的数据顺序性内聚顺序性内聚各组成部分各组成部分顺序执行顺序执行,前一个的输出数据为后一,前一个的输出数据为后一个的输入数据个的输入数据功能性内聚功能性内聚内部所有活动均完成内部所有活动均完
21、成单一功能单一功能23(8) (8) 层内聚层内聚 (layer cohesion)(layer cohesion)把向用户或高层提供相关服务的功能放在一起把向用户或高层提供相关服务的功能放在一起用户界面用户界面应用逻辑应用逻辑访问操访问操作系统作系统访问访问数据库数据库网络通信网络通信图图 5-30 层次内聚例层次内聚例应用程序的典型层次应用程序的典型层次处理应用协议处理应用协议处理连接处理连接处理包处理包传输和接收传输和接收通信系统的简化层次通信系统的简化层次24以下相关的服务是否可以放在同一层次中以下相关的服务是否可以放在同一层次中?计算服务计算服务n 消息或数据传输服务消息或数据传输服
22、务n 数据存储服务数据存储服务n 管理安全服务管理安全服务n 用户交互服务用户交互服务n 访问操作系统服务访问操作系统服务n 硬件交互服务硬件交互服务25层内聚优点层内聚优点替换高层模块对底层模块无影响替换高层模块对底层模块无影响n 低层服务不访问高层服务低层服务不访问高层服务,这样可以用等这样可以用等 价的层替换低层价的层替换低层.但必须复制该层所有的但必须复制该层所有的 API (Application Programming Interface) 使高层不受影响使高层不受影响.26 6) 6) 模块独立性之模块独立性之耦合度耦合度(Coupling)相互依赖相互依赖独立独立 高度耦合高度
23、耦合松散耦合松散耦合无耦合无耦合 l 耦合是模块耦合是模块间间相对独立性的度量。相对独立性的度量。图图 5-31 5-31 模块耦合度模块耦合度27耦合强度的划分耦合强度的划分1 1 非直接耦合非直接耦合No Direct CouplingNo Direct Coupling2 2 数据耦合数据耦合Data Coupling Data Coupling 3 3 特征耦合特征耦合Stamp CouplingStamp Coupling 4 4 控制耦合控制耦合Control CouplingControl Coupling 6 6 公共耦合公共耦合Common CouplingCommon Co
24、upling7 7 内容耦合内容耦合Content CouplingContent Coupling弱弱强强弱耦合弱耦合中耦合中耦合强耦合强耦合最强耦合最强耦合5 5 外部耦合外部耦合External CouplingExternal Coupling28(1 1)非直接耦合)非直接耦合( (NondirectionalNondirectional) ) 图图 5-32 非直接耦合模块非直接耦合模块n两个模块之间两个模块之间没有直接关系没有直接关系,它们之间的联系,它们之间的联系 完全是通过主模块的控制和调用来实现的。完全是通过主模块的控制和调用来实现的。计算软件学院计算软件学院学生的学习成绩
25、学生的学习成绩计算计算机学院计算计算机学院学生的学习成绩学生的学习成绩 29(2) (2) 数据耦合数据耦合(Data)(Data)q一个模块访问另一个模块时,彼此之间是通过一个模块访问另一个模块时,彼此之间是通过简单简单数据参数数据参数 ( (不是控制参数、公共数据结构或外部变不是控制参数、公共数据结构或外部变量量) ) 来交换输入、输出信息的。来交换输入、输出信息的。 借款数借款数 利率利率 时间时间借款金额借款金额已还款金额已还款金额计算客户信用卡帐单计算客户信用卡帐单 计算借计算借/贷金额贷金额 图图 5-33 数据耦合模块数据耦合模块尽可能尽可能减少方减少方法中参法中参数数目数数目易
26、维护易维护30(3) (3) 特征耦合特征耦合 (Stamp) (Stamp) (标记耦合标记耦合) )通话通话记录记录记录记录 结果结果图图 5-34 特征耦合模块特征耦合模块计算客户电话费计算客户电话费如如,C/C+,C/C+中有语句中有语句: : check altitude (pointer check altitude (pointerto position record )to position record )这是不是特征耦合这是不是特征耦合? ? 位置记录的指针指向位置位置记录的指针指向位置记录中的所有字段记录中的所有字段. .所以所以把指针作为参数传递把指针作为参数传递, ,
27、可可能会出现这种耦合能会出现这种耦合. .n 模块之间通过模块之间通过参数表参数表传递记录信息。传递记录信息。n 这个记录是这个记录是复杂的数据结构复杂的数据结构( (structstruct、classclass等等) ), 而不是简单类型的变量。而不是简单类型的变量。计算计算基础基础费费计算计算实际实际费费31public class Emailer public void sendEmail(Employee e, String text) sedEmail方法方法并不需要访问整个并不需要访问整个Employee对象对象,它它 实际上只需要访问实际上只需要访问email和和name.授予
28、全部的访问权限出授予全部的访问权限出 现了标记耦合。现了标记耦合。 维护人员修改维护人员修改Employee类时类时,必须检查必须检查sedEmail方方 法法,确定该方法是否需要修改。确定该方法是否需要修改。Employee类也不能重用类也不能重用 。 例例, , Emailer类发送电子信函类发送电子信函(sedEmail )方法方法32n 降低标记耦合降低标记耦合方法方法1,使用接口作为参数类型使用接口作为参数类型public interface Addressee /定义收件人接口定义收件人接口 public abstract String getName(); public abst
29、ract String getEmail();public class Employee implements Addressepublic class Emailer public void sendEmail(Addresse e,String text) sendEmail方法只允许访问它实际的方法只允许访问它实际的name和和email数据数据,降低了标记耦合。降低了标记耦合。33n如果不需要创建如果不需要创建新的新的Addressee接口接口,也可使用也可使用Employee 的超类的超类(如如Person)作为作为sendEmail方法的参数类型方法的参数类型,可可 降低标记耦合。
30、但使用接口更灵活。降低标记耦合。但使用接口更灵活。n方法方法2,传递简单变量传递简单变量public class Emailer public void sendEmail(String name, String email, String text) 用数据耦合代替了标记耦合用数据耦合代替了标记耦合.34(4 4)控制耦合)控制耦合 (Control)(Control)A平均平均/最高最高(控制信号)(控制信号) 成成绩绩 图图 5-35 模块模块 使用多态使用多态 降低这种降低这种耦合耦合n如果一个模块通过传送开关、标志、如果一个模块通过传送开关、标志、命令命令等等控制信控制信 息息,以控
31、制选择另一模块的功能,就是控制耦合。,以控制选择另一模块的功能,就是控制耦合。B计算平均计算平均或最高分数或最高分数Byn读入分数读入分数平均平均/最高最高?计算计算平均分数平均分数计算计算 最高分数最高分数输出结果输出结果逻辑性逻辑性内聚内聚35public routineX(String command) if (command.equals(“drawCircle”) drawCircle(); else drawRectangle(); 只要方法只要方法routineX的任何调用的任何调用者增加、删除等新的命令者增加、删除等新的命令,就必就必须修改该方法须修改该方法.n如果让如果让ro
32、utineX的调用者直的调用者直 接调用接调用drawCircle或或drawRectangle方法可降低耦合方法可降低耦合.n使用多态操作使用多态操作,有两个独立的类有两个独立的类Circle和和 Rectangle, routineX可由系统决定调用可由系统决定调用 哪个类哪个类draw方法方法.有时控制耦合是没法或不应该完全避免的。有时控制耦合是没法或不应该完全避免的。36(5) (5) 外部耦合外部耦合(External)(External)n一组模块访问同一一组模块访问同一全局简单变量全局简单变量而不是同一全而不是同一全 局数据结构,而且不是通过参数表传递该全局局数据结构,而且不是通
33、过参数表传递该全局 变量的信息,则称之为外部耦合。变量的信息,则称之为外部耦合。ANMLFEDCBOPl对系统外部元素对系统外部元素- -如操作系统、共享库或硬件的依赖如操作系统、共享库或硬件的依赖l外部偶合必不可少外部偶合必不可少, ,但这种模块数目应尽量少。但这种模块数目应尽量少。 图图 5-36 外外部部37外部外部耦合耦合while ( global variable = 0)while ( global variable = 0) if (argument XYZ 25) if (argument XYZ 25) moduleAmoduleA();(); else else modu
34、leBmoduleB();(); ABglobal variable 图图5 537 37 外部耦合实例外部耦合实例模块模块A,BA,B可存取和修改全局变量模块的值可存取和修改全局变量模块的值使用全局变量的模块相互耦合使用全局变量的模块相互耦合.C+.C+中的中的constconst 或或JavaJava中的中的公有静态变量公有静态变量public static finalpublic static final是全局变量是全局变量. . 为全局变量创建一个包含公有方法的模块为全局变量创建一个包含公有方法的模块, ,通过调用这通过调用这 些方法些方法来获取与设置数据来获取与设置数据. .这样数据
35、的内部表示就易于修改这样数据的内部表示就易于修改 了了, ,且可访止恶意的破坏且可访止恶意的破坏.set.set方法可以检查修改的合法性方法可以检查修改的合法性. . 38(6)(6)公共耦合公共耦合(Common)(Common)一组模块访问一组模块访问 同一个数据区同一个数据区。 公共数据区指:公共数据区指:n全局数据结构全局数据结构n共享通讯区共享通讯区n内存公共覆盖区内存公共覆盖区n公共的数据库等公共的数据库等AB 图图 5-39 5-39 紧密的公共耦合紧密的公共耦合问题问题: :n可读性、可修改性、可读性、可修改性、可维护、可复用性差可维护、可复用性差n数据暴露的多数据暴露的多,
36、,不安全不安全. .AB图图 5-38 5-38 松散的公共耦合松散的公共耦合公共数据区公共数据区数据库数据库39n作为公共耦合作为公共耦合, ,模块会暴露比需要更多的数据模块会暴露比需要更多的数据, , 不安全不安全. .如每个模块都可在更新状态下访问数如每个模块都可在更新状态下访问数 据库据库( (工资报表数据库工资报表数据库),),没受权没受权, ,就修改数据库就修改数据库说明说明:n解决方案解决方案 把所有描述信息放入数据库中把所有描述信息放入数据库中, ,一个模块一个模块初始化所有描述信息的值初始化所有描述信息的值, ,而其他模块严格地而其他模块严格地在只读状态下访问该数据库在只读状
37、态下访问该数据库. . n问题问题: : 若特定语言不能与数据库接口若特定语言不能与数据库接口, ,怎么办怎么办? ? 40 说明说明: n解决方案解决方案1:1:使用公共耦合使用公共耦合, ,一个模块初始化所有一个模块初始化所有 描述信息的值描述信息的值, ,而其他模块不能修改而其他模块不能修改 描述信息的值描述信息的值. .人工进行严格管理人工进行严格管理n解决方案解决方案2:2:使用使用“信息隐藏信息隐藏”避免公共耦避免公共耦合合. .41(7) (7) 内容耦合内容耦合(Content Coupling)(Content Coupling)n如果发生下列情形,两个模块之间就发生了内容耦
38、合如果发生下列情形,两个模块之间就发生了内容耦合q一个模块直接访问或修改另一个模块的内部数据一个模块直接访问或修改另一个模块的内部数据; ;ABCDA:goto C1 C:C1: BA 模块代模块代码重叠码重叠 Entry1 entry2 多入口模块多入口模块 A 进入另一进入另一模块内部模块内部 Bq一个模块不通过正常入口转到另一模块内部一个模块不通过正常入口转到另一模块内部; ;q一个模块有多个入口。一个模块有多个入口。q两个模块有一部分程序代码重迭两个模块有一部分程序代码重迭( (只可能出现在汇只可能出现在汇 编语言中编语言中););图图540 内容内容耦合实例耦合实例42public
39、class Line private Point start, end; public Point getStart() return start; public Point getEnd() return end; public class Arch private Line baseline; /假定假定 Line 的实例变量的实例变量 baseline是不可修改的是不可修改的 void slant (int newY) Point theEnd = baseline.getEnd(); theEnd.setLocation( theEnd.getX(), newY); nArchArch
40、类中的方法类中的方法slantslant 暗中修改了实例变量暗中修改了实例变量 baselinebaseline端点上的端点上的 PointPoint类型变量的类型变量的y y值。值。 (Line (Line类没有类没有setStartsetStart 和和setEndsetEnd方法方法, ,修改修改 操作是暗中进行的。操作是暗中进行的。n原因原因,slant,slant方法没有方法没有 访问访问LineLine对象对象, ,访问访问 关系更远的对象关系更远的对象 (Point(Point对象对象) )。43内容耦合内容耦合n内容耦合违反了内容耦合违反了“信息隐藏信息隐藏”的原则的原则。 为
41、了减少内耦容合为了减少内耦容合, ,应当封装所有的实例变量应当封装所有的实例变量, ,把它们声明为把它们声明为PrivatePrivate 型型, ,并为每个变量提供并为每个变量提供Get,Get,setset方法。方法。n在上例中在上例中, ,增加增加moveEndmoveEnd方法显示地移动方法显示地移动LineLine对象的对象的 端点。端点。slantslant方法应调用方法应调用moveEndmoveEnd方法。方法。 但程序员可绕过该方法但程序员可绕过该方法, ,修改修改LineLine对象。对象。n使使LineLine类是不可改变的类是不可改变的, ,对实例变量使用不可改变对实例
42、变量使用不可改变 的类。的类。44n通过模块分解或合并,力求降低耦合提高内聚。通过模块分解或合并,力求降低耦合提高内聚。如如C1 C1 ,C2C2有类似功能,也有不同功有类似功能,也有不同功能。可把功能类似的部分分离出来,能。可把功能类似的部分分离出来,增加一个公共下属模块增加一个公共下属模块 A C1 A C2 C C A B A C1A C2 如果余下的如果余下的C1 C1 ,C2C2比较简单,可分比较简单,可分别与其上级模块合并,以减少控制别与其上级模块合并,以减少控制的传递、全局数据的引用和接口的的传递、全局数据的引用和接口的复杂性。复杂性。图图541 降低耦合降低耦合实例实例45模块
43、规模要适中模块规模要适中n模块过大模块过大: :分解不充分,不易理解分解不充分,不易理解可以对功能进一可以对功能进一 步分解,生成一些下级模块或同层模块步分解,生成一些下级模块或同层模块。n模块太小模块太小: :开销过大、接口复杂开销过大、接口复杂把它合并到上把它合并到上 级模块中去而不必单独存在级模块中去而不必单独存在。n一个模块的规模最好能写在一页纸内,通常一个模块的规模最好能写在一页纸内,通常 不超过不超过6060行语句。行语句。l但是如果体积小的模块是功能内聚性模块,或但是如果体积小的模块是功能内聚性模块,或 者它为多个模块所共享,或者调用它的上级模者它为多个模块所共享,或者调用它的上
44、级模 块很复杂,则不要把它合并到其它模块中去。块很复杂,则不要把它合并到其它模块中去。 46耦合强度的划分耦合强度的划分内聚类型内聚类型说明说明非直接耦合非直接耦合两个模块之间两个模块之间没有没有直接关系直接关系数据耦合数据耦合通过通过简单数据参数简单数据参数交换信息交换信息特征耦合特征耦合通过通过复杂数据参数复杂数据参数交换信息交换信息控制耦合控制耦合传送开关、标志、名字等传送开关、标志、名字等控制信息控制信息外部耦合外部耦合访问访问同一全局简单变量同一全局简单变量公共耦合公共耦合访问访问同一个公共数据区同一个公共数据区内容耦合内容耦合一个模块可一个模块可直接访问直接访问另一模块另一模块耦合
45、度小结耦合度小结47耦合强度的等级耦合强度的等级两模块之间两模块之间是否是否没有任没有任 何信息传递?何信息传递?11 1 非直接耦合非直接耦合22 2 数据耦合数据耦合33 3 特征耦合特征耦合44 4 控制耦合控制耦合55 5 外部耦合外部耦合66 6 公共耦合公共耦合77 7 内容耦合内容耦合以何种方式以何种方式 传递信息?传递信息?传递的信传递的信息类型?息类型?共享共享数据数据YESNO简单简单类型类型参数参数表表传递的信传递的信息类型?息类型?直接直接读取读取数据数据结构结构标志标志量量简单简单类型类型数据数据结构结构图图542 耦合耦合强度等级强度等级48n耦合是影响软件复杂程度
46、和设计质量的重要耦合是影响软件复杂程度和设计质量的重要 因素因素,建立模块间耦合度尽可能建立模块间耦合度尽可能松散松散。耦合对模块化设计的影响耦合对模块化设计的影响q尽量使用尽量使用数据耦合数据耦合q少用控制耦合少用控制耦合q限制公共耦合的范围限制公共耦合的范围q坚决避免使用内容耦合坚决避免使用内容耦合(尽量尽量少少的交换数据的交换数据 尽量尽量简单简单的数据交换的数据交换)模块间的接口要简单模块间的接口要简单n 降低模块间耦合度。降低模块间耦合度。 49MDBCAEKLNGFHPRSJTIQ扇出扇出扇入扇入宽度宽度深深度度图图 5-43 模块的扇入扇出模块的扇入扇出15.3.2 5.3.2
47、模块的深度、宽度、扇入和扇出模块的深度、宽度、扇入和扇出5.3 结构化设计的基础结构化设计的基础模块化模块化5.3.1 模块特性模块特性50(1) 模块的扇入模块的扇入(fan-in)和扇出和扇出(fan-out)n扇入高扇入高表示上级模块多,表示上级模块多, 可增加模块的利用率。可增加模块的利用率。MM的扇入的扇入M M的扇出的扇出图图 5-43 模块的扇入扇出模块的扇入扇出2n扇出低扇出低表示下级模块少,表示下级模块少, 可以减少模块调用和控可以减少模块调用和控 制的复杂度。制的复杂度。51模块的扇入和扇出模块的扇入和扇出图图 5-43 模块的扇入扇出模块的扇入扇出3n原则:原则:q尽可能
48、尽可能减少高扇出减少高扇出结构,随着深度结构,随着深度增大扇入增大扇入;q模块的扇出数以模块的扇出数以3-43-4为好,最多不超过为好,最多不超过5-7;5-7;q适当增加中间层次适当增加中间层次的办法使扇出减少。的办法使扇出减少。52n设计良好的软件通常设计良好的软件通常 具有具有瓮型结构,两头瓮型结构,两头 小,中间大;小,中间大;n该类系统的结构在下该类系统的结构在下 部收拢,表明它部收拢,表明它在底在底 层模块中使用了较多层模块中使用了较多 高扇入的共享模块。高扇入的共享模块。n在不破坏独立性的前在不破坏独立性的前 提下,提下,扇入大的比较扇入大的比较 好。好。模块的扇入和扇出模块的扇
49、入和扇出图图 5-43 模块的扇入扇出模块的扇入扇出453 例:高扇出例:高扇出编编外外人人员员工工资资取取得得工工资资数数据据 计计时时制制工工资资额额薪薪金金制制工工资资额额编编外外人人员员税税款款编编外外人人员员扣扣款款常常规规扣扣款款税税收收扣扣款款计算实发工资计算实发工资图图 5-44 模块的模块的高高扇出扇出54 修改后修改后计算实发工资计算实发工资取得工取得工资数据资数据 计时工人实计时工人实发工资发工资计薪工人实计薪工人实发工资发工资编外人员实编外人员实发工资发工资编外编外人员人员工资工资计时计时制工制工资额资额薪金薪金制工制工资额资额编外编外人员人员税款税款编外编外人员人员扣
50、款扣款常规常规扣款扣款税收税收扣款扣款图图 5-45 合理的模块扇出合理的模块扇出55 (2) (2) 模块深度和宽度模块深度和宽度n适当控制适当控制 q深度深度 = = 分层的层数。分层的层数。深度过大表示分工过细深度过大表示分工过细。q宽度宽度 = = 同一层上模块数同一层上模块数 的最大值。的最大值。宽度过大表示系统宽度过大表示系统 复杂度大。复杂度大。图图 5-46 模块的模块的深度和宽度深度和宽度56深度深度: 程序结构的程序结构的 层次数。层次数。 适当适当扇出扇出:表示一个模块直表示一个模块直 接调用(或控制)的接调用(或控制)的下属模块的个数。下属模块的个数。 低扇出低扇出宽度
51、:宽度: 层次结构中同一层次结构中同一层模块的最大模块个层模块的最大模块个 数。数。 适当适当小结小结扇入:扇入:一个模块的直接一个模块的直接 上级模块的模块。上级模块的模块。 高扇入高扇入575.3.3 5.3.3 作用域作用域/ /控制域规则控制域规则n一个模块的一个模块的控制域控制域(Scope of Control)(Scope of Control), 等于模块本身加上其下级模块等于模块本身加上其下级模块, ,即可供它即可供它 调用的模块。调用的模块。MACBM的控制域为的控制域为 M,A,B,Cn一个模块的一个模块的作用域作用域(Scope of Effect)(Scope of
52、Effect),是受,是受 这个模块中的判定这个模块中的判定(Decision)(Decision)所影响的模块。所影响的模块。n规则:规则:q模块的作用范围保持在该模块的控制范围内;模块的作用范围保持在该模块的控制范围内;q判定的位置离受它控制的模块越近越好。判定的位置离受它控制的模块越近越好。58控制域控制域/ /作用域规则作用域规则n若若F中有判定,影响到中有判定,影响到Bn若若M中有判定,影响到中有判定,影响到B和和Fn若若A中有判定,影响到中有判定,影响到B和和Fn若若C中有判定,影响到中有判定,影响到D和和F不好,使模块出现控制耦合不好,使模块出现控制耦合 可用。但不好,判定在模块
53、层次中的位置太高可用。但不好,判定在模块层次中的位置太高较好:控制范围包含了作用范围,距离也尚可较好:控制范围包含了作用范围,距离也尚可 理想的设计理想的设计 M AG EB CD F 图图 5-4759作用域作用域/ /控制域规则控制域规则n如果在设计过程中,发现作用范围不在控制范围如果在设计过程中,发现作用范围不在控制范围 内,可采用如下办法把作用范围转移到控制范围内,可采用如下办法把作用范围转移到控制范围 之内:之内: q将受判定影响的模块下移到控制范围内。将受判定影响的模块下移到控制范围内。q将判定上移或将判定所在模块合并到父模块将判定上移或将判定所在模块合并到父模块 中,使判定处于较
54、高层次。中,使判定处于较高层次。q尽可能减少高扇出结构,随着深度增大扇入尽可能减少高扇出结构,随着深度增大扇入60小结小结(1) (1) 遵照遵照模块的特性模块的特性: :分解、抽象、信息隐蔽、分解、抽象、信息隐蔽、 模块的模块的独立独立, ,结构化结构化. .(2) (2) 模块的功能是完备的模块的功能是完备的, ,但要消除冗余但要消除冗余. .(4) (4) 模块应具有模块应具有高内聚、高内聚、低耦会低耦会; ;高扇入、高扇入、 低扇出低扇出; ;模块的深度模块的深度, ,宽度要适当宽度要适当. .(3) (3) 大小适中大小适中, ,降低模块接口的复杂性降低模块接口的复杂性. .(5)
55、(5) 模块的模块的判定判定的的作用范围作用范围应限制在模块的应限制在模块的 控制范围之内控制范围之内. .(6) (6) 避免模块的病态连接避免模块的病态连接( (内容耦合、公共内容耦合、公共 耦合、通信耦合耦合、通信耦合) )模块化的规则模块化的规则: :61 5.1 5.1 软件设计概述软件设计概述 5.2 5.2 软件软件体系结构体系结构介绍介绍 5.3 5.3 结构化设计的基础模块化结构化设计的基础模块化 5.4 5.4 结构化的设计方法结构化的设计方法 5.5 5.5 数据的设计数据的设计 5.6 5.6 界面界面设计设计 5.7 5.7 软件详细软件详细( (过程过程) )设计设
56、计 5.8 5.8 设计中的几个问题设计中的几个问题内内 容容第第5 5章章 软件设计软件设计625.4 5.4 结构化设计方法结构化设计方法 5.4.1 5.4.1 基于基于变换流与事务流变换流与事务流的的方法方法 5.4.2 HIPO 5.4.2 HIPO 图方法图方法 5.4.3 5.4.3 由由DFD DFD 顶层、中间层导出结顶层、中间层导出结 构图构图(Structure Chart, SC ) 63结构化设计思路结构化设计思路DFDSC begin a b X1 X2 case X3 F =1 c T =2 d =3 e f X4 g h i X5 X6 F F F F T T
57、T j T end 程序流程图程序流程图(FC)结构化语言结构化语言IF customer does more than $50,000 business THEN IF the customer wasnt in debt to us the last 3 months THEN discount = 15% ELSE (he was in debt to us) IF customer has been with us for more than 20 years THEN discount =10% ELSE (20 year or less) THEN discount = 5% EL
58、SE (customer does $50.000 OR Less) THEN discount = 0图图 5-48 5-48 结构化设计思路结构化设计思路q按照按照DFDDFD的不同类型,的不同类型, 将它们转换为相应的软件将它们转换为相应的软件 结构结构641) 1) 结构图的直观印象结构图的直观印象模块模块控制流控制流数据流数据流5.4.1 5.4.1 基于变换流与事务流基于变换流与事务流的设计方法的设计方法图图 5-49 结构图结构图 652) 2) 结构图结构图(SC)(SC)中描述的模块种类中描述的模块种类(1)(1) 传入模块:传入模块:q从下属模块取得数据,经过某些从下属模块
59、取得数据,经过某些 处理,再将其传送给上级模块。处理,再将其传送给上级模块。q它传送的数据流叫做它传送的数据流叫做逻辑输入数逻辑输入数 据流。据流。传入模块传入模块 传出模块传出模块 (2)(2) 传出模块:传出模块:q从上级模块获得数据,进行某些从上级模块获得数据,进行某些 处理,再将其传送给下属模块。处理,再将其传送给下属模块。q它传送的数据流叫做它传送的数据流叫做逻辑输出数逻辑输出数 据流。据流。66结构图结构图(SC)(SC)中的模块中的模块种种类类(3)(3) 变换模块:变换模块:q从上级模块取得数据,进行特定的处从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级理,转
60、换成其它形式,再传送回上级模块。模块。q它加工的数据流叫做它加工的数据流叫做变换数据流变换数据流。变换变换 协调协调/控制控制 (4)(4) 协调协调(控制控制)模块:模块:q对所有下属模块进行协调和管理。对所有下属模块进行协调和管理。67 (5)(5) 源模块:源模块:q不调用其他模块的传入模块,不调用其他模块的传入模块, 只适用于传入部分的只适用于传入部分的开始端开始端。源源漏漏结构图结构图(SC)(SC)中的模块中的模块种种类类(6)(6) 漏模块:漏模块:q不调用其它模块的传出模块,不调用其它模块的传出模块, 只适用于传出部分的只适用于传出部分的末端末端。683) SC3) SC图中的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防火教育观后感范文(10篇)
- 文明校园演讲稿13篇
- 教育警示教育心得体会模板5篇
- 小学生安全伴我同行演讲稿(30篇)
- 新员工试用期转正总结(31篇)
- 我与地坛读后感
- 合伙便利店协议书
- DB12-T 1069-2021 规模化油用牡丹栽培技术规程
- 内蒙古呼伦贝尔市(2024年-2025年小学五年级语文)统编版课后作业((上下)学期)试卷及答案
- 高中体育与健康教案集
- 第五单元写作《如何突出中心》 统编版语文七年级上册
- JTS-131-2012水运工程测量规范
- 2024年军队文职统一考试《专业科目》管理学试卷试题真题
- GB/T 43947-2024低速线控底盘通用技术要求
- 精神分裂症个案护理查房
- 智慧农业数字化产业园项目节能分析报告
- 设备维修保养流程优化与管控
- 丙纶纤维的纺丝工艺优化
- 会议纪要的写作概述
- 小学生建筑科普小知识
- 一例“重度子痫前期”患者的个案护理
评论
0/150
提交评论