《现代软件工程》培训课件.ppt_第1页
《现代软件工程》培训课件.ppt_第2页
《现代软件工程》培训课件.ppt_第3页
《现代软件工程》培训课件.ppt_第4页
《现代软件工程》培训课件.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、现代软件工程第五部分软件体系结构与系统概要设计 现代软件工程本部分主要参考书软件工程-实践者的研究方法现代软件工程概论软件体系结构的原理、组成与应用需求分析与系统设计设计模式-可复用面向对象软件的基础体系结构的基本问题-1软件系统的框架与体系结构-2面向对象的设计模式-3MVC结构与用户界面设计-4基于构件的软件体系结构-5从需求分析到系统设计过程-6第五部分 软件体系结构与系统概要设计第五部分 软件体系结构与系统概要设计第一章 体系结构的基本问题体系结构的意义-1.1 体系结构的定义-1.2体系结构的基础-1.3抽象与求精-1.4模块化与信息隐蔽- 体系结构的重要性和意义软件

2、设计与建筑设计在某些方面是类似的:搭建一个小狗屋,可以由一个人来完成:最小的整体结构最简单的过程最原始的工具整体结构和精化都在一个人脑子里完成、并由本人亲自实现构造一栋房屋需要一张设计图纸或模型需要具有规划良好的过程需要具备一定功能的工具需要由一个小型团体完成,并且需要更明确的目标和计划、更高的效率、更精确的时间限制构建一个高层建筑?复杂!软件体系结构的复杂性=技术的+管理的更高的技术复杂性 - 嵌入式,实时的,分布式的,不可出错的 - 定制的, 空前的,可复用的 - 高性能的较低的技术复杂度 - 大部分是4GL, 或基于组件技术的 - 应用反向工程 - 基于交互式的对性能要求不高较高管理复杂

3、度 - 大范围 - 合同契约性 - 受很多人制约的 - “项目”型的较低的管理复杂度 - 小范围 - 非正式的 - 简单的资金运作 - “产品”型的防御 MIS系统防御武器系统信息 交换CASE工具国际空中运输控制系统企业IS(IS应用)商业编译器商业制表软件IS应用分布式对象小型科学模拟大型组织/实体仿真模拟一个中等的项目 - 5-10 人 - 10-15 个月的开发周期 - 3-5 个外部界面 - 一些不可知的事情 & 风险嵌入式车用软件IS应用GUI/RDB 理解软件系统的复杂性因素新技术融合软件体系结构的重要性,已经比算法和数据结构更重要灵活性与可扩展性处理能力与吞吐量负载与容量可用性

4、失败安全与稳固性出错容忍程度功能成本兼容与可移植性系统的复杂性现在的挑战已经不是速度、成本和性能,而是复杂度的问题了。 Bill Raduchel, Sun微系统公司策略执行总裁体系结构的域体系结构元素/关系处理体系结构 集成/约束 体系结构是“什么”体系结构“为什么”体系结构“如何” “谁”保证体系结构系统功能结构S/W 需求系统质量属性满足限制组织构建技巧风险承担人定义规则生产跟踪技术定义为什么体系结构在软件系统中具有如此的重要性?一个表现体系结构作用和价值的典型案例软件无线电与体系结构Software Radio Architecture5.1.2 体系结构定义软件体系结构是:由结构和功

5、能各异、相互作用的部件集合,按照层次构成。它包含了系统的基础构成单元、它们之间的作用关系、在构成系统时,它们的集成方法以及对集成约束的描述。软件的体系结构是关于软件系统组织的配置定义定义了:组成系统的结构(结构元素)和部件;定义了:结构与部件间特定的构成和协作关系;定义了:系统继承集成方法和约束;因此,系统中的子系统定义,是系统体系构建(集成)的结果,而不是开始;体系结构不但决定了系统的物理构成,也支配了开发的组织行为(需求分配、范围和任务定义、进度计划、测试方案、集成方法、配置项与基线管理),这是现代软件工程更注重的地方。内容与形式、过程与结果理解体系结构定义软件体系结构定义了软件计算部件的

