第7章_面向对象设计_第1页
第7章_面向对象设计_第2页
第7章_面向对象设计_第3页
第7章_面向对象设计_第4页
第7章_面向对象设计_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

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

文档简介

1、第第7章章 面向对象设计面向对象设计Object-Oriented Design (OOD)软件设计概述软件设计概述面向对象设计建模面向对象设计建模系统设计系统设计对象设计对象设计面向对象设计示例面向对象设计示例7.1 软件设计概述软件设计概述 (Overview of Software Design )7.1.1 软件设计的概念软件设计的概念1. 模块与构件模块与构件(Module and Component)模块模块(Module)是一个拥有明确定义的输入、是一个拥有明确定义的输入、输出和特性的程序实体输出和特性的程序实体。它可以单独命名且。它可以单独命名且可通过名字来访问。如高级语言中的

2、函数、可通过名字来访问。如高级语言中的函数、过程、子程序、类等。过程、子程序、类等。软件构件软件构件( Software Component )是可重复是可重复使用的软件组件使用的软件组件。 软件构件可以是子系统,也可以是模块。软件构件可以是子系统,也可以是模块。2. 抽象与细化抽象与细化 ( Abstraction and Refinement )抽象抽象(Abstraction)是控制复杂性的基本策略是控制复杂性的基本策略之一。之一。在软件工程中,从系统定义到实现,每进展在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过一步都可以看做是对软件解决方法的抽象化过程

3、的一次细化。在软件需求分析阶段,在最高程的一次细化。在软件需求分析阶段,在最高抽象级别上,用抽象级别上,用“做什么做什么”来描述问题。然后来描述问题。然后不断具体化;从概要设计到详细设计的过程中,不断具体化;从概要设计到详细设计的过程中,抽象化的层次逐次降低,当产生源程序时到达抽象化的层次逐次降低,当产生源程序时到达最低抽象层次。最低抽象层次。细化细化( Refinement )是与抽象相反而又是与抽象相反而又互补的一个概念。细化的实质就是分互补的一个概念。细化的实质就是分解,解,“自顶向下、逐步细化自顶向下、逐步细化”是结构是结构化程序设计的基本原理之一。化程序设计的基本原理之一。3. 信息

4、隐藏信息隐藏 ( Information Hiding )模块内部的数据和过程,应该对不需要了解模块内部的数据和过程,应该对不需要了解这些数据和过程的模块隐藏起来这些数据和过程的模块隐藏起来。信息隐蔽是为了提高模块的独立性。在将来信息隐蔽是为了提高模块的独立性。在将来修改软件时,偶然引入错误所造成的影响就可修改软件时,偶然引入错误所造成的影响就可以局限在一个或几个模块内部,不致于波及到以局限在一个或几个模块内部,不致于波及到软件的其它部分。软件的其它部分。4. 软件复用软件复用( Software Reuse )开发人员能充分利用已有的现成构件,不开发人员能充分利用已有的现成构件,不必一切都从

5、头做起。必一切都从头做起。7.1.2 软件设计的任务软件设计的任务 把分析阶段产生的分析模型转换为用适当手段把分析阶段产生的分析模型转换为用适当手段表示的软件设计模型。表示的软件设计模型。 软件设计一般都包括软件设计一般都包括数据设计、体系结构设数据设计、体系结构设计、接口设计和过程设计计、接口设计和过程设计等。等。 软件设计分两个阶段完成软件设计分两个阶段完成: (1)概要设计概要设计:进行结构设计和接口设计进行结构设计和接口设计,并编写,并编写概要设计文档。概要设计文档。 (2)详细设计详细设计:确定确定各个软件部件的操作各个软件部件的操作(算法算法)和和数据结构数据结构,编写详细设计文档

6、。,编写详细设计文档。7n数据设计的主要任务是:数据设计的主要任务是: 分析阶段创建的信息模型分析阶段创建的信息模型实现软件所需要实现软件所需要的数据结构。的数据结构。n体系结构设计的主要任务是:体系结构设计的主要任务是: 定义软件主要组成部件之间的关系。定义软件主要组成部件之间的关系。n接口设计的主要任务是:接口设计的主要任务是: 描述软件内部、软件和接口系统之间以及软描述软件内部、软件和接口系统之间以及软件与人之间的通信方式(包括数据流和控制件与人之间的通信方式(包括数据流和控制流)。流)。n过程设计的主要任务是:过程设计的主要任务是: 将软件体系结构的组成部件将软件体系结构的组成部件对软

7、件的过程对软件的过程性描述。性描述。7.1.3 模块化设计模块化设计 ( Modular Design ) 模块化设计是按照规定的原则把大型模块化设计是按照规定的原则把大型软件划分为一个个较小的、相对独立但软件划分为一个个较小的、相对独立但又相互关联的模块又相互关联的模块。 We say that a system is modular when each activity of the system is performed by exactly one component , and when the inputs and outputs of each component are wel

