1、第七讲第七讲 概要设计概要设计 了解软件设计工程及其研究内容了解软件设计工程及其研究内容 理解概要设计的主要内容理解概要设计的主要内容 理解概要设计的过程理解概要设计的过程 掌握概要设计主要原则掌握概要设计主要原则 理解体系结构设计理解体系结构设计 掌握模块划分特征掌握模块划分特征 掌握层次图掌握层次图软件生命周期软件生命周期需求分析需求分析问题定义问题定义可性行研究可性行研究计划计划时期时期概要设计概要设计详细设计详细设计编编 码码 测测 试试开发开发时期时期运行与维护运行与维护运运 行行时时 期期设计人员把分析的结果设计人员把分析的结果设计图纸设计图纸 程序员拿着设计图纸编写代码程序员拿着
2、设计图纸编写代码需求规格说明书概要设计概要设计 模块模块 1 1 模块模块 2 2 模块模块 3 3 模块模块4 4 模块模块 5 5 模块模块 6 6 设计图纸设计图纸-软件结构图软件结构图模块模块4设计设计详细设计详细设计需求分析成果软件设计工程软件设计工程v设计工程就是把需求分析过程中确定下来的用设计工程就是把需求分析过程中确定下来的用户需求定义书户需求定义书(What=(What=做什么做什么) )变为能够进行实变为能够进行实际操作的设计说明书(际操作的设计说明书(How=How=怎样做)的工程。怎样做)的工程。v设计工程是一个将系统的需求规格转换成软件设计工程是一个将系统的需求规格转
3、换成软件系统的说明过程。系统的说明过程。v从多个可能的思路中找到最佳的解决方案。其从多个可能的思路中找到最佳的解决方案。其任务包括构建系统框架,设计系统功能,描述任务包括构建系统框架,设计系统功能,描述系统流程,建立系统的数据模型、接口模型及系统流程,建立系统的数据模型、接口模型及界面模型,形成系统的逻辑结构,告诉程序员界面模型,形成系统的逻辑结构,告诉程序员软件系统应该软件系统应该“怎样做怎样做”。n从工程管理角度来看,软件设计分两步完成:从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计和详细设计。n概要设计概要设计将软件需求将软件需求转化为软件体系结构转化为软件体系结构
4、确定系统级接口确定系统级接口全局数据结构或数据库模式。全局数据结构或数据库模式。n详细设计详细设计确立每个模块的实现算法和局部数据结构确立每个模块的实现算法和局部数据结构用适当方法表示算法和数据结构的细节用适当方法表示算法和数据结构的细节v软件设计是后续开发步骤及软件维护工作的基软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系础。如果没有设计,只能建立一个不稳定的系统结构。统结构。设计设计编码编码测试测试维护维护测试测试编码编码维护维护有软件设计有软件设计 没有软件设计没有软件设计Windows NTWindows NT的一位系统设计师拥有的一位系统设计师拥有8
5、 8辆法拉利跑车辆法拉利跑车,让,让MicrosoftMicrosoft公司的一些程序员十分眼红。但你公司的一些程序员十分眼红。但你只能羡慕而不能愤恨,因为并不是每个程序员都有只能羡慕而不能愤恨,因为并不是每个程序员都有本事成为复杂软件系统的设计师。系统设计要比纯本事成为复杂软件系统的设计师。系统设计要比纯粹的编程困难得多。即便你清楚客户的需求,却未粹的编程困难得多。即便你清楚客户的需求,却未必知道应该设计什么样的软件系统必知道应该设计什么样的软件系统既能挣最多既能挣最多的钱又能让客户满意的钱又能让客户满意研究内容研究内容v主要内容:体系结构设计、模块设计、数据结主要内容:体系结构设计、模块设
6、计、数据结构与算法设计、用户界面设计构与算法设计、用户界面设计v 体系结构体系结构就如同人的骨架。如果某个家伙的骨架是猴就如同人的骨架。如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,这家伙始终都是猴子子,那么无论怎样喂养和美容,这家伙始终都是猴子,不会成为人。,不会成为人。v 模块模块就如同人的器官,具有特定的功能。人体中最出就如同人的器官,具有特定的功能。人体中最出色的模块设计之一是手,手只有几种动作,却能做无色的模块设计之一是手,手只有几种动作,却能做无限多的事情。限多的事情。研究内容研究内容v 数据结构与算法数据结构与算法就如同人的血脉和神经,它让器官具有生就如同人的血脉和神经,它让
7、器官具有生命并能发挥功能。数据结构与算法分布在体系结构和模块命并能发挥功能。数据结构与算法分布在体系结构和模块中,它将协调系统的各个功能。中,它将协调系统的各个功能。人的耳朵和嘴巴虽然是相对独立的器官,但如果耳朵失聪了,嘴巴人的耳朵和嘴巴虽然是相对独立的器官,但如果耳朵失聪了,嘴巴就只能发出就只能发出“啊啊”“”“呜呜”的声音,等于丧失了说话的功能(所以聋的声音,等于丧失了说话的功能(所以聋子天生就是哑巴),可人们却又能用手势代替说话。子天生就是哑巴),可人们却又能用手势代替说话。v 用户界面用户界面就如同人的外表,最容易让人一见钟情或一见恶就如同人的外表,最容易让人一见钟情或一见恶心。象人类
8、追求心灵美和外表美那样,软件系统也追求(心。象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。内在的)功能强大和(外表的)界面友好。研究内容研究内容v 在进行系统设计时,我们要深情地关注在进行系统设计时,我们要深情地关注软件的质量因软件的质量因素素,如正确性与精确性、性能与效率、易用性、可理,如正确性与精确性、性能与效率、易用性、可理解性与简法性、可复用性与可扩充性等等。解性与简法性、可复用性与可扩充性等等。v 即使把系统设计做好了,也并不意味着就能产生好的即使把系统设计做好了,也并不意味着就能产生好的软件系统。在程序设计、测试、维护等环节还要做大软件系统。在
9、程序设计、测试、维护等环节还要做大量的工作,无论哪个环节出了差错,都会把好事搞砸量的工作,无论哪个环节出了差错,都会把好事搞砸了。了。 据说上帝把所有的女士都设计成天使,可是天使们在下凡时据说上帝把所有的女士都设计成天使,可是天使们在下凡时有些双脚先着地,有些脸先着地。上帝的这一疏忽让很多女有些双脚先着地,有些脸先着地。上帝的这一疏忽让很多女孩伤透了心。孩伤透了心。v 我们在开发软件时,一定要吸取这个教训。我们在开发软件时,一定要吸取这个教训。概要设计概要设计v概要设计的主要任务是把需求分析得到的模型概要设计的主要任务是把需求分析得到的模型转换为转换为软件结构和数据结构软件结构和数据结构。v设
10、计软件结构设计软件结构的具体任务是:将一个复杂系统的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。调用关系、确定模块间的接口及人机界面等。v数据结构设计数据结构设计包括数据特征的描述、确定数据包括数据特征的描述、确定数据的结构特性、以及数据库的设计。的结构特性、以及数据库的设计。v概要设计建立的是目标系统的逻辑模型,与计概要设计建立的是目标系统的逻辑模型,与计算机无关。算机无关。1.1.主要内容主要内容v 1)软件的总体结构和模块外部设计。v 2)软件处理流程设计。 v 3)确定软件的功能并分配
11、。 v 4)数据结构设计。v 5)网络及接口设计。v 6)运行设计。v 7)出错处理设计。v 8)性能可靠性及安全保密设计。v 9)维护设计。2.2.设计过程设计过程编码编码测试测试设计设计信息描述信息描述功能描述功能描述行为描述行为描述其他需求其他需求总体结构设计总体结构设计数据设计数据设计过程设计过程设计 程序模块程序模块集成并确集成并确认的软件认的软件3.3.设计原则设计原则v总体设计的总原则是:由宏观到微观、逐步求精的原则,定性定量分析相结合、分解与协调相结合和模型化方法,并要兼顾系统的一般性、关联性、整体性和层次性。v根据系统的总体结构、功能、任务和目标的要求分解系统,使各子系统之间
12、互相协调配合,实现系统的整体优化。v具体原则如下:3.13.1模块化模块化v把整个系统划分成若干个模块,每个模块完成一把整个系统划分成若干个模块,每个模块完成一个子功能,将多个模块组织起来实现整个系统的个子功能,将多个模块组织起来实现整个系统的功能。功能。v 模块的三个属性:模块的三个属性:功能功能-即指该模块实现什么样的功即指该模块实现什么样的功能。能。逻辑逻辑-即描述模块内部怎么做。即描述模块内部怎么做。状态状态-是指是指该模块使用时的环境和条件。该模块使用时的环境和条件。v模块化设计方法强调清楚地定义每个模块的功能模块化设计方法强调清楚地定义每个模块的功能和它的输入和它的输入/ /输出参
13、数,而模块的实现细节隐藏在输出参数,而模块的实现细节隐藏在各自的模块之中,与其它模块之间的关系可以是各自的模块之中,与其它模块之间的关系可以是调用关系,因此模块化程序易于调试和修改。调用关系,因此模块化程序易于调试和修改。v随着模块规模的减小,模块的开发成本减少,随着模块规模的减小,模块的开发成本减少,但是模块之间的接口变得复杂起来,使得模块但是模块之间的接口变得复杂起来,使得模块的集成成本增加。的集成成本增加。最小成本区最小成本区M模块成本模块成本接口成本接口成本总成本总成本软件软件开发开发工作工作量量 模块数模块数 3.23.2抽象和逐步求精抽象和逐步求精v抽象是指抓住事物的本质特性而暂时
14、不考虑其细节的方法。v逐步求精是指为了集中精力解决主要问题而尽量推迟并逐步考虑细节问题的方法,是人类解决复杂问题时采用的一种基本策略,也是软件工程技术的基础。3.33.3信息隐藏信息隐藏v 每个模块的实现细节对于其他模块来说是隐每个模块的实现细节对于其他模块来说是隐藏的。藏的。v模块中所包含的信息是不允许其他不需要这些模块中所包含的信息是不允许其他不需要这些信息的模块使用的。信息的模块使用的。 3.43.4内聚和耦合内聚和耦合v在软件设计中应该保持模块的独立性原则。反在软件设计中应该保持模块的独立性原则。反映模块独立性的有两个标准:内聚和耦合。映模块独立性的有两个标准:内聚和耦合。v 内聚:标
15、志一个模块内各个元素彼此结合的紧密程度,是信息隐蔽和局部化概念的自然扩展。设计时应该力求做到高内聚。v 耦合:是对软件结构内不同模块之间互连程度的度量,是影响软件复杂程度的一个重要因素。模块间的耦合程度将影响系统的可理解性、可测试性、可靠性和可维护性。设计时应该力求做到低耦合。练习一:确定内聚类型练习一:确定内聚类型计算每个班学生的平均成绩初始化变量sum并打开文件创建新的成绩记录存储成绩记录关闭文件并打印平均成绩读取科目和成绩计算某个科目的平均成绩内聚类型内聚类型v功能内聚 :一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,
16、紧密联系,不可分割的。则称该模块为功能内聚模块。v顺序内聚如果一个模块中的处理元素和同一个功能密切相关,并且这些处理必须是顺序执行的,那么这个模块具有顺序内聚。v通信内聚:一个模块内各功能部分都针对相同输入/输出数据进行处理。v过程内聚:模块执行的若干动作,相互关联并且有顺序关系。例如,从录入界面读取数据,然后更新数据库记录。它仍然是将多个相关的功能放在一个模块中实现。v时间内聚:模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。v逻辑内聚:一个模块完成的任务在逻辑上相同/相似v巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,
17、这种联 系也很松散。练习二:确定耦合类型练习二:确定耦合类型pqrtsu135246说明:模块说明:模块p、t和和u更新同一个数据库更新同一个数据库编号编号输入输入输出输出1班级名称班级编号2班级学生清单3功能代码4班级学生清单5班级编号班主任6班级编号班长模块接口描述模块接口描述耦合类型耦合类型内容耦合公共耦合外部耦合控制耦合数据结构耦合数据耦合非直接耦合模块独立性模块耦合性低高弱强如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,坚决避免使用内容耦合。内容耦合:如果一个模块直接引用另一个模块的内容。内容耦合:如果一个模块直接引用另一个模块的内容。公共耦合公共耦合
18、多个模块都访问同一个公共数据环境,则多个模块都访问同一个公共数据环境,则称它们是公共耦合。称它们是公共耦合。控制耦合控制耦合模块模块A A向模块向模块B B传递一个控制信息,称这两传递一个控制信息,称这两个模块是控制耦合的。个模块是控制耦合的。 数据耦合数据耦合如果两个模块传递的是数据项,则这两个如果两个模块传递的是数据项,则这两个模块是数据耦合。模块是数据耦合。特征耦合:传递整个数据结构,但是只需要使用一部分特征耦合:传递整个数据结构,但是只需要使用一部分数据元素数据元素非直接耦合:两个模块之间没有直接关系,它们之间的非直接耦合:两个模块之间没有直接关系,它们之间的联系是通过主模块的控制和调
19、用联系是通过主模块的控制和调用4 4 体系结构设计体系结构设计v 体系结构是软件系统中最本质的东西。体系结构是软件系统中最本质的东西。v (1 1)体系结构是对复杂事物的一种抽象。良好的体系)体系结构是对复杂事物的一种抽象。良好的体系结构是普遍适用的,它可以高效地处理多种多样的个体结构是普遍适用的,它可以高效地处理多种多样的个体需求。需求。 一提起一提起“房子房子”,我们的脑中马上就会出现房子的印象(而不,我们的脑中马上就会出现房子的印象(而不是地洞的印象)。是地洞的印象)。“房子房子”是人们对住宿或办公环境的一种抽是人们对住宿或办公环境的一种抽象。象。v (2 2)体系结构在一定的时间内保持
20、稳定。软件开发最)体系结构在一定的时间内保持稳定。软件开发最怕的就是需求变化,但怕的就是需求变化,但“需求会发生变化需求会发生变化”是个无法逃是个无法逃避的现实。人们希望在需求发生变化时,最好只对软件避的现实。人们希望在需求发生变化时,最好只对软件做些皮皮毛毛的修改,可千万别改动软件的体系结构。做些皮皮毛毛的修改,可千万别改动软件的体系结构。 就如人们对住宿的需求也会变动,你可以经常改变房间的装璜就如人们对住宿的需求也会变动,你可以经常改变房间的装璜和摆设,但不会在每次变动时都要去折墙、拆柱、挖地基。和摆设,但不会在每次变动时都要去折墙、拆柱、挖地基。v良好的体系结构意味着普适、高效和稳定。本
21、良好的体系结构意味着普适、高效和稳定。本节将论述两种非常通用的软件体系结构:节将论述两种非常通用的软件体系结构:v层次结构层次结构v客户机客户机/ /服务器(服务器(Client/ServerClient/Server)结构)结构THANK YOUSUCCESS2022-5-1529可编辑可编辑4.14.1层次结构层次结构v层次结构表达了这么一种常识:有些事情比较层次结构表达了这么一种常识:有些事情比较复杂,我们没法一口气干完,就把事情分为好复杂,我们没法一口气干完,就把事情分为好几层,一层一层地去做。高层的工作总是建立几层,一层一层地去做。高层的工作总是建立在低层的工作之上。在低层的工作之上
22、。v层次关系主要有两种:上下级关系和顺序相邻层次关系主要有两种:上下级关系和顺序相邻关系。关系。v一、上下级关系的层次结构一、上下级关系的层次结构我们从小学一直读到博士研究生毕业,要读我们从小学一直读到博士研究生毕业,要读2020多年多年,可以分为五个层次。而范进的知识结构只有两层,可以分为五个层次。而范进的知识结构只有两层:“私塾私塾”和和“秀才秀才”,但读了五十多年。,但读了五十多年。一般地处于较高层次的学生应该懂得所有低层次的一般地处于较高层次的学生应该懂得所有低层次的知识,而处于低层次学生无法懂得所有高层次的知知识,而处于低层次学生无法懂得所有高层次的知识。识。v上层子系统可以使用下层
23、子系统的功能,而下上层子系统可以使用下层子系统的功能,而下层子系统不能够使用上层子系统的功能。层子系统不能够使用上层子系统的功能。v 二、顺序相邻关系的层次结构二、顺序相邻关系的层次结构v 顺序相邻关系的层次结构表明通讯只能在相邻两层之顺序相邻关系的层次结构表明通讯只能在相邻两层之间发生,信息只能被一层一层地顺序传递。这种层次间发生,信息只能被一层一层地顺序传递。这种层次结构的经典之作是计算机网络的结构的经典之作是计算机网络的OSIOSI参考模型。参考模型。v 为了减少设计的复杂性,大多数网络都按层(为了减少设计的复杂性,大多数网络都按层(LayerLayer)或级(或级(LevelLevel
24、)的方式组织。每一层的目的都是向它的)的方式组织。每一层的目的都是向它的上一层提供一定的服务,而把如何实现这一服务的细上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。节对上一层加以屏蔽。 一台机器上的第一台机器上的第n n层与另一台机器上的第层与另一台机器上的第n n层进行对话。通话层进行对话。通话的规则就是第的规则就是第n n层的协议。数据不是从一台机器的第层的协议。数据不是从一台机器的第n n层直接层直接传送到另一台机器的第传送到另一台机器的第n n层。发送方把数据和控制信息逐层向层。发送方把数据和控制信息逐层向下传递。最低层是物理介质,它进行实际的通讯。接收方则下传递。
25、最低层是物理介质,它进行实际的通讯。接收方则将数据和控制信息逐层向上传递。将数据和控制信息逐层向上传递。4.2 4.2 客户机客户机/ /服务器结构服务器结构v 让我们先回顾一下早期的电话系统。贝尔(让我们先回顾一下早期的电话系统。贝尔(Alexander Alexander Graham BellGraham Bell)于)于18761876年申请了电话专利。年申请了电话专利。v 那时期的电话必须一对一对地卖,用户自己在两个电那时期的电话必须一对一对地卖,用户自己在两个电话之间拉一根线。如果一个电话用户想和其它几个电话之间拉一根线。如果一个电话用户想和其它几个电话用户通话,他必须拉话用户通话
26、,他必须拉n n根单独的线到每个人的房子里根单独的线到每个人的房子里。于是在很短的时间内,城市里到处都是穿过房屋和。于是在很短的时间内,城市里到处都是穿过房屋和树木的混乱的电话线。很明显,企图把所有的电话完树木的混乱的电话线。很明显,企图把所有的电话完全互联(如图所示全互联(如图所示a a)是行不通的。)是行不通的。abv 贝尔电话公司在贝尔电话公司在18781878年开办了第一个交换局。年开办了第一个交换局。v 公司为每个客户架设一条线。打电话时,客户摇动电公司为每个客户架设一条线。打电话时,客户摇动电话的曲柄使电话公司办公室的铃响起来,操作员听到话的曲柄使电话公司办公室的铃响起来,操作员听
27、到铃声以后根据要求将呼叫方和被呼叫方用跳线手工连铃声以后根据要求将呼叫方和被呼叫方用跳线手工连接起来。这种集中交换式的模型如图接起来。这种集中交换式的模型如图b b所示。所示。v 很快地,贝尔系统的交换局就出现在各地。人们又要很快地,贝尔系统的交换局就出现在各地。人们又要求能打城市间的长途电话,就出现了二级交换局,以求能打城市间的长途电话,就出现了二级交换局,以后进一步发展为多个二级交换局。后进一步发展为多个二级交换局。 TanenbaumTanenbaum 1998 1998v如果将图如果将图b b中的电话看成是客户程序,将中心中的电话看成是客户程序,将中心的交换局看成是服务程序,那么图的交
28、换局看成是服务程序,那么图b b就是典型就是典型的客户机的客户机/ /服务器结构。服务器结构。v注意这里客户机和服务器都是指软件而不是指注意这里客户机和服务器都是指软件而不是指硬件。硬件。v客户机客户机/ /服务器结构存在两个显然的优点:服务器结构存在两个显然的优点:v(1 1)以集中的方式高效率地管理通讯。前面)以集中的方式高效率地管理通讯。前面讲电话系统的故事就是要说明这一点。讲电话系统的故事就是要说明这一点。v(2 2)可以共享资源。比如在信息管理系统中)可以共享资源。比如在信息管理系统中,服务器将信息集中起来,任何客户机都可以,服务器将信息集中起来,任何客户机都可以通过访问服务器而获得
29、所需的信息。通过访问服务器而获得所需的信息。v客户机和服务器之间的通讯以客户机和服务器之间的通讯以“请求请求响应响应”的方式进行。客户机先向服务器发起的方式进行。客户机先向服务器发起“请求请求”(RequestRequest),服务器再响应(),服务器再响应(ResponseResponse)这个请求。这个请求。客户机客户机服务器服务器请求请求响应响应v 在在Internet/IntranetInternet/Intranet领域,目前领域,目前“浏览器浏览器Web Web 服服务器务器数据库服务器数据库服务器” ” 结构是一种非常流行的客户机结构是一种非常流行的客户机/ /服务器结构。服务器
30、结构。v 这种结构最大的优点是:客户机统一采用浏览器,这这种结构最大的优点是:客户机统一采用浏览器,这不仅让用户使用方便,而且使得客户机端不存在维护不仅让用户使用方便,而且使得客户机端不存在维护的问题。当然,软件开发布和维护的工作不是自动消的问题。当然,软件开发布和维护的工作不是自动消失了,而是转移到了失了,而是转移到了Web Web 服务器端。在服务器端。在Web Web 服务器端服务器端,程序员要用脚本语言编写响应页面。,程序员要用脚本语言编写响应页面。5 5 层次结构设计层次结构设计v 软件体系结构设计的三要素是程序构件(模块)软件体系结构设计的三要素是程序构件(模块)的层次结构、构件之
31、间交互的方式以及数据的结构的层次结构、构件之间交互的方式以及数据的结构。子系统及模块划分还应考虑:v (1)模块大小适当。v (2)模块的层次结构。v 结构图结构图(Structure Chart,SC)是精确表达软件结构的图形表示方法,可反映模块之间的层次调用关系和联系。常用特定符号表示模块、模块间调用关系及其信息传递。模块间用单向箭头连结,箭头从调用模块指向被调用模块,如下图所示。 图a 模块调用关系 图b 模块间接口表示 图c 模块的条件和循环调用关系有的结构图对这两种信息不加以区别,一律用注有信息名的短箭头“”来表示【案例案例1】打印报告的软件结构图。其调用次序为上层调用下层,同层按照
32、数据传递关系确定,一般从左到右执行。执行过程即按照数据流向进行。如图1所示。 (3)软件层次结构。层次图如图2所示。有关指标为: 深度。表示了模块间控制的层数,表明软件的复杂程度,深度越深,软件越复杂。 宽度。表示同一层次上模块的总数,宽度越宽,表示软件越复杂。 扇出。表示一模块直接控制其他模块的数量。如图3(a)和(b)。)。模块划分时,一般扇出平均3-4上限为5-8。 扇入。表示模块直接受到多少其他模块控制,扇入越大表明共享该模块的上级模块数越多,虽有一定好处,但不宜片面追求高扇入,如图3(c)和(d)。)。 图2软件的层次 图3 软件的扇出和扇入控制6 6 模块设计模块设计v 在设计好软
33、件的体系结构后,就已经在宏观上明确了在设计好软件的体系结构后,就已经在宏观上明确了各个模块应具有什么功能,应放在体系结构的哪个位各个模块应具有什么功能,应放在体系结构的哪个位置。置。v 保持保持“功能独立功能独立”是模块化设计的基本原则。因为,是模块化设计的基本原则。因为,“功能独立功能独立”的模块可以降低开发、测试、维护等阶的模块可以降低开发、测试、维护等阶段的代价。段的代价。v 但是但是“功能独立功能独立”并不意味着模块之间保持绝对的孤并不意味着模块之间保持绝对的孤立。一个系统要完成某项任务,需要各个模块相互配立。一个系统要完成某项任务,需要各个模块相互配合才能实现,此时模块之间就要进行信
34、息交流。合才能实现,此时模块之间就要进行信息交流。 手和脚是两个手和脚是两个“功能独立功能独立”的模块。没有脚,手照样能干活的模块。没有脚,手照样能干活。没有手,脚仍可以走路。如果希望跑得快,那么迈左脚时。没有手,脚仍可以走路。如果希望跑得快,那么迈左脚时一定要伸右臂甩左臂,迈右脚时则要伸左臂甩右臂。一定要伸右臂甩左臂,迈右脚时则要伸左臂甩右臂。v在设计一个模块时不仅要考虑在设计一个模块时不仅要考虑“这个模块就该这个模块就该提供什么样的功能提供什么样的功能”,还要考虑,还要考虑“这个模块应这个模块应该怎样与其它模块交流信息该怎样与其它模块交流信息”。v评价模块设计优劣的三个特征因素:评价模块设
35、计优劣的三个特征因素:“信息隐信息隐藏藏”、“内聚与耦合内聚与耦合”和和“封闭封闭开放性开放性”6.16.1信息隐藏信息隐藏v为了尽量避免某个模块的行为去干扰同一系统为了尽量避免某个模块的行为去干扰同一系统中的其它模块,在设计模块时就要注意信息隐中的其它模块,在设计模块时就要注意信息隐藏。应该让模块仅仅公开必须要让外界知道的藏。应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。内容,而隐藏其它一切内容。v模块的信息隐藏可以通过接口设计来实现。一模块的信息隐藏可以通过接口设计来实现。一个模块仅提供有限个接口(个模块仅提供有限个接口(InterfaceInterface),执),执行模
36、块的功能或与模块交流信息必须且只须通行模块的功能或与模块交流信息必须且只须通过调用公有接口来实现。过调用公有接口来实现。6.26.2内聚和耦合内聚和耦合v内聚(内聚(CohesionCohesion)是一个模块内部各成分之间)是一个模块内部各成分之间相关联程度的度量。相关联程度的度量。v耦合(耦合(CouplingCoupling)是模块之间依赖程度的度量)是模块之间依赖程度的度量。v内聚和耦合是密切相关的,与其它模块存在强内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。块通常意味着与
37、其它模块之间存在弱耦合。v模块设计追求强内聚,弱耦合。模块设计追求强内聚,弱耦合。6.36.3封闭封闭开放性开放性v 一个模块可以作为一个独立体被其它程序引用,则称模块具一个模块可以作为一个独立体被其它程序引用,则称模块具有封闭性。一个模块可以被扩充,则称模块具有开放性。有封闭性。一个模块可以被扩充,则称模块具有开放性。v 从字面上看,让模块具有从字面上看,让模块具有“封闭封闭开放性开放性”是矛盾的,但是矛盾的,但这种特征在软件开发过程中是客观存在的。这种特征在软件开发过程中是客观存在的。v 着手一个新问题时,很难一次性解决问题。应该先纵观问题着手一个新问题时,很难一次性解决问题。应该先纵观问
38、题的一些重要方面,同时作好以后补充的准备。因此让模块存的一些重要方面,同时作好以后补充的准备。因此让模块存在在“开放性开放性”并不是坏事情。并不是坏事情。“封闭性封闭性”也是需要的,不能也是需要的,不能等到完全掌握解决问题的信息后再把程序做成别人能用的模等到完全掌握解决问题的信息后再把程序做成别人能用的模块。块。v 模块的模块的“封闭封闭开放性开放性”实际上对应于软件质量因素中的实际上对应于软件质量因素中的可复用性和可扩充性。采用面向过程的方法进行程序设计,可复用性和可扩充性。采用面向过程的方法进行程序设计,很难开发出既具有封闭性又具有开放性的模块。采用面向对很难开发出既具有封闭性又具有开放性
39、的模块。采用面向对象设计方法可以较好地解决这个问题。象设计方法可以较好地解决这个问题。7 7 设计方法设计方法v 软件设计方法可以分为三大类。v一是面向数据流的设计,也称为过程驱动设计v二是面向数据结构设计,也称为数据驱动的设计v三是面向对象设计7.1 7.1 结构化设计方法v1)结构化设计方法概述)结构化设计方法概述v结构化设计(Structured Design,SD)方法是一种典型的面向数据流的设计方法,是结构化开发方法的核心和关键,主要完成软件系统的总体结构设计。v软件具有层次性和过程性特征:软件的层次性反映了其整体性质,常用结构图表示。而过程性则反映了其局部性质,常用框图等表示。SD
40、法分为总体设计和详细设计两个阶段。v v(1)总体设计。总体设计过程要解决系统的模块结构,确定系统模块的层次结构。SD法的总体设计步骤是:v 从 DFD 图导出初始的模块结构图。v 改进初始的模块结构图。v(2)详细设计)详细设计。详细设计阶段的任务是:对模块图中每个模块的过程进行描述。常用的描述的方式有:流程图、N-S图、PAD图等。v 2)结构化)结构化方法的设计过程方法的设计过程v 面向数据流的设计方法的目标是确定设计软目标是确定设计软件结构的一个系统化的途径。件结构的一个系统化的途径。面向数据流方法设计过程,如图所示。 SD法的总体设计过程需要从DFD 图导出初始的模块结构图,首先要分
41、析DFD 图的类型,对不同类型的DFD图,采用不同的技术将其转换为初始的模块结构图(SC 图图)。一般将 DFD 图分为两种典型类型:中心变换型和事务处理型 。7.2 面向数据结构的设计方法v由M.Jackson 提出的Jackson开发(Jackson System Development,JSD) 方法是一种典型的面向数据结构的分析与设计方法。其基本设计步骤分为3 步:v建立数据结构;v以数据结构为基础,对应地建立程序结构;v列出程序中要用到的各种基本操作,再将这些操作分配到程序结构中适当的模块。v分别对应结构化方法的需求分析、总体设计和详细设计。7.3 7.3 面向对象方法面向对象方法v第九讲内容第九讲内容小结小结v概要设计是用比较抽象的方式确定系统如何完概要设计是用比较抽象的方式确定系统如何完成预定的任务。成预定的任务。v进行软件结构设计主要的原理是模块独立性原进行软件结构设计主要的原理是模块独立性原理理v设计层次结构时的方法是:由抽象到具体地构设计层次结构时的方法是:由抽象到具体地构造软件层次结构造软件层次结构v概要设计的描述工具:层次图和结构图概要设计的描述工具:层次图和结构图作业作业v判断内聚类型判断内聚类型v判断耦合类型判断耦合类型v层次图画法层次图画法THANK YOUSUCCESS2022-5-1558可编辑可编辑