6、局部和总体的构成以及这些部件之间的相互作用关系计算部件:客户、服务器、数据库、中间件、程序包、过程、子程序、进程等切碎、再切碎(粒度)相互作用关系:过程调用、共享变量访问、信号灯、进程通信、消息传递、访问/网络协议等除了描述系统的构成和结构关系外,体系结构还表达了系统需求和构成之间的对应关系,这为系统的设计,提供了分析和评价的依据体系结构比需求更进一步要面对或满足系统非功能性的内容,如:容量、数据吞吐量、一致性、兼容性、安全性、可靠性 体系结构元模型视图展现了体系结构的不同视角一个具体的体系结构构成的例子,当然并不只有窗体,约束来自需求和设计规范模板提供了设计规范和重用表现了风格规范制定和成果

7、积累从具体到抽象的提升体系结构的类型与作用体系结构在不同的阶段,依据层次和细节的不同,分为概略型、需求型和设计型概略型是上层宏观的描述,反映系统最上层的部件和连接关系需求型是对概略结构的深入表达,以满足用户功能和非功能需求的表达为主设计型从设计实现的角度,对需求型进行更深入的描述表达,需要从不同的侧面/视图,设计系统的各个层面的各个部件和连接结构。在这个层面上的描述,将直接为系统实现和性能分析服务体系结构的类型与作用在项目规划阶段:体系结构是项目可行性、工程复杂度、计划进度、投资规模和风险预测的依据(概略型)在需求分析阶段:体系结构是开发团队与用户进行需求交互沟通的表达形式和结果(需求型)在系

8、统设计阶段:体系结构是系统设计分解的基础在项目实施阶段:体系结构是工作分工、人员安排、组织协调、绩效管理的依据在项目评估阶段:体系结构是性能测试和评估的依据在维护升级阶段:体系结构是在保证系统整体合理性、正确性、性能和可控的维护成本的前提下,软件系统修改、扩充、升级的基础模型好的体系结构的特征设计灵活和可伸缩性的考虑全面并可扩展的思路简单明了、直接可以理解的结构划分和关系定义清楚的模块职责明确和分布合理的效益和技术综合平衡的不同阶段、不同的人,对体系结构的不同视角不同的人对体系结构有不同的视角最终用户客户项目经理系统分析师编码工程师架构工程师维护人员其他开发人员体系结构的视图是根据观察者的需要

9、,来进行描述简化(抽象)的,它关注观察者的关注点,而忽略与关注点无关的部分UML:描绘系统体系结构逻辑视图面向系统设计 功能实现视图面向编程 软件管理 过程视图性能可伸缩性吞吐能力 面向系统集成分布图系统拓扑结构 分发, 安装通信面向系统实施概念模型物理模型用例图用例节点组件 类, 接口,协作活动类体系结构的视角对体系结构的不同认识,反映在看待体系结构的视角上,也有不同,形成了不同的体系结构概念和描述形式:主要的有:结构风格、设计模式、模型和关键部件、ADL语言体系结构风格(风格:一种现实存在的抽象)数据流系统:顺序批处理、管道和过滤器调用-返回系统;主/子程序面向对象系统:层次结构独立部件:

10、通信进程、事件隐式调用虚拟机:解释器、规则系统以数据(库)为中心的系统:数据库、超文本、黑板特殊领域风格:过程控制、模拟器特殊结构风格:分布式处理、状态转移系统体系结构的层次系统是由许多层次构成的,每个层次处理不同的问题每个层次都有二个方面组成:部件和规则构成系统的原始的或集成的部件由部件集成为系统的集成规则(静态)为系统提供语义的行为规则(动态)软件设计发展过程中,对体系结构认识的三个层次执行级包括存储器的映射、数据地址的安排、堆栈和寄存器的分配等,在此,部件是硬件,集成和行为规则是非常明确具体的代码级包括算法和数据结构的选择。在此,部件是程序设计语言的字符、指针、进程控制等,集成的是记录、