8、l-defined .(我们称一个系统是模块化的,是指系(我们称一个系统是模块化的,是指系统中的每个活动可以被并且仅被一个模统中的每个活动可以被并且仅被一个模块或构件正确地执行,并且已经对构件块或构件正确地执行,并且已经对构件的输入和输出进行了良好的定义。)的输入和输出进行了良好的定义。)1. 分解(分解(Decomposition) 模块化模块化 把一个复杂的问题分解为几个较小的问题,把一个复杂的问题分解为几个较小的问题,能够减少解题所需要的工作量。用数学式表示能够减少解题所需要的工作量。用数学式表示为:为: C(P1+P2) C(P1) + C(P2) E(P1+P2) E(P1) + E

9、(P2)其中其中, C为问题的复杂度,为问题的复杂度,E为解题所需要的工为解题所需要的工作量。作量。 模块划分越多,虽然块内的工作量减少了,模块划分越多,虽然块内的工作量减少了,但模块之间接口的工作量增加了。因此,存在但模块之间接口的工作量增加了。因此,存在一个最小成本区,把模块数控制在这一范围,一个最小成本区,把模块数控制在这一范围,可以使总的工作量保持最小(见图可以使总的工作量保持最小(见图4.1)。 图图7.1 模块数与开发工作量的关系模块数与开发工作量的关系n模块独立性模块独立性指每个模块只完成系统要求的独立指每个模块只完成系统要求的独立的子功能,而和系统中其它模块的联系最少且接的子功

10、能,而和系统中其它模块的联系最少且接口简单。口简单。n模块独立性从两个方面来度量,即模块本身的模块独立性从两个方面来度量,即模块本身的内聚性和模块之间的耦合性内聚性和模块之间的耦合性。n内聚性内聚性(Cohesion): 模块内部各个成分之间的联模块内部各个成分之间的联系,也称块内联系系,也称块内联系。n耦合性耦合性(Coupling): 一个模块与其他模块之间的一个模块与其他模块之间的联系联系 , 也称块间联系也称块间联系。n模块独立性越高,则块内联系越强(高内聚),模块独立性越高,则块内联系越强(高内聚),块间联系越弱(低耦合)。块间联系越弱(低耦合)。 2. 模块独立性(模块独立性(Mo

11、dule Independence)(1) 内聚性(内聚性(Cohesion) 一个模块内部各成分在功能上相互关联一个模块内部各成分在功能上相互关联的强度。的强度。偶然偶然 逻辑逻辑 时间时间 过程过程 通信通信 顺序顺序 功能功能内聚内聚 内聚内聚 内聚内聚 内聚内聚 内聚内聚 内聚内聚 内聚内聚内聚性内聚性模块独立性模块独立性高高高高低低低低(1)偶然内聚偶然内聚(Coincidental Cohesion): 块内各组成成分在功能上是互不相关的。块内各组成成分在功能上是互不相关的。 比如比如, 当几个模块内正好有一段代码是相同时当几个模块内正好有一段代码是相同时,将它们将它们抽取出来形成

12、单独的模块抽取出来形成单独的模块, 即为偶然内聚模块。这种模即为偶然内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。块没有独立功能,各部分之间没有联系,或联系很松散。(2)逻辑内聚逻辑内聚(Logical Cohesion): 模块内由若干个逻辑功能相似的成分组成模块内由若干个逻辑功能相似的成分组成。 这种模块把几种相关的功能组合在一起,每这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。该模块应执行哪一种功能。计算最高分计算最高分计算平均分计算平均分平均平均/ /最高最高调用模块调用

13、模块被调用被调用模块模块(3)时间内聚时间内聚( Temporal Cohesion ): 模块内所包含的成分,通常要求必须模块内所包含的成分,通常要求必须在相同的时间段内执行。在相同的时间段内执行。 例如,初始化一组变量、同时打开若例如,初始化一组变量、同时打开若干文件、同时关闭若干文件等等,都与干文件、同时关闭若干文件等等,都与特定时间有关系特定时间有关系。(4)过程内聚过程内聚( Procedural Cohesion )使模块内所包含的一组任务必须以某种使模块内所包含的一组任务必须以某种特定的次序执行。特定的次序执行。读入读入成绩单成绩单读入并读入并审查成绩单审查成绩单审查审查成绩单成

14、绩单统计统计成绩成绩打印打印成绩成绩统计并统计并打印成绩单打印成绩单(5)通信内聚通信内聚(Communicational Cohesion): 模块内部的各个成分都使用相同的输入数模块内部的各个成分都使用相同的输入数据,或产生相同的输出数据,它们靠公用数据,或产生相同的输出数据,它们靠公用数据联系在一起,故称为通信内聚模块据联系在一起,故称为通信内聚模块打印打印检验结检验结果果读文件读文件文件文件计算计算A计算计算B合并合并修改修改文件文件新文件新文件A结果结果B结果结果加工记录加工记录(6)顺序内聚顺序内聚(Sequential Cohesion): 模块中个组成成分是顺序执行的,模块中个

15、组成成分是顺序执行的,通常情况下上一个组成成分的输出就是通常情况下上一个组成成分的输出就是下一个组成成分的输入。下一个组成成分的输入。建立方程组系数矩阵建立方程组系数矩阵高斯消去法高斯消去法回代回代顺序性顺序性模块模块(7)功能内聚功能内聚(Functional Cohesion): 模块内所有组成成分结合在一起完成一个单模块内所有组成成分结合在一起完成一个单一的功能一的功能(模块所有成分共同完成一个功能,模块所有成分共同完成一个功能,缺一不可缺一不可)。例如为完成。例如为完成“对一个数开平方对一个数开平方”、“求一组数中的最大值求一组数中的最大值”、“从键盘上读入从键盘上读入一行数据一行数据

16、”等功能所构成模块均属于功能性等功能所构成模块均属于功能性模块。模块。这种模块的内聚性最强,具有与其它模块联这种模块的内聚性最强,具有与其它模块联系少等优点。系少等优点。“一个模块一个功能一个模块一个功能”,即追求高内聚性是,即追求高内聚性是进行模块化设计的基本准则。进行模块化设计的基本准则。212. 耦合性耦合性 ( Coupling ) 模块之间相对独立(相互依赖)的程模块之间相对独立(相互依赖)的程度度。模块的独立性越高,则模块的耦合模块的独立性越高,则模块的耦合性就越低。性就越低。 模块耦合强度所依赖的因素主要包括:模块耦合强度所依赖的因素主要包括:一模块对另一模块的引用;一模块向一模

17、块对另一模块的引用;一模块向另一模块传递的数据量;一模块施加另一模块传递的数据量;一模块施加到另一模块的控制的数量;模块间接到另一模块的控制的数量;模块间接口的复杂程度。口的复杂程度。 模块之间的耦合性可划分为如下七类:模块之间的耦合性可划分为如下七类: 非直接非直接数据数据 特征特征 控制控制 外部外部 公共公共 内容内容 耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合 耦合耦合耦合性耦合性模块独立性模块独立性低低高高低低高高(1)非直接耦合(非直接耦合( No-direct Coupling): 两个模块之间没有直接的信息传递,它们两个模块之间没有直接的信息传递,它们之间的联系

18、完全是通过上层模块的控制和调用之间的联系完全是通过上层模块的控制和调用来实现的。来实现的。 非直接耦合的模块独立性最强。非直接耦合的模块独立性最强。主模块主模块ABCEFGXYZ(2)数据耦合数据耦合(Data Coupling): 两个模块之间传递的是简单变量两个模块之间传递的是简单变量。 数据耦合相当于数据耦合相当于C语言中函数之间的值传递。语言中函数之间的值传递。(3)特征耦合特征耦合 (又称标记耦合,又称标记耦合,Stamp Coupling): 两个模块之间传递的是数据结构两个模块之间传递的是数据结构。 特征耦合相当于特征耦合相当于C语言中函数之间的地址传递,传语言中函数之间的地址传

19、递,传递的是指针、数组名、记录名等。递的是指针、数组名、记录名等。计算水费计算水费计算电费计算电费计算应扣款计算应扣款用水量用水量水费水费用电量用电量电费电费计算水费计算水费计算电费计算电费计算应扣款计算应扣款房租水电房租水电=房房租租+用水量用水量+用电量用电量水费水费电费电费房租水电房租水电=房房租租+用水量用水量+用电量用电量(4)控制耦合控制耦合(Control Coupling): 两个模块之间传递的两个模块之间传递的不是一般的数据,而不是一般的数据,而是是用作控制信号的开关值或标志量用作控制信号的开关值或标志量。 在控制耦合中,一个模块通过传送开关、标志在控制耦合中,一个模块通过传

20、送开关、标志等控制参数,控制选择另一模块的功能。等控制参数,控制选择另一模块的功能。A AB B:计算平均分计算平均分或最高分或最高分平均平均/ /最高最高( (控制信号控制信号) )成绩成绩B B计算平均分计算平均分平均平均/最高最高读入分数读入分数计算最高分计算最高分输出结果输出结果26 去除模块间控制耦合的方法:去除模块间控制耦合的方法:将被调用模块内的判定上移到调用模块;将被调用模块内的判定上移到调用模块;被调用模块分解成若干单一功能模块。被调用模块分解成若干单一功能模块。例如可将上例的控制耦合改造成如下的调例如可将上例的控制耦合改造成如下的调用形式。用形式。A AB1B1计算平均分计

21、算平均分平均成绩平均成绩最高成绩最高成绩B2B2计算最高分计算最高分(5)外部耦合外部耦合(External Coupling): 一组模块都访问同一个全局简单变量。一组模块都访问同一个全局简单变量。(6)公共耦合公共耦合(Common Coupling): 一组模块都访问同一个全局数据结构一组模块都访问同一个全局数据结构。 公共耦合的复杂程度随耦合模块个数的增加而增加。公共耦合的复杂程度随耦合模块个数的增加而增加。如如: int com = 0; void a( ) com = com + 2; void main( ) a( ); com = com + 5; printf( “ com

22、= %d ”, com ); com (公共数据区公共数据区)amain28 公共耦合存在的问题:公共耦合存在的问题:使软件的可理解性降低;使软件的可理解性降低;诊断软件错误困难;诊断软件错误困难;软件的可维护性差;软件的可维护性差;软件可靠性差软件可靠性差( (公共数据区及全程公共数据区及全程变量无保护措施变量无保护措施) )。F请在软件中慎用公共数据区和全请在软件中慎用公共数据区和全程变量程变量!(7)内容耦合内容耦合(Content Coupling):如果一个模块直接调用另一个模块中的数据如果一个模块直接调用另一个模块中的数据; 或者一或者一个模块直接转移到另一个模块中去(不通过正常入

23、口转个模块直接转移到另一个模块中去(不通过正常入口转到另一模块内部)到另一模块内部),就称它们之间的耦合为内容耦合。就称它们之间的耦合为内容耦合。 内容耦合往往出现在汇编语言程序设计中。内容耦合往往出现在汇编语言程序设计中。AB直接调用另一个模块直接调用另一个模块中的数据中的数据entry1 entry2 模块有多个入口模块有多个入口30如何降低模块间耦合度:如何降低模块间耦合度:尽量使用数据耦合;少用控制耦合;限制公共耦尽量使用数据耦合;少用控制耦合;限制公共耦合的范围;坚决避免使用内容耦合。合的范围;坚决避免使用内容耦合。降低接口的复杂性。降低接口的复杂性。内聚性与耦合性密切相关,同其它模

24、块具有强耦内聚性与耦合性密切相关,同其它模块具有强耦合性的模块意味者其具有弱内聚性;强内聚性模块合性的模块意味者其具有弱内聚性;强内聚性模块意味着它与其它模块间具有松散的耦合性。意味着它与其它模块间具有松散的耦合性。模块化设计的目标是:力争强内聚、弱耦合。模块化设计的目标是:力争强内聚、弱耦合。耦合性、内聚性与模块独立性的关系:耦合性与耦合性、内聚性与模块独立性的关系:耦合性与内聚性都是模块独立性的定性标准,都反映了模块内聚性都是模块独立性的定性标准,都反映了模块独立性的良好程度。但耦合性是直接的主导因素,独立性的良好程度。但耦合性是直接的主导因素,而内聚性则辅助耦合性共同对模块的独立性进行衡

25、而内聚性则辅助耦合性共同对模块的独立性进行衡量。量。(思考题)(思考题)下图是某系下图是某系学生成绩管理的一部分,学生成绩管理的一部分,(a)和和(b) 是两个不同的设计方案,你认是两个不同的设计方案,你认为哪一个设计方案较好?为什么?为哪一个设计方案较好?为什么?A(取班级成绩取班级成绩)B(取平均成绩取平均成绩或最高成绩或最高成绩)C(取个人成绩取个人成绩)平均平均最高最高平均成绩平均成绩/最高成绩最高成绩学号学号个人成绩个人成绩(a) 方案方案A(取班级成绩取班级成绩)B1(取平均成绩)取平均成绩)C(取个人成绩取个人成绩) 最高成绩最高成绩学号学号(b) 方案方案B2(取最高成绩取最高

26、成绩)平均成绩平均成绩个人成绩个人成绩学号学号个人成绩个人成绩班级班级成绩汇总成绩汇总班级班级成绩汇总成绩汇总思考题答案思考题答案答答: (b)方案较好。理由如下:方案较好。理由如下: 1. 内聚性:内聚性: (a)方案中,方案中,B 模块为逻辑内聚模块;模块为逻辑内聚模块; (b)方案中,方案中,B1模块和模块和B2模块均为功能内聚模块。模块均为功能内聚模块。 2. 耦合性:耦合性: (a)方案中,方案中,A和和B模块之间为控制耦合;模块之间为控制耦合; (b)方案中,方案中,A与与B1模块之间、模块之间、A与与B2模块之间均模块之间均为数据耦合。为数据耦合。 所以,所以, (b)方案具有高

27、内聚、低耦合的优点。方案具有高内聚、低耦合的优点。补充习题:补充习题:内聚性有哪些类型内聚性有哪些类型(按由弱到强的顺按由弱到强的顺序列举序列举)?耦合性有哪些类型耦合性有哪些类型(按由弱到强的顺按由弱到强的顺序列举序列举)?7.2 面向对象设计建模(面向对象设计建模(OOD Modeling)与传统的结构化设计一样,面向对象与传统的结构化设计一样,面向对象设计的任务是将分析阶段建立的分析设计的任务是将分析阶段建立的分析模型转变为软件设计模型。面向对象模型转变为软件设计模型。面向对象设计模型由子系统设计层、类及对象设计模型由子系统设计层、类及对象设计层、消息设计层和责任设计层等设计层、消息设计

28、层和责任设计层等4个抽象层次组成。如下图所示:个抽象层次组成。如下图所示:7.2.1 面向对象的设计模型面向对象的设计模型责任设计责任设计属性、操作、协作属性、操作、协作对象对象-行为模型行为模型对象对象-关系模型关系模型类类/对象对象模型模型使用使用实例实例消息设计消息设计类及对象设计类及对象设计子系统设计子系统设计分析模型分析模型 设计模型设计模型图图7.12 7.12 从从OOOO分析模型转换到分析模型转换到OOOO设计模型设计模型系统设计层:描述了整个系统的总体结系统设计层:描述了整个系统的总体结构,给出了各个子系统的表示;构,给出了各个子系统的表示;类及对象设计层:包含类层次关系和对

29、类及对象设计层:包含类层次关系和对每个对象的设计表示;每个对象的设计表示;消息设计层:描述对象间的消息模型,消息设计层:描述对象间的消息模型,建立了系统的外部和内部接口,使得每个建立了系统的外部和内部接口,使得每个对象能够和其协作者通信;对象能够和其协作者通信;责任设计层:包含针对每个对象的所有责任设计层:包含针对每个对象的所有属性和操作的数据结构和算法的设计。属性和操作的数据结构和算法的设计。7.2.2面向对象设计的特点面向对象设计的特点在面向对象分析和面向对象的设计之间没有明在面向对象分析和面向对象的设计之间没有明显的界限,它们都是不断迭代的过程,很难精显的界限,它们都是不断迭代的过程,很

30、难精确区分两个阶段。但是确区分两个阶段。但是OOA是一个分类活动,是一个分类活动,即分析问题领域以确定可应用的对象类以及对即分析问题领域以确定可应用的对象类以及对象关系和行为;而象关系和行为;而OOD则主要考虑则主要考虑“如何实现如何实现”的问题,其注意的焦点从问题空间转移到解空的问题,其注意的焦点从问题空间转移到解空间。间。面向对象设计也是基于抽象、信息隐蔽、功能面向对象设计也是基于抽象、信息隐蔽、功能独立和模块化等重要的软件设计概念的,但其独立和模块化等重要的软件设计概念的,但其模块化不仅仅局限于过程处理部分,而是通过模块化不仅仅局限于过程处理部分,而是通过将数据和对数据的操作封装在一起,

31、来共同完将数据和对数据的操作封装在一起,来共同完成信息和处理的双重模块化的。成信息和处理的双重模块化的。39从从OOA到到OOD逐渐扩充模型的过程逐渐扩充模型的过程 传统的结构化设计方法将设计分为传统的结构化设计方法将设计分为概要设计和详细设计两个阶段。概要设计和详细设计两个阶段。OOD方法将设计分为系统设计(高方法将设计分为系统设计(高层设计)和对象设计(低层设计)层设计)和对象设计(低层设计)两个层次,其中系统设计的主要目两个层次,其中系统设计的主要目标是表示软件体系结构,对象设计标是表示软件体系结构,对象设计着重于对象及其相互交互的描述。着重于对象及其相互交互的描述。7.3 系统设计(系

32、统设计(System Design)7.3.1 系统设计过程系统设计过程系统设计主要由以下步骤组成:系统设计主要由以下步骤组成: 划分子系统;划分子系统; 确定需要并发运行的子系统并为它们确定需要并发运行的子系统并为它们分配处理器;分配处理器; 描述子系统之间的通信;描述子系统之间的通信; 确定系统资源的管理和控制;确定系统资源的管理和控制; 确定人机交互构件;确定人机交互构件; 选择实现数据管理和任务管理的基本选择实现数据管理和任务管理的基本策略。策略。 在系统设计过程中必须定义四种重要的设计结构在系统设计过程中必须定义四种重要的设计结构(子系统):(子系统):问题域部分问题域部分直接负责实

33、现客户需求的子系统;直接负责实现客户需求的子系统;人机交互部分人机交互部分实现用户界面的子系统(包括可实现用户界面的子系统(包括可复用的复用的GUI子系统);子系统);任务管理部分任务管理部分负责控制和协调并发任务的子系负责控制和协调并发任务的子系统,任务可能被包装在一个子系统中或不同的子统,任务可能被包装在一个子系统中或不同的子系统间;系统间;数据管理部分数据管理部分负责对象的存储和检索的子系统负责对象的存储和检索的子系统。42主题层主题层结构层结构层类及对象层类及对象层属性层属性层方法层方法层问题域问题域 部分部分( (PDC) )人机交人机交互部分互部分( (HIC) )任务管任务管理部

34、分理部分( (TMC) )数据管数据管理部分理部分( (DMC) )OOD阶段建立阶段建立OOA 阶段模型阶段模型OODOOD由四个活动组成由四个活动组成7.3.2 子系统设计子系统设计 在在OOOO系统设计中,通常用子系统来描述实现客户系统设计中,通常用子系统来描述实现客户需求的组件以及实现客户需求所需要的支持环境需求的组件以及实现客户需求所需要的支持环境;可将每个子系统看成一个高层次的模块,通过;可将每个子系统看成一个高层次的模块,通过模块的外部接口与系统进行通信。模块的外部接口与系统进行通信。 系统设计的第一步是从系统设计的第一步是从OOAOOA的各个模块导出相应的各个模块导出相应的子系

35、统,这时应考虑的主要问题为:的子系统,这时应考虑的主要问题为:各个子系统所负责的客户需求;各个子系统所负责的客户需求;应将应将OOAOOA中的对象分配哪个子系统;中的对象分配哪个子系统;哪些子系统必须并发运行,由什么系统构件协调和哪些子系统必须并发运行,由什么系统构件协调和控制这些子系统的并发运行;控制这些子系统的并发运行;全局资源如何被子系统管理等。全局资源如何被子系统管理等。1 1、划分子系统、划分子系统子系统是由分析模型中的类、关系和行为映子系统是由分析模型中的类、关系和行为映射而来的,但它既不是一个对象,也不是一射而来的,但它既不是一个对象,也不是一个功能,而是类、关联、操作、事件和约

36、束个功能,而是类、关联、操作、事件和约束的内聚集合。设计子系统时除了应遵循软件的内聚集合。设计子系统时除了应遵循软件设计的基本策略(如模块化、功能独立、信设计的基本策略(如模块化、功能独立、信息隐藏等)之外,还应考虑如下原则:息隐藏等)之外,还应考虑如下原则:q 子系统中的类应拥有共同特性和目的、提子系统中的类应拥有共同特性和目的、提供相似的服务类型;供相似的服务类型;q 子系统应具有良好的接口;子系统应具有良好的接口;q 除少数除少数“通信类通信类”外,子系统中的类应只外,子系统中的类应只与该子系统中的其它类协作;与该子系统中的其它类协作;q 子系统数目不应太多。子系统数目不应太多。例如例如

37、:显像管生产监测系统显像管生产监测系统某显像管生产线监测系统的光电管采集数据的某显像管生产线监测系统的光电管采集数据的流程如下:流程如下:当一个显像管在流水线上经过光电管时,光电当一个显像管在流水线上经过光电管时,光电管就根据其形状判断是哪种规格的显像管,由管就根据其形状判断是哪种规格的显像管,由一个一个PLCPLC计数器进行累计。累计数据每计数器进行累计。累计数据每3030秒传送秒传送给工控机一次,工控机每隔半小时取出一个累给工控机一次,工控机每隔半小时取出一个累计数据保存到数据库,同时将半小时数据供大计数据保存到数据库,同时将半小时数据供大屏幕显示。为使管理人员随时了解各班生产情屏幕显示。

38、为使管理人员随时了解各班生产情况,通过班数据处理将半小时数据汇总成一个况,通过班数据处理将半小时数据汇总成一个班的班的8 8小时数据。小时数据。 显像管生产监测系统的显像管生产监测系统的CFD图。图。 翻屏翻屏 人工驱动信息人工驱动信息时钟时钟半小时半小时 半分钟半分钟 某型号累加某型号累加 物品经过物品经过 信号信号半分钟数据半分钟数据光电管光电管采集采集计数计数传送传送工控机工控机处理处理实 时 数实 时 数据显示据显示班数据班数据处理处理半小时数据半小时数据班数据班数据 例如例如:显像管生产监测系统的子系统。显像管生产监测系统的子系统。用户界面子系统用户界面子系统数据查询子系统数据查询子

39、系统展示数据展示数据()数据采集子系统数据采集子系统采集数据采集数据()基础数据维护子系统基础数据维护子系统基础资源基础资源()数据生成子系统数据生成子系统时间间隔时间间隔标识标识()482 2、处理并发操作、处理并发操作 在在OOAOOA模型中,对象模型中,对象- -行为模型可能包含存在行为模型可能包含存在于子系统或对象之间的并发事件的信息。对于子系统或对象之间的并发事件的信息。对于不是同时活动的对象或子系统,可以在同于不是同时活动的对象或子系统,可以在同一处理器硬件上实现,不需要并发处理;而一处理器硬件上实现,不需要并发处理;而对于那些同步作用于事件的并发对象或子系对于那些同步作用于事件的

40、并发对象或子系统,必须考虑同步措施。处理并发操作的方统,必须考虑同步措施。处理并发操作的方案为:案为:将并发子系统分配到不同的处理器。将并发子系统分配到不同的处理器。将并发子系统分配到相同的处理器并由系将并发子系统分配到相同的处理器并由系统提供同步控制。统提供同步控制。49 例如例如:考察显像管生产检测系统中的实时数据考察显像管生产检测系统中的实时数据的状态图如下,请标识其并发操作,并给出解的状态图如下,请标识其并发操作,并给出解决方案。决方案。20秒到秒到/翻屏翻屏生成最新数据生成最新数据/翻屏翻屏 半小时到半小时到/ 工控处理工控处理半分钟到半分钟到/传送传送空闲空闲/采集采集物品经过物品

41、经过/计数计数采集采集PLC计数计数传送传送工控处理工控处理实时翻屏实时翻屏50 从上图可发现:从上图可发现: 每隔半分钟会接到工控处理事件,触发半分钟数据每隔半分钟会接到工控处理事件,触发半分钟数据转换为半小时数据;转换为半小时数据; 大屏幕每大屏幕每20秒实时翻屏一次,它会读取实时数据;秒实时翻屏一次,它会读取实时数据; 人工触发的数据处理和日数据处理随时会发生。人工触发的数据处理和日数据处理随时会发生。 因此对实时数据对象存在并发操作:因此对实时数据对象存在并发操作: 考虑到半分钟数据的转换频繁发生,而且持续时间考虑到半分钟数据的转换频繁发生,而且持续时间较长,可采用将它分配到一个独立的

42、处理器上的方较长,可采用将它分配到一个独立的处理器上的方案;案; 对于其它并发活动,每个表示为一个独立的控制线对于其它并发活动,每个表示为一个独立的控制线程,并定义为独立的任务。程,并定义为独立的任务。513 3、描述子系统间通信、描述子系统间通信 子系统间的协作可用如下的模型描述:子系统间的协作可用如下的模型描述:客户端客户端子系统子系统服务器端服务器端子系统子系统请求请求端子系统端子系统端子系统端子系统请求请求请求请求子系统间协作的模型子系统间协作的模型 确定子系统间交互方式的步骤如下:确定子系统间交互方式的步骤如下: 列出所有可能接收到的请求,按子系统组列出所有可能接收到的请求,按子系统

43、组织这些请求,并在一个或多个合约(子系织这些请求,并在一个或多个合约(子系统间交互的方式)中定义。统间交互的方式)中定义。 对每个合约,列出完成每个请求所需的操对每个合约,列出完成每个请求所需的操作(继承的和私有的),将操作和子系统作(继承的和私有的),将操作和子系统内的特定类相关联。内的特定类相关联。 将每个合约填入如下所示的表。将每个合约填入如下所示的表。 对复杂的交互模式,可创建子系统协作图对复杂的交互模式,可创建子系统协作图,如下所示。,如下所示。 合合约约 类型类型(客户(客户/服务器服务器或端对断)或端对断)协作子协作子系统系统类类操操作作消息消息格式格式数据采集数据采集子系统子系

44、统数据生成数据生成子系统子系统数据查询数据查询子系统子系统生 成 计生 成 计算 数 据算 数 据请求请求采 集 所采 集 所缺 数 据缺 数 据请求请求生 成 数生 成 数据 报 表据 报 表请求请求544 4、资源管理构件、资源管理构件 对于系统中的共享资源(外部实体、系对于系统中的共享资源(外部实体、系统实现部件),若不进行有效管理,可统实现部件),若不进行有效管理,可能会引起冲突;每个资源应该由某能会引起冲突;每个资源应该由某“保保护者对象护者对象”拥有,保护者对象是该资源拥有,保护者对象是该资源的门卫,控制对资源的访问并协调对资的门卫,控制对资源的访问并协调对资源请求的冲突。源请求的

45、冲突。555 5、人机交互设计、人机交互设计 虽然一个好的人机交互部分不可能挽救一个虽然一个好的人机交互部分不可能挽救一个功能很差的软件功能很差的软件, , 但性能很差的人机交互部但性能很差的人机交互部分将会使一个功能很强的产品变得不可接受分将会使一个功能很强的产品变得不可接受! ! 在需求分析阶段,通过用例模型已描述了用在需求分析阶段,通过用例模型已描述了用户和系统的交互情况,其中确定了人机交互户和系统的交互情况,其中确定了人机交互的属性和外部服务;进入设计阶段应以此为的属性和外部服务;进入设计阶段应以此为基础,给出有关人机交互的所有系统成分(基础,给出有关人机交互的所有系统成分(用户如何操

46、作系统、系统如何响应命令、系用户如何操作系统、系统如何响应命令、系统显示的信息和报表格式等)。统显示的信息和报表格式等)。56 要设计一个用户满意的人机交互界面,应:要设计一个用户满意的人机交互界面,应: 分类(可按技术熟练程度、工作性质、访问权限等分类(可按技术熟练程度、工作性质、访问权限等分类)分析用户特点,设计不同界面。通常先在分分类)分析用户特点,设计不同界面。通常先在分析用户特点的基础上,确定出初步的命令系统(菜析用户特点的基础上,确定出初步的命令系统(菜单方式或按钮方式),然后再进行优化(考虑命令单方式或按钮方式),然后再进行优化(考虑命令顺序;根据外部服务之间的聚合关系组织相应的

47、命顺序;根据外部服务之间的聚合关系组织相应的命令;充分考虑人类记忆的局限性等)。令;充分考虑人类记忆的局限性等)。 增加用户界面专用的类与对象,这与所选用的图形增加用户界面专用的类与对象,这与所选用的图形界面有关。具体的处理思想是:先利用类结构图描界面有关。具体的处理思想是:先利用类结构图描述出各窗口及其分量的关系;然后为每个窗口定义述出各窗口及其分量的关系;然后为每个窗口定义菜单条、下拉菜单、弹出式菜单、相关的操作和应菜单条、下拉菜单、弹出式菜单、相关的操作和应显示的信息等内容。显示的信息等内容。 利用快速原形演示,改进界面设计。利用快速原形演示,改进界面设计。576 6、任务管理设计、任务

48、管理设计 在在OODOOD中引进任务管理部分的原因是:当中引进任务管理部分的原因是:当系统中有许多并发行为时,需要按照各个行系统中有许多并发行为时,需要按照各个行为的协调和通信关系,划分各种任务为的协调和通信关系,划分各种任务( (进程进程) ),以简化并发行为的设计和编码。,以简化并发行为的设计和编码。 设计管理并发任务对象的策略是:确定任务设计管理并发任务对象的策略是:确定任务特征(从理解任务是如何被激活开始,分析特征(从理解任务是如何被激活开始,分析任务是事件驱动的,还是时钟驱动的);定任务是事件驱动的,还是时钟驱动的);定义一个协调者任务和与之关联的对象;集成义一个协调者任务和与之关联

49、的对象;集成其它任务和协调者。其它任务和协调者。 设计任务管理部分的一般步骤和过程为:设计任务管理部分的一般步骤和过程为:识别事件驱动任务(通常完成通信工作,其工作识别事件驱动任务(通常完成通信工作,其工作流程为:处于睡眠状态,等待事件;接到事件触流程为:处于睡眠状态,等待事件;接到事件触发的中断被唤醒,接收数据并执行相应的操作;发的中断被唤醒,接收数据并执行相应的操作;重新回到睡眠状态)和时钟驱动任务(按一定时重新回到睡眠状态)和时钟驱动任务(按一定时间周期激活的任务)。间周期激活的任务)。识别关键性任务(对整个系统起重要作用的任务识别关键性任务(对整个系统起重要作用的任务、要求可靠性较高)

50、、任务优先级(以保证紧急、要求可靠性较高)、任务优先级(以保证紧急事件能在限定的时间内得到处理)以及任务管理事件能在限定的时间内得到处理)以及任务管理类(专门用于管理和协调其它任务的任务)。类(专门用于管理和协调其它任务的任务)。定义每个任务(名称、功能、优先级、协同方式定义每个任务(名称、功能、优先级、协同方式、通信方式等)。、通信方式等)。必要时应在必要时应在OODOOD中扩充有关任务的类及对象,调中扩充有关任务的类及对象,调整原有的语法成分,以适应任务定义的要求。整原有的语法成分,以适应任务定义的要求。59 对传感器任务可给出如下的描述:对传感器任务可给出如下的描述: 任务名字:任务名字

51、: 传感器读出。传感器读出。 任务描述:任务描述: 该任务在需要脉冲调幅时负责读出传感器。该任务在需要脉冲调幅时负责读出传感器。 包含:包含: 传感器,样本。传感器,样本。 任务优先级任务优先级: :中等。中等。 协调方式:协调方式:时钟驱动,时钟驱动,100ms的时间间隔。的时间间隔。 通信方式:通信方式: 从输入线(传感器)得到值,给雷达邮箱发从输入线(传感器)得到值,给雷达邮箱发送值。送值。607 7、数据管理设计、数据管理设计 应用系统都会涉及到对象数据的存储和检索应用系统都会涉及到对象数据的存储和检索问题,这通常通过数据管理构件来完成。数问题,这通常通过数据管理构件来完成。数据管理构

52、件的作用是将目标系统中依赖开发据管理构件的作用是将目标系统中依赖开发平台的数据存取部分与其它功能分离,使数平台的数据存取部分与其它功能分离,使数据管理可通过一般的数据管理系统(普通文据管理可通过一般的数据管理系统(普通文件、关系型数据库、面向对象数据库等)实件、关系型数据库、面向对象数据库等)实现。现。 数据管理构件的设计主要包括:数据管理构件的设计主要包括:定义数据格式定义数据格式设计相应的操作设计相应的操作617.3 对象设计对象设计 对象设计层次着重于对象及其相互交互的描述,在对象设计层次着重于对象及其相互交互的描述,在该层次上应创建属性数据结构和所有操作的过程的该层次上应创建属性数据结

53、构和所有操作的过程的详细规约;定义所有属性的可见性(公共的、私有详细规约;定义所有属性的可见性(公共的、私有的或保护的),同时要精化对象间的接口以定义完的或保护的),同时要精化对象间的接口以定义完整的消息模型的细节。整的消息模型的细节。 在对象设计过程中,要将分析模型转换为设计模型在对象设计过程中,要将分析模型转换为设计模型,其对应关系如下图所示。,其对应关系如下图所示。分析模型分析模型 类类 属性属性 方法方法 关系关系 行为行为 设计模型设计模型 对象对象 数据结构数据结构 算法算法 消息传递消息传递 控制控制621、对象描述、对象描述 OOD阶段的对象描述是以阶段的对象描述是以OOA阶段

54、的对象模型阶段的对象模型为基础的,它从对象间的接口(消息)入手,为基础的,它从对象间的接口(消息)入手,从实现的角度详细描述了对象的各个方面。从实现的角度详细描述了对象的各个方面。 对象的设计描述包括协议描述(为对象提供了对象的设计描述包括协议描述(为对象提供了接口,是其它对象调用该对象的基础)和实现接口,是其它对象调用该对象的基础)和实现描述(提供了对象内部的实现细节,是实现对描述(提供了对象内部的实现细节,是实现对象所必须具备的)。象所必须具备的)。、协议描述(、协议描述(protocol):通过定义对象可以):通过定义对象可以接收的每个消息和当对象接收到消息后所完成接收的每个消息和当对象

55、接收到消息后所完成的相关操作来建立对象的接口。实际上,协议的相关操作来建立对象的接口。实际上,协议描述仅仅是一组消息和对消息的注释。描述仅仅是一组消息和对消息的注释。63 例如:例如:PLC计数器(计数器(PLC_counter)是显像管)是显像管生产监测系统中数据采集子系统内的一个对生产监测系统中数据采集子系统内的一个对象,请用协议描述说明其接口。象,请用协议描述说明其接口。 因为因为PLC计数器可能接收计数器可能接收3种消息(种消息(“清零复清零复位位”消息消息Reset、“计数加计数加1”消息消息Increment和和“传送数值传送数值”消息消息Sendnum),因而可给),因而可给出如

56、下的协议描述:出如下的协议描述: MESSAGE( PLC_counter ) Reset: SETS counter number; MESSAGE( PLC_counter ) Increment: CALCULATES counter number; MESSAGE( PLC_counter ) Sendnum: SENDS counter number;2、实现描述(、实现描述(protocol):):是对对象接收到某个消息后是对对象接收到某个消息后所执行的操作的实现细节的描述,主要包括:类对象所执行的操作的实现细节的描述,主要包括:类对象的名字的定义;私有数据结构的数据项和类型的定义

57、的名字的定义;私有数据结构的数据项和类型的定义;每个操作的过程描述或指向这样的过程描述的指针;每个操作的过程描述或指向这样的过程描述的指针。 例如:对于对象例如:对于对象PLC计数器(计数器(PLC_counter)可给出如)可给出如下的实现描述:下的实现描述: 对象名:对象名: PLC_counter 类名:类名: Class PLC_counter 私有数据结构:私有数据结构:ID:string; /PLC计数器编号计数器编号 Controller:*CM; /受哪个工控机控制受哪个工控机控制 PC_ID :string; /受计数的工序编号受计数的工序编号 TC_ID :string;

58、/计数的指标计数的指标 Counter_number:integer; /计数值计数值65663、算法设计、算法设计 OOD的算法和数据结构设计与传统软件工程的算法和数据结构设计与传统软件工程的数据设计和过程设计并不完全相同,其数的数据设计和过程设计并不完全相同,其数据结构设计和算法设计应并行进行。据结构设计和算法设计应并行进行。 设计算法的常用方法是:用面向对象伪代码设计算法的常用方法是:用面向对象伪代码描述系统中每个操作的算法。其中传送消息描述系统中每个操作的算法。其中传送消息的语法表示为:接收者对象、方法、参数;的语法表示为:接收者对象、方法、参数;数据结构的表示为:数据项:数据类型。数

59、据结构的表示为:数据项:数据类型。 系统中的类可分为:系统中的类可分为: 以某种方式操纵数据的操作(加入、删除、重以某种方式操纵数据的操作(加入、删除、重格式化、选择等);格式化、选择等); 执行计算的操作;执行计算的操作; 为控制事件的出现而监控对象的操作。为控制事件的出现而监控对象的操作。67 创建了基本对象模型后,应该对其进行创建了基本对象模型后,应该对其进行优化。优化。OOD优化主要从如下几个方面进优化主要从如下几个方面进行:行: 复审对象复审对象-关系模型。以保证已实现的关系模型。以保证已实现的设计对资源使用高效而且容易实现;设计对资源使用高效而且容易实现; 优化属性数据结构和对应的

60、操作算法优化属性数据结构和对应的操作算法,以提高处理效率;,以提高处理效率; 创建新的属性,以存放导出的信息,创建新的属性,以存放导出的信息,应避免重复计算。应避免重复计算。684、领域对象设计、领域对象设计 在同一应用领域的不同应用系统中,通常会在同一应用领域的不同应用系统中,通常会存在一些共享的类存在一些共享的类/对象,它们是实现软件复对象,它们是实现软件复用的基础。用的基础。OOA阶段所建立阶段所建立的领域模型是领的领域模型是领域设计的前提,进入域设计的前提,进入OODOOD阶段应从实现的角度阶段应从实现的角度对其进行补充或修改,例如增添、合并或分对其进行补充或修改,例如增添、合并或分解

温馨提示

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

评论

0/150

提交评论