资源描述
软件工程方法与实践(机械工业出版社),高等院校计算机课程案例教程系列,窦万峰 编著,主讲:李淑芝 13507077576 L,主讲:曾婕 13767792699 ,1.现代软件工程(国家示范性软件学院系列教材) 张家浩/东南大学 机械工业出版社 2009.1 2.软件工程 理论与实践 许家珆 曾翎 彭德中 编著 高等教育出版社 2004.7 3.软件工程-实践者的研究方法 (美)Roger S. Pressman著 郑人杰等译 机械工业出版社 2008.6 4.Software Engineering, 6th Edition Sommerville.I. (影印版) 机械工业出版社 2003.4,主要参考书:,总 目 录,第1章 软件工程学概述(2学时) 第2章 软件过程(2学时) 第3章 软件过程模型(4学时) 第4章 案例研究(2学时) 第5章 软件需求分析过程(4学时) 第6章 结构化分析建模(4学时) 第7章 面向对象分析(6学时) 第8章 软件设计(4学时) 第9章 结构化设计方法(4学时),总 目 录,第10章 面向对象设计(4学时) 第11章 软件实现(2学时) 第12章 软件测试(4学时) 第13章 软件维护(2学时) 第14章 软件项目管理(2学时) 第15章 软件项目估算(1学时) 第16章 软件项目计划与管理(1学时),第8章 软件设计,8.1 软件设计概述 8.2 软件模块化设计 8.3 软件结构 8.4 软件系统结构模型 8.5 体系结构模式 8.6 习题,引言: 我们前面已经学习了软件从问题定义到可行性分析,到需求分析,一步步明确软件问题,用户的需求,但那都是软件的需求,而不是软件(也可以说是从用户角度描述,而不是从软件开发人员角度描述问题),我们这一章就是要将我们的计算机软件需求变为软件表示,那么什么是软件表示?怎样用软件表示我们的问题?如何实现这一变换?这是我们这一部份要解决的主要问题。,8.1 软件设计概述,软件设计阶段的基本目标是构造系统“怎么做”的模型描述,它是整个软件开发过程的核心问题 开发工作根据设计的方案进行,软件的总体设计决定了系统的质量 “设计先于编码”,这是软件工程“推迟实现”基本原则 软件系统设计是把软件需求“变换”为用于构造软件的蓝图 “输入”是需求分析各种模型元素 “输出”是软件设计模型和表示 软件设计的目标是对将要实现的软件系统的体系结构、系统的数据、系统模块间的接口,以及所采用的算法给出详尽的描述,总体 设计,复审,修 改,详细 设计,模块描述,复审,修 改,软件设计工作流程,从工程管理的角度看,软件设计分两步完成:总体设计(概要设计)和详细设计两个阶段。 首先做概要设计(软件结构设计),将软件需求转化为数据结构和软件的系统结构。 然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件详细的数据结构和算法。,通过软件设计阶段的工作将划分出组成系统的物理元素: 程序 文件 数据库 人工过程 文档等 但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后详细设计。 总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。,设计过程的一般模型,设计活动,设计产品,软件 设计,编码,软件 测试,开发阶段信息流,总体设计通常由两个主要阶段组成: (1)系统设计阶段:确定系统的具体实现方案; (2)结构设计阶段:确定软件结构。 典型的总体设计过程包括下述9个步骤: 1. 设计供选择的方案 需求分析阶段得出的数据流图是总体设计的极好的出发点。 一旦选出了边界划分(分组)最佳的方案,将能大大提高系统的性能/价格比。,2. 选取合理的方案 通常至少选取低成本、中等成本和高成本的三种方案。 在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。 对每个合理的方案分析员都应该准备下列4份资料: (1) 系统流程图; (2) 组成系统的物理元素清单; (3) 成本/效益分析; (4) 实现这个系统的进度计划。,3. 推荐最佳方案 分析员综合分析对比各种合理方案的利弊,推荐一个最佳的方案。 用工程网络技术为推荐的方案制定详细的实现计划。 用户和有关的技术专家认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。 在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。,4. 功能分解 为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。 对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成: (1)结构设计:确定程序由哪些模块组成,以及这些模块之间的关系; (2)过程设计:确定每个模块的处理过程,这是详细设计阶段的任务。,为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。 分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。 一般说来,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。 功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。,5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。 软件结构(即由模块组成的层次系统) 表示软件系统的构成,是软件模块间关系的表示,可以用层次图或结构图来描绘。 如果数据流图已经细化到适当的层次,则可以直接从数据流图映射出软件结构,这就是面向数据流的设计方法。,软件结构图,6. 设计数据库(确定系统的数据结构) 对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。 7. 设计用户界面 作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的可用性及使用寿命。 8. 制定软件设计测试计划 在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。,9. 书写文档 在这个阶段应该完成的文档通常有下述几种: (1) 系统说明主要内容:系统流程图描绘的系统构成方案,物理元素清单,成本/效益分析,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具简要描述的各个模块的算法,模块间的接口关系等。 (2) 用户手册:根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。 (3) 测试计划:测试策略,测试方案,预期的测试结果,测试进度计划等。 (4) 详细的实现计划。 (5) 数据库设计结果。,10. 审查和复审 最后对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,软件设计质量原则,设计过程不应该受“隧道视野”的限制 设计对于分析模型应该是可跟踪的 设计不应该从头做起 设计应该缩短软件和现实问题的“智力距离” 设计应该表现出一致性和集成性 设计应该能够适应修改 设计不是编码 在创建设计时,就应该考虑能够评估其质量 应该复审每一步设计,以减少语义性错误,概要设计说明书,详细设计说明书,8.2 软件模块化设计,有人说,模块化是为了使一个复杂的大型程序能被人的智力所管理,软件应该具备的惟一属性。,模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。 把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成一个特定子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计(Modular Design)。 软件模块化设计可以简化软件的设计和实现,提高软件的可理解性和可测试性,并使软件更容易得到维护。 分解、抽象、逐步求精、信息隐蔽和模块独立性,是软件模块化设计的指导思想。,模块(构件)是程序对象有名字的集合。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。 面向对象方法学中的对象是模块,对象内的方法(服务)也是模块。模块是构成程序的基本构件。 模块化就是将系统划分为若干个模块,每个模块完成一个子功能。 模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。,令:C(X)表示问题 X 的复杂度函数, E(X)表示解决问题 X 所需工作量的复杂度函数; 若:有问题 P1,P2 , C(P1) C(P2); 显然:E(P1) E(P2) 由经验:C(P1+P2) C(P1)+ C(P2) 于是:E(P1+P2) E(P1)+ E(P2) 将问题(P1+P2)划分为两个问题P1和P2后,其工作量和复杂度都降低。,结论:并非模块分得越小越好,因为模块之间接口的复杂度和工作量会增加。显然,每个软件系统都有一个最佳模块数M,注意选择分解的最佳模块数。,模块化降低软件复杂度的简单证明:,采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。 因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。 因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。 模块化的主要优点是:模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。,人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。 人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。 把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。 或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。,抽象,处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。 软件工程过程的每一步都是对软件解法的抽象层次的一次精化: 在可行性研究阶段,软件作为系统的一个完整部件; 在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的; 当由总体设计向详细设计过渡时,抽象的程度也就随之减少了; 最后,当源程序写出来以后,也就达到了抽象的最低层。,软件体系结构,软件体系结构是指软件的整体结构和这种结构为系统提供概念上完整性的方式。 体系结构可以是程序构件或模块的结构或组织,这些构件或模块交互的形式以及这些构件所用数据的结构。 体系结构设计可以使用大量的模型来表达。,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。 实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节。 独立的构件或模块之间的“接口”简单而清晰。 所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。 在模块中使用局部数据元素是局部化的一个例子。 显然,局部化有助于实现信息隐藏。,信息隐藏和局部化,模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。 希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。 模块的独立性很重要,主要有两条理由: 第一,有效的模块化的软件比较容易开发出来。 第二,独立的模块比较容易测试和维护。 总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。,模块独立,模块独立性的度量标准是两个定性准则: (1)耦合性:描述模块之间联系的紧密程度; (2)内聚性:描述模块内部联系的紧密程度。 模块独立性比较强的模块应该具有高内聚性和低耦合度。 模块独立性愈高,则块内联系越强,块间联系越弱。,低,高,弱,强,耦合性,模块独立性,1. 耦合 耦合是对一个软件结构内不同模块之间互连程度的度量。 耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。 模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。,(1)数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。 系统中至少必须存在数据耦合,只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。 (2)控制耦合:一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。,控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合在把模块适当分解之后通常可以用数据耦合代替它。,(3)特征耦合:被调用的模块需要使用作为参数传递进来的数据结构中的一部分数据元素时,就出现了特征耦合。 (4)公共耦合:当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。 公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。 如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共环境耦合。,(5)内容耦合:是最高程度的耦合。 有如下表现:,a. 一个模块直接访问另一模块的内部数据。 b.一个模块不通过正常入口转到另一模块的内部。 c.一个模块有多个入口。 d.两个模块有部分代码重迭。,总之,耦合是影响软件复杂程度的一个重要因素。 应该采取下述设计原则: 尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。,2. 内聚 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。 简单地说,理想内聚的模块只做一件事情。 设计时应该力求做到高内聚,中等程度的内聚也可以采用,不要使用低内聚。,低,高,强,弱,内聚性,模块独立性,低内聚有如下几类: (1)偶然内聚一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。 有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块。 (2)逻辑内聚一个模块完成的任务在逻辑上属于相同或相似的一类。 (3)时间内聚一个模块包含的任务必须在同一段时间内执行。 例如:初始化系统模块、系统结束模块、紧急故障处理模块 等均是时间性聚合模块。,被调用模块,中内聚主要有两类: (4)过程内聚一个模块内的处理元素是相关的,而且必须以特定次序执行。 (5)通信内聚模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据。 高内聚也有两类: (6)顺序内聚一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行。 (7)功能内聚模块内所有处理元素属于一个整体,完成一个单一的功能。 功能内聚是最高程度的内聚。,逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。 可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。” 逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(72)个知识块上。 Miller法则是人类智力的基本局限,我们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽我们的最大努力工作。,逐步求精,逐步求精,或称逐步细化,是一种自顶向下的设计策略。 抽象与求精是一对互补的概念。 抽象使得设计者能够说明过程和数据,同时却忽略低层细节。 事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。 求精则帮助设计者在设计过程中逐步揭示出低层细节。 这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。,逐步求精和模块化的概念,与抽象是紧密相关的。 随着软件开发工程的进展,在软件结构每一层中的模块,表示了对软件抽象层次的一次精化: 事实上,软件结构顶层的模块,控制了系统的主要功能并且影响全局; 在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式分配控制; 简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。,重构,重构是一种重新组织的技术,可以简化构件或模块的设计或编码而无需改变其功能或行为。 重构是一种改进程序内部结构但不改变代码或设计的外部行为。 “先使它转起来,再使它快起来”。,8.3 软件结构,软件结构图(Structure Chart, 简称SC)是软件系统的模块层次结构,反映了整个系统的功能实现。 软件结构以层次表示程序的系统结构,即一种控制的层次体系,并不表示软件的具体过程。 软件结构一般用树状或网状结构的图形来表示。,8.3 软件结构,软件结构图的主要元素有: 模块:模块用带有名字的方框表示,名称应体现模块的功能。 控制关系:控制关系用单向箭头或直线表示模块间的调用关系。 信息传递:用带注释的短箭头表示模块调用过程中传递的信息。 循环调用和选择调用:在上部模块底部加一个菱形符号表示选择调用,在上部模块的下方家一个弧形箭头,表示循环调用。,图4-4结构图的基本定义,层次图和HIPO图 层次图用来描绘软件的层次结构。虽然层次图的形式和描绘数据结构的层次方框图相同,但是表现的内容却完全不同。 层次图中的一个矩形框代表一个模块,方框间的连线表示调用关系而不像层次方框图那样表示组成关系。,描绘软件结构的图形工具,正文加工系统的层次图,描绘软件结构的图形工具,HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。 为了能使HIPO图具有可追踪性,在H图(层次图)里除了最顶层的方框之外,每个方框都加了编号。 编号规则和数据流图的编号规则相同。 和H图中每个方框相对应,应该有一张IPO图描绘这个方框代表的模块的处理过程。 HIPO图中的每张IPO图内都应该明显地标出它所描绘的模块在H图中的编号,以便追踪了解这个模块在软件结构中的位置。,描绘软件结构的图形工具,带编号的层次图(H图),描绘软件结构的图形工具,A,SC 图中的主要内容,1、模块-在SC图中用矩形框表示,并用名字来标记它,- 模块调用关系,2、模块的调用关系和接口,B,被调用模块,调用模块,A(查询学生),B(查找学生记录),数据信号,控制信号,学 号,查找成功信号,- 模块间接口的表示,描绘软件结构的图形工具,例:画出打印报告的软件结构图,调用次序为上层调用下层; 同层按照数据传递关系确定;一般从左到右执行。 执行过程即按照数据流向进行。,报 告,计 算,获得编辑,确认数据,读入,编辑,打印报告头,打印报告尾,打印,输入 EOF,输入,已编辑,已编辑,已编辑,已确认,已确认 数据,已确认 数据,计算结果,结果,日期,总结果,行,行,行,打印报告,予以确认,描绘软件结构的图形工具,SC中还有一些附加的符号,可以表示模块的选择调用或循环调用。 注意:1.层次图和结构图并不严格表示模块的调用次序。 2.通常用层次图作为描绘软件结构的文档。 3.利用IPO图或数据字典中的信息得到模块调用时传递的信息,由层次图导出结构图的过程,作为检查设计正确性和评价模块独立性的好方法。,判定为真时调用A, 为假时调用B,模块M循环调用模块A、B、C,描绘软件结构的图形工具,软件结构图的形态特征: 深度:指结构图控制的层次,也是模块的层数。能粗略表示一个系统的大小和复杂程度,深度和程序长度之间存在着某种对应关系。 宽度:指一层中最大的模块个数。一般来说,结构的宽度越大,则系统就越复杂。 扇出:指一个模块直接下属模块的个数。扇出过大,表示模块过分复杂,需要控制和协调的下级模块太多。扇出的上限一般为 59,平均一般为3或4。 扇入:指一个模块直接上属模块的个数。扇入过大,意味着共享该模块的上级模块数目多,这有一定的益处,但是决不能违背模块的独立性原则而片面追求高扇入。,8.3 软件结构,有关指标: 深度:表示软件结构中从顶层模块到最底层模块的层数。 宽度:表示控制的总分布。 扇出数:指一个模块直接控制下属的模块个数。 扇入数:指一个模块的直接上属模块个数。,一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。,深度、宽度、扇出和扇入都应适当,画结构图应注意的事项: 模块不能重名。 调用关系只能从上到下。,8.3 软件结构,人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发式规则。 启发式规则能帮助人们找到改进软件设计提高软件质量的途径。,模块化设计的优化(启发规则),1. 改进软件结构提高模块独立性 设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。 例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。,2. 模块规模应该适中 一般说来,分解后不应该降低模块独立性。 3. 深度、宽度、扇出和扇入都应适当 4.力争降低模块接口的复杂程度 模块接口复杂是软件发生错误的一个主要原因。 应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。 5. 设计单入口单出口的模块 当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。,控制范围 结构方面的特点,包括模块及其所有下属模块。 作用范围 判断所涉及到的模块,是从功能特点考虑的。 SD方法认为:当作用范围为控制范围的子集时,才能获得较低的块间联系。 如下图中的设计,判定的作用范围恰好在判定所在模块的下一层。,模块TOP 的控制范围是:TOP、X、T、B、A、B1、B2; 模块B 的控制范围与作用范围相同,模块A的控制范围: A、B、C、D、G、E、F 则F的的作用范围:B、E、F,6. 模块的作用域应该在控制域之内,图3.33控制范围与作用范围,显然,图(a)不满足作用范围应与控制范围的原则,模块F的作用范围不在控制范围之内。 图(b)中模块TOP和图(c)中模块B虽然满足上述原则,但其作用范围所涉及到的模块不是直接的。 图(d)的模块设计最合理。,应用范围与作用范围举例,7. 模块功能应该可以预测 模块的功能应该能够预测,但也要防止模块功能过分局限。 如果一个模块可以当做一个黑盒子,也就是说,只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。 以上列出的启发式规则多数是经验规律,对改进设计,提高软件质量,往往有重要的参考价值;但是,它们既不是设计的目标也不是设计时应该普遍遵循的原理。,8.4 软件系统结构模型,软件体系结构是一种表达,使软件工程师能够分析设计是否满足需求、选择合理的方案和降低风险。 大型软件系统总是被分解成一系列子系统,由子系统提供一些相关的服务。 软件体系结构设计过程就是识别出这些子系统,并建立子系统控制和通信的框架,最后给出软件体系结构的一个描述。 两类结构模型: 系统构成模型 系统控制模型,概念补充,概念补充,概念补充,概念补充,概念补充,概念补充,概念补充,概念补充,系统构成模型,以数据为中心的结构模型 数据流结构模型 客户机/服务器结构模型 抽象机结构模型,1. 以数据为中心的结构模型,由一组子系统构成,子系统交换信息,协调工作有两种基本方法: 全部共享数据放在一个中央数据库中,所有子系统都能从中存取数据。 每个子系统用各自的数据库与其他子系统进行数据交互,通过消息传递来实现。 共享数据模型的优点是能够高效地共享大量的数据,生产数据的子系统不需要关心数据如何被其他子系统使用,可以集中进行如备份、保密性、访问控制和错误恢复等活动; 缺点是子系统一定要与以数据为中心的体系结构模型一致,系统变更或进化比较困难,子系统的需求会不同,难以集成,以及很难将数据分布到多台机器上。,2. 数据流体系结构模型,当输入数据经过一系列的计算和操作构件或模块的变换形成输出数据时,可以应用数据流体系结构。 管道和过滤器结构通过一组由管道连接的过滤器来变换数据,并向下传递。,管道和过滤器结构,3. 客户机/服务器结构模型,客户机/服务器结构模型的主要组成部分是: 一组给其他子系统提供服务的单机服务器 一组向服务器请求服务的客户机 一个连接客户机和服务器的网络(可选) 服务器模型能实现以数据为中心的体系结构模型的系统 客户机/服务器模型的最大优势在于可以是一个分布式结构,多媒体服务系统结构,4. 抽象机模型,抽象机模型也称为分层模型,是建立子系统的接口模型。它把子系统组织成一系列的层次,每一层提供一组服务,每一层定义为一个抽象机。 例如:网络协议OSI参考模型,系统控制模型,集中式控制模型 调用返回模型:这是一个自上而下的子过程模型。控制始于系统(程序)的顶层,在子系统(程序)调用过程中,控制逐步传递到更低的层次中。该模型适用于顺序执行的系统。 管理者模型:这是一种适用于并发系统的模型。一个系统组件被指定为系统管理者,控制其他系统过程的启动、终止和协调。一个过程就是一个能和其他过程并发执行的子系统或模块。,并发系统的集中式控制模型,系统控制模型,事件驱动系统 广播模型:发生的事件广播到所有子系统,任何能处理该事件的子系统都会响应。该模型适用于基于网络的分布式系统。 广播模型中的子系统注册其感兴趣的特别事件 广播模型的优点是进化比较简单 缺点是子系统都知道是否和什么时候处理事件,这可能会引起冲突。 中断驱动模型:由中断处理器对来自外部的中断进行检测,然后在其他组件中处理这些中断。该模型适用于对定时有严格要求的实时系统。 只用在硬件实时系统中,要求对一些事件能做出及时响应,8.5 软件的体系结构模式,软件的体系结构模式定义了处理系统某些行为特征的方法 并发性 系统必须以一种模拟并行的方式来操作多个任务 操作系统进程管理模式 任务调度器模式包括一组含有tick()操作的活动对象 持久性 如果数据从创建它的进程执行以来一直存在,则该数据是持久性存在的数据 数据库管理系统模式将DBMS的存储和存取能力用于应用系统的体系结构中 应用级的持久模式在应用体系结构中建立了持久性特征,8.5 软件的体系结构模式,分布性 强调系统或系统中构件或模块在一个分布的环境中相互通信的方式。分布性问题有两个元素: 一是实体间连接方式 二是实体间通信的特性 代理模式是一种普遍的体系结构模式 CORBA就是代理模式的一个范例,实验6:Rational Rose工具基本使用 使用Rational Rose完成一个系统的业务分析模型。 使用Rational Rose完成一个系统的设计模型的详细视图,包括用况视图、逻辑视图、开发视图、展开视图和物理视图。 要求:理解实验内容与方法、提交实验报告 习题:1、6、7,8.6 实验要求及习题,
展开阅读全文