11、数组和过程结构级包括与部件相关联的系统总体性能。在此,部件是模块、模块的相互关系,它指明从模块到子系统、到系统的集成在上世纪80年代,软件开发者关注的是代码级的,如今,关注的是结构级“结构级”体系结构的认识软件体系结构的“结构”元素:部件系统的总体组织架构、全局控制、通信协议、同步、数据存取、设计元素的功能、设计元素的组织、规模、性能、设计方案的选择等部件不只是有形的、物理的程序片段:还包括“结构件”软件体系结构的集成规则和行为规则体系结构是关于软件的系统级层次上的组成和行为体系结构是由软件部件和部件之间的联系组成部件的描述应包括:部件功能、结构特征、非功能特征部件的概念,根据设计方法的不同,

12、代表不同的对象:类/对象、库/包、构件/组件、制品/配置项/基线等RUP的统一过程结构预备循环 Iter.#1周期处理工作流反复支持工作流 Iter.#2 Iter.#n Iter.#n+1 Iter.#n+2 Iter.#m Iter.#m+1管理环境配置管理业务模型实现测试分析和设计分布需求详细化提交初始化构造RUP统一过程三大要素:用例驱动源头和全过程驱动迭代开发过程与基本方法以体系结构为中心适应需求变更和迭代开发的 需要,以体系结构为基础的 增量开发。发现创造实现生命周期与重要的里程碑时间想象 体系结构基线 初始能力产品发布最初详细构造提交最初 定义项目的范围和开发商业案例(业务/系统

13、模型)详细 计划项目,详细说明功能和结构的基线构造 创建产品提交 把产品提交给用户以产品线为目标、以框架为基础的迭代过程迭代一个循环是一次确定的计划、评估、标准审查活动的阶段,最终结果是产生可执行发布版本(基线发布与中间版本)。主要循环.开发循环开发循环.提交循环.发布发布发布发布发布发布发布发布预备循环.最初详细构造提交以体系结构为中心RUP的视图和模型是使体系结构可视化、可详细描述和定义、可文档化的构造工具和手段统一过程指明了可执行体系结构的顺序行为过程时间体系结构初始化详细描述构造提交体系结构和循环用例模型设计模型分布模型测试模型实现模型内容关系数据库C客户端WWW BrowserWeb

14、服务器HTMLCGIASPJava商业对象服务商业对象引擎应用商业对象服务A客户端商业对象引擎廋客户端,胖服务器B客户端Application商业对象服务商业对象引擎商业逻辑服务器DCOMADO/RCORBABeansCOMMTSBeansETS体系结构的四视图观点四视图:概念、模块、代码、运行体系结构的模型和关键部件观点关系数据库图形用户界面关系数据库图形用户界面商业对象模型图形用户界面商业对象模型关系数据库模型的演变和深入:过程抽象关键部件:系统边界、系统服务和客户、系统界面、事务管理模型的演变和深入:对象和数据抽象顺序/条件/循环、分布、并行、激发/响应、应用环境、任务控制复杂的Inte

15、rnet系统客户端WEB服务器应用服务器认证系统财务系统库存系统数据库系统Dynamic HTML, JavaScript, Javaplug-ins, source code enhancementsJava, C, C+, JavaScript, CGIJava, C, C+, JavaBeans, CORBA, DCOMNative languages复杂的商业系统的体系结构数据库用户界面层ServiceAgentpurchase(customer, product, items)Customername : StringAddress : Stringsave()Customernam

16、e : StringAddress : Stringsave()getName()updateName()CustomerOrder Line*Product*Order Lineitems : ProductgetName()updateName()Observerupdate()Orderdate : DateProductname : Stringprice : CurrencygetName()updateName()Salesproduct : Product中间件体系结构的研究范畴体系结构的研究领域体系结构的实践经验积累通用的软件体系结构框架和构件特殊应用领域的体系结构框架和组件基

17、于体系结构的软件开发环境和工具体系结构本身的形式化研究体系结构的形式化语言描述方法软件设计经历了40年的发展演化过程: 1、早期的模块化程序设计和自顶向下逐步求精的结构化方法面向结构的方法2、由数据库技术的发展,带来的将数据流和数据结构,转化为设计定义的方法(E-R模型)面向数据的方法3、面向对象的方法从对象及其关系导出系统的方法4、现在的方法:软件设计的重点,已经移到软件体系结构和实现软件体系结构的设计模式 5.1.3 体系结构基础体系结构的基本问题:结构基础 软件结构始终是软件研究的重要课题,而研究的层次和侧重点,从最基本和底层,向越来越抽象层次发展,但结构的基本思想仍然有指导意义。曾作为

18、软件结构研究发展的基本思想包括:(1)结构化控制流(2)部件连接方式(3)结构化控制模式(4)基本数据结构(5)抽象数据结构(6)进程(7)分时与并发(8)资源共享与并行同步不论何种方法,都具有以下一些共同的特征:(1)一种用于将分析模型变换到设计表示的机制;(2)用于表示功能性结构及其接口的符号体系;(3)用于求精和划分的启发信息;(4)质量评价的指导原则软件的结构基础1、结构化控制流伴随着高级语言的产生,最基本的结构化程序控制规范就产生了,例如:顺序语句形式:; ; ;程序按语句1-n顺序执行。转向语句形式:goto;程序转到所指示的语句执行。过程调用形式:(参数1、参数2、参数n) 程序

19、转到指定的过程开始执行,执行完过 程后,返回到的下一条语句继续执行。软件的结构基础条件语句形式:if(条件表达式)then;条件成立,执行语句形式:if(条件表达式)thenelse; 如果条件成立,执行语句1,否则执行语句2。开关语句形式:switch(计算表达式) case 值1:; case值n:语句n; else 语句N+1; 计算表达式的值,根据取值i,分别执行语句I,否则,执行语句n+1。循环语句形式:for(循环控制变量=初值,循环变量计算) 从循环控制变量初值开始,判断条件是否满足,满足则执行循环体,改变控制变 量值,再进行判断形式:while(条件表达式)do;先判断条件,满

20、足则执行语句。形式:repeatuntil(条件表达式);先执行,再判断条件满足再次执行。软件的结构基础2、部件连接方式(控制模式)在控制流之上,存在着比语句更集中的部件,这些部件可以是数据、外部设备、程序段等。与这些部件的连接方式,是复杂程序设计更高一层的抽象,也称为控制模式。直接过程调用方式部件与部件之间,通过直接调用对方的过程、函数或方法实现连接的方法,这是最普通、常用的方法。过程调用是通过系统提供的CALL和堆栈机制实现的。过程标识 过程代码 P1 P2Pn P1代码P2代码Pn代码过程调用表(间接)方式如图:过程调用表是通过维护一张表格的形式,来系统地管理过程调用的方法。各过程按标识

21、排列在表中,建立起标识与代码的对应。调用表的可动态维护,是这种方法的优点,所以也称为间接调用。调用方主动/被调用方被动软件的结构基础中断/事件触发方式中断事件触发是通过硬件所提供的中断及其控制机制,实现的部件连接方式。部件的调用,依靠中断设置和中断触发实现的。中断设置就是将特定的中断号码的中断指针指向中断处理入口。中断处理根据代码号,转向不同的处理代码段,执行相应的处理操作。中断号 服务代码 1# 2#n# 1#中断2#中断n#中断发生x号中断进入转入中断处理过程链接方式过程链接在原理上与中断方式有些类似,它通过一些标识,在多个事件或过程的处理链中,进行转移。过程链接方式是动态扩展系统功能的常

22、用设计方法。在中断服务、设备管理、消息传递等服务中,有广泛的应用。只要增加一个标识,就可以把新的代码段插入到处理链中,达到功能扩充的目的。调用方被动/被调用方主动软件的结构基础服务连接方式服务连接方式的服务部件由接口、分析器、执行器构成其他部件与服务部件进行交互,是通过接口进行的分析器分析获得的服务请求信息然后交执行器执行服务部件是被动接收服务请求,解释器和各类服务器就是采用这种连接方式分析器执行器服务部件部件1部件2的代理部件2网络连接远程过程调用方式远程过程调用(PRC:Remote Procedural Call)是在网络环境下的过程调用。本地部件无法获得分布在远程的部件的标识,不能直接

23、调用远程的部件,因此,需要在本地,建立一个远程部件的代理。本地部件把服务请求发送给代理,由代理通过网络实现与远程部件的连接。类似地还有同一计算机内的进程间调用,也有一个专门的机制,来实现。接口互为调用和被调用方,可以无主从,称为发起/响应软件的结构基础3、结构化连接模式结构化连接模式指部件与部件间连接关系的构成形式条件连接循环连接查询模式中断/事件模式共享信息模式部件A部件1部件n条件连接部件A部件1部件n循环连接(轮巡)根据已知条件选择根据当时事件选择软件的结构基础信息处理信息源1信息源n查询模式信息处理信息源1信息源n中断/事件模式信息处理信息源共享信息模式信息共享交换区采样点不多事件多/

24、轮巡方式控制方主动采样点多事件不多/中断方式事件方主动对等软件的结构基础4、基本数据类型数据类型和数据结构,是继控制流和结构化设计之后,在软件研究和设计中,发挥过巨大作用的软件结构概念面向数据的程序设计提出“软件=数据结构+算法”目前数据结构的重要性已经让位给体系结构,但数据结构仍然是系统设计的重要基础常用的数据结构概念是线性结构:顺序表、向量、堆栈、队列、链表、动态存储、串、排序、检索;树形结构:二分树、树;复杂结构:图、多维数组、集合、疏散矩阵、广义表;文件结构:顺序文件、散列文件、索引文件软件的结构基础5、抽象数据类型抽象数据类型(ADT:Abstract Data Types)是一个关

25、于软件部件的数学模型ADT定义了所描述部件的构成和构成成员之间的关系ADT定义了作用在部件构成之上的合法的操作与操作性质ADT表达的是一组逻辑特性,与其在计算机内的具体表示和实现无关,这是抽象的意义所在现代软件工程认为,软件系统架构是建立在系统的数据模型上而不是建立在单纯的操作(传统软件工程方法)之上的抽象抓住了软件部件设计的本质,通过集中分类表达的形式,建立部件的完整描述,这正是软件系统体系结构分析和设计所要求的。一个软件部件类型的抽象定义,可用(D、R、P、S)四元组表示如下:D:数据对象R:数据对象D成员之间的约束关系P:对数据对象D的操作集S:是S的操作语义 有关ADT的细节,在详细设

26、计中讨论软件的结构基础6、进程早期的计算机系统的运行,一个程序独占计算机所有资源,CPU顺序执行指令、程序、数据、内存地址直接指定,程序的执行过程由程序“本身”进行控制为了提高计算机资源的利用率,开始引入多道(并行/并发)程序设计的技术,在多程序运行环境下,程序执行不再由程序本身控制,因此,引进了“进程”的概念进程是一个程序的一段(独立调度、独立分配/释放资源)动态执行过程进程是具有独立功能的程序对某个数据集在处理器上的执行过程和资源分配单元的基本单位程序和进程的区别:程序是进程运行的“脚本”,进程是程序的动态执行过程一个进程可以执行一个或多个程序,一个程序可以有多个进程进程具有并行性,并行可

27、以是独立的、异步的进程概念的进一步发展:子进程、线程进程实现:进程控制块、进程调度、进程数据环境进程与体系结构的关系:从静态-动态程序/数据结构到行为结构多道批处理系统 多道程序的执行情况: 在计算机内存中同时存放若干道已开始运行尚未结束的程序,它们交替运行,共享系统中的各种硬、软件资源,从而使处理机得到充分利用。 在该系统中, 用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”;然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。软件的结构基础单道和多道程序运行情况 软件的结构基础7、分时与并发分时的概念采用时间片轮的方法,同

28、时为许多终端用户服务,对每个用户能保证足够快的响应时间,并提供交互会话的功能。时间片:将CPU的时间划分成若干个片段,称为时间片,操作系统以时间片为单位,轮流为每个终端用户服务设计目标:对用户的请求及时响应,并在可能条件下尽量提高系统资源的利用率。实现分时的方法固定时间片,滚入/滚出划分前台和后台,对前台给予较大的时间片,或只在前台“空闲”时,才执行后台任务(多数为批处理任务)进一步把前台作业分成几个作业流(划小时间片单位),提高响应效率软件的结构基础8、资源共享与并行同步资源共享:防止为竞争公共资源产生的死锁并行同步:为协同进程间的逻辑和时序关系制约机制传统操作系统:竞争条件、临界区、忙等待

29、互斥、睡眠与唤醒、信号量、事件计数器、管程、消息传递、原语等价等分布式操作系统:分层协议、客户-服务器模式、远程过程调用软件的结构基础这都是软件系统设计所走过的路现在仍在走,特别体现在:操作系统工业控制实时控制等等,对系统资源要求非常苛刻的环境下如果我们前面探讨的是宏观(整体)的体系结构,那么下面,我们开始再深入考察一下整体结构的建立过程和构成要素(模块结构)5.1.4 抽象与求精抽象 抽象是常见的思考问题的方法:专注主要方面,避开细节需求分析的抽象:用问题域的语言描述需求,不用计算机的语言表达,避开因计算机实现细节带来的干扰,抽象级别最高 系统设计的抽象:同时采用用面向问题域和面向实现域的术

30、语,来描述解决方案,抽象级别降低 编码阶段的抽象:采用高级语言,实现系统设计。高级语言是对机器执行代码的抽象,抽象级别最低软件的结构基础:抽象与求精在软件开发过程中,有过程抽象和数据抽象过程抽象过程抽象是指具有特定功能的一个被“命名的”指令序列在高抽象级别中,它可能就是一个过程名,不需要具体实现细节。在低抽象层次中,它可以是一段抽象的“宏”描述数据抽象描述数据对象的一个命名的数据集合与过程抽象一样,也有从高级到低级的层次抽象与求精抽象细化的例子:一个计算机辅助设计CAD软件,可以实现二维绘图抽象级别1:需求描述 该软件应具有以下功能:提供一个所见既所得的绘图用户界面提供一个数字化仪界面,用以代

31、替绘图板和丁字尺能实现各种类型的直线、矩形、圆及曲线的绘制可进行几何计算、视图或剖面图处理设计结果以图形文件形式存储 显然,这个抽象是问题域术语的抽象与求精抽象级别2:系统任务描述 CAD软件任务:系统用户交互二维图形创建与输入图形显示与处理图形文件管理END CAD这个抽象,已经比较接近计算机术语,而不是用户术语,但仍然还不是实现术语抽象级别3:过程描述(部分) PROCEDURE 二维图形创建REPEAT 下列操作 UNTIL 图形创建完毕DO WHILE 需要与数字化仪交互时 数字化仪接口处理 CASE 绘图请求 OF 直线:直线绘图处理 矩形:矩形绘图处理 圆 :圆绘图处理 END C

32、ASEEND DOEND REPEATEND PROCEDUREDO WHILE 需要与键盘交互时 键盘交互处理 CASE 分析/计算 OF 视图 :视图处理 剖面图:剖面图处理 计算 :计算处理 END CASEEND DO抽象与求精求精从宏观开始,进行功能分解,建立过程细节,直到用程序设计语言进行实现为止抽象的目的是使设计人员避开细节,抓住问题的本质求精的目的则是帮助设计人员随设计的深入获得更深层次的信息抽象和求精都是设计人员建立完整系统模型的必要过程求精的方法就是研究模块本身和模块之间的构成关系有两个函数:C(x)表示问题x的复杂程度;E(x)表示解决问题x所需要的工作量(时间)。对于两

33、个问题P1和P2,如果:C(P1)C(P2) 则:E(P1)E(P2)如果问题复杂,则解决问题的工作量也大另一个有趣的特性是:C(P1P2)C(P1)C(P2)问题分解,有利于降低问题的总的复杂度根据前面的结论,我们可以得出下面的不等式:E(P1P2)E(P1)E(P2)所以,问题分解既可以降低问题的复杂程度,也可以减少总的工作量。这种“分而治之”的思想提供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。 但是,过分的分细模块,也会带来集成的复杂度,因此,需要选择一个适度平衡的方案。5.1.5 软件的结构基础:模块化和信息隐蔽模块的概念1.定义 同时具有以下四

34、个要素的一组程序语句称为一个模块 四个要素是: 输入/输出 逻辑功能 运行程序 内部数据。 前两个称为模块的外部要素,后两个称为内部要素。 模块化和信息隐蔽2.模块的属性模块定义:四个要素输入/输出、逻辑功能、运行程序、内部数据。模块具有四种属性:一个模块的输入/输出都是指向同一个调用者。模块的逻辑功能是指模块能够做什么事,表达了模块把输入转换成输出的功能,可以是单纯的(无处理)输入/输出功能。模块的运行程序指模块如何用程序实现其逻辑功能的过程。模块的数据指属于模块自己的数据。 在结构化系统设计中。人们主要关心的是模块的外部要素(输入/输出、逻辑功能),至于内部要素(运行程序、内部数据),将在

35、系统实现/编码时完成模块化和信息隐蔽模块数量与软件开发复杂性但是,并不是把问题细分的越小越好,有一个最小成本区模块化和信息隐蔽如何确保模块数量,落在“最小成本区”内?信息隐蔽模块中所包含的信息(数据、过程)对不需要这些信息的其他模块,是透明的(不可见、不可访问的)涉及这些信息的改变,都只局限在模块内部,不会影响到其他模块抽象帮助我们定义组成软件系统的过程实体、而隐蔽机制则通过对模块内部访问的约束,有助于模块的分离和实现隐蔽是系统设计的重要原则,也是系统实现(并行开发)、测试(问题分离)、后期维护(局部维护变更)的重要方法模块独立性(理想的模块)每个理想模块只解决一个问题。每个理想模块的功能都应

36、该明确,使人(开发者、使用者、维护者)容易理解。理想模块之间的联结关系简单,具有独立性。由理想模块构成的系统,使人容易理解、编程、测试、修改和维护。对模块的使用者来说,其感兴趣是模块的功能,而不必去理解模块内部的结构和原理。(卖菜的也可以卖电脑了)对理想模块独立性设计的最经典描述:既插既用模块化和信息隐蔽3.模块的图形及符号(1)模块的图形:用矩形表示。模块的名称写在方框内,由一个动词和一个作为宾语的名词组成。(2)模块间的联接 (3)模块间的通讯 模块间通讯有两种:数据通讯、控制通讯 数据通讯是一个数据流,它表示了一个经过处理的数据从一个模块传向另一个模块。 控制通讯只传送一个标志,该标志只

37、表达了处理工作的某种状态,而不是由被发送模块真正进行过处理的数据。获得配件库存量读库存记录模块间的通讯配件编号库存量无此配件模块化和信息隐蔽数据通讯控制通讯4.模块独立性模块设计的基本原则:降低系统中模块之间的联结程度,提高每个模块的独立性、聚合度。度量模块独立性的尺度:偶合性和内聚度模块按不同的需要而偶合在一起,偶合有七种形式,偶合度是度量模块间紧密程度的尺度在模块内部,实现不同功能的部分,也有七种组合形式,其组合的紧密程度,称为模块的内聚度模块化和信息隐蔽模块的七种偶合形式两个模块之间的偶合有七种形式,按照偶合紧密程度由低到高排列为:非直接偶合数据偶合标记偶合控制偶合外部偶合公共偶合内容偶

38、合模块化和信息隐蔽1.内容偶合如果二个模块中有一个模块直接引用另一个模块的内容(数据、语句、标号等),则称二个模块之间是内容偶合。如果修改一个,另一个也要做相应修改,因此,内容偶合不易复用。例如:模块A中TRC:语句在模块B中GO TO TRC模块A与模块B存在内容偶合,这是一种最不希望的偶合,一般出现在低级语言的程序中。模块化和信息隐蔽作为编码规范,绝对不允许出现内容偶合2.公共偶合如果两个模块都和同一个公共数据域有关(访问同一个数据环境),则称为公共偶合。共同的数据环境可能是共享的通信区、内存、存储介质等,如果二个模块一个只是写、另一个只是读,则这种公共偶合称为松散公共偶合,否则是紧密公共

39、偶合。二个模块对同一个数据库进行读写是最常见的公共偶合ABC公用数据公用偶合是一种不良的偶合关系,它给模块的维护和修改带来困难。如公共数据要作修改,很难判定有多少模块应用了该公共数据。只有在模块间需要传输的数据量很大,不宜通过参数传递时,才采用公共偶合。模块化和信息隐蔽作为编码规范,在现在的软件开发中,一般都规定,业务处理程序不允许直接对库进行操作。否则,系统无法维护。3.外部偶合一组模块访问同一个单一类型全局变量或全局数组,则称为外部偶合。例如:C语言程序中各模块访问声明为extern类型的外部变量。外部偶合类似于公共偶合,区别在定义为外部变量的数据是简单的,不涉及(看不见)数据结构的物理安

40、排。例如:通过宏定义(常量或变量),可以用一些变量,实现所谓全局性的控制标志,定义和修改非常容易。模块化和信息隐蔽外部偶合是经常使用的方法4.控制偶合如果模块A向模块B所传递的信息控制了模块B的内部逻辑,那么A和B之间的偶合称为控制偶合。控制信息可以看作是一个开关量,它传递了一个控制信息或状态的标志。控制信息不同于数据信息,数据信息一般通过处理过程,处理被处理的数据,而控制信息则是控制处理过程中的某些参数。判断是控制信息还是数据信息,就看是否会改变被调用模块的执行逻辑。例如:模块P调用模块QQ返回:返回处理(查询)完成的数据数据传递Q返回:不能完成要求的调用任务,请P打印出错信息 控制信息(Q

41、影响并导致了P的行为)控制偶合的缺点是:被调用模块P必须知道调用模块Q的内部结构和逻辑(可以打印),降低了模块的独立性模块化和信息隐蔽当要查找的库存编号找不到时,向上级模块反馈一个控制信息,要求上级模块打印“无此库存记录”错误信息。获得库存记录检索库存记录库存编号库存量打印“无此库存记录”错误信息控制信息的例子:模块化和信息隐蔽控制偶合主要用于主控程序(控制菜单)与实现子程序(模块)之间的调用5.标记偶合如果两个模块间传递的是结构变量(记录名、数组名、文件名),被调用模块可以对其中的全部或部分数据进行操作,则称为标记偶合。有的程序设计语言不支持结构的按名传递,因此,不能实现标记偶合计算水费和电费计算水费计算电费住户记录水费(住户记录结构中的部分信息)住户记录模块之间的标记偶合,多用于流水线处理模块化和信息隐蔽电费(住户记录结构中的部分信息)6.数据偶合如果两个模块间的调用参数都是简单变量,或虽然是结构变量,但被调用模块需要该结构的所有数据,称这种偶合为数据偶合。这是模块之间影响最小、最理想的偶合关系。开发货单计算金额单价数量金额模块化和信息隐蔽与控制偶合类似7.非直接偶合如果两个模块并不需要对方任何存在而独立工作,称这种偶合为非直接偶合。这是模块之间影响最小的偶合关系。非直接偶合通常靠主模块的调用来发生关系(被调用的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论