软件工程基础与实例分析第09章-面向对象的分析设计与实现_第1页
软件工程基础与实例分析第09章-面向对象的分析设计与实现_第2页
软件工程基础与实例分析第09章-面向对象的分析设计与实现_第3页
软件工程基础与实例分析第09章-面向对象的分析设计与实现_第4页
软件工程基础与实例分析第09章-面向对象的分析设计与实现_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、主要学习内容:传统方法学的缺点面向对象的基本概念面向对象分析面向对象设计面向对象实现9.1 传统方法学存在的缺点1、存在的问题生产率提高的幅度远不能满足需要。传统的软件工程方法需要的人力,物力都比较多,流程比较长,所以它的生产率的提高并不快软件重用程度很低。作为结构化软件设计,程序设计,分析技术等,都是针对问题空间提出的解决方案,而没有考虑提出一些能适用于另外一个程序的模块软件仍然很难维护个软件项目。虽然有很多方法为软件提供功能,性能的维护,但当软件运行时,仍然有很多困难,所以不得不找到原来的开发人员。软件往往不能真正满足用户需要。需求分析之后,后面的人就跟用户没关系了,直到验收测试时才请用户

2、过来,这时用户说,这段时间为什么不找我,我们单位里面有些变化,所以不能真正满足用户需要。9.2 面向对象的基本概念9.2.1 基本概念1对象 对象是系统中描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组服务组成。属性是用来描述对象静态特征的一个数据项2类 类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分9.2.1 基本概念 3类对象 类对象指的是类和类中的对象,其符号表示如图9-2所示,类分3个区域,对象用围绕着类的三个区域的虚框表示,在表示类的3个区域内,标出类对象的名称、属性及服务,

3、这是具有对象的类,是一种具体类。4消息 消息是对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入和应答等信息。5封装性 封装性是把对象的属性和服务结合成一个独立的系统单位。6继承性 继承性是指子类可以自动拥有 父类的全部属性和服务7多态性 不同层次中的类可以共享或共用一个行为(方法)的名子,但在不同层次中,每个类却可以各自按自己的需要来实现这个行为,并且得到不同的结果。8事件 事件是建立动态模型时常用的术语,是指某一时刻引发对象状态改变的控制信息。现实世界中,各对象之间相互触发,一个触发行为就称作是一个事件。9状态 状态也是建立动态模型时常用的术语,是对象所具有的属性值的一种抽象,

4、按照影响对象显著行为的性质将值集中归并到一个状态中去。10行为 行为也是建立动态模型时常用的术语,是对象要达到某种状态时所做的操作9.2.2 面向对象建模1、 对象模型对象模型是用来描述系统数据结构。主题层 通过划分主题把一个大型,复杂的对象模型分解几个不同的概念范畴。类与对象层 类实体结构层 类与对象之间的关系属性层 对象的固有数据服务层 服务或方法2.动态模型 动态模型是用来描述系统控制结构,描述对象在遇到某些事件时它的响应,意味着每个对象实际上有自已的状态,并且这个状态是可保持的事件 :引发对象状态改变的控制信息(瞬时)状态: 即对象的 attributes 所处的情形(可持续)行为:对

5、象要达到某种 status 所做的操作(耗时)3功能模型 功能模型是用来描述系统功能。要考虑整个软件系统是一个整体,具有什么样的功能。在面向对象里面,对象模型确定了发生操作的客体,动态模型确定操作什么时候发生,功能模型指出发生了什么操作,所以功能模型是操作的一个实体,由多张数据流图组成,数据流图说明数据流是如何从外部输入,经过操作和内部存储输出到外部的。9.3 面向对象分析9.3.1 面向对象分析的特点 1有利于对问题及系统责任的理解 2有利于对人员之间的交流 3对需求变化有较强的适应性 4支持软件重用9.3.2 需求陈述 需求陈述包括问题范围、功能需求、性能要求、应用环境、假设条件等五个方面

6、。如一个远程教育学院,想做一个学位查询系统,就可以发个招标公告向社会去招标,某公司想去应标,要根据招标书上的要求,写出相应的应标书,应标书上有相当一大部分内容是需求陈述,要写出关于开发出的这个学位查询系统所能具备的功能、性能、可靠性、接口和应用环境等方面的内容,同时给出当某些特殊情况存在时的解决方案等等。9.3.3 建立对象模型1确定类-&-对象(1) 列出所有候选对象。 跟据需求陈述里面的名词列出所有候选对象,这些对象可能是物理实体,也可以是人或组织或要处理的事件,也可以是对象间的活动,如上面提到的远程教育学院学位查询系统中,可以确定以下类-&-对象,分别是学生,系统,服务器,客户机,教师,

7、网络,成绩,科目,软件,类别,院,系,班级,学年,家庭住址,联系电话,及格,账户,事务,学校,学士,性别,分数,学制,信息,密码,类型,访问,校园网。(2)去粗取精。 把以上所有可能的候选对象进行抽象,找到哪个是实体,哪一个是属性。如学生,教师,院,学校等是实体,而成绩,性别,分数等是属性。2确定关联(1)收集 要收集需求陈述中涉及对象的动词短语。 关联常用描述性动词或动词词组来表示,如“服务器,客户机组成网络”,“学位录入系统设置在学校内部”等。 收集需求陈述中对象间隐含的关联 如“学位的获取由各个学年成绩决定”,“学校保管学生和老师的帐户”等。 根据问题域知识得出的关联 如 “成绩等于平时

8、成绩和卷面折合成绩之和”等。2确定关联(2)筛选 删除与已删去的对象有关的关联。 在上例中如果删除对象“网络”,则与“网络”相关联的“校园网”也删去。 删除与问题无关的或应在实现阶段考虑的关联,包括瞬时事件、三元关联和派生关联。 瞬时事件要注意关联描述的静态结构。如“学生访问服务器查学位”描述了学生和服务器进行交互周期中的一个动作,它并不是服务器与学位之间的固有关系,因此应该删去。三元关联要分解为二元关联或限定关联。如“教师输入针对成绩的事务”可以分解成“教师输入事务”和“事务修改成绩”这样两个二元关联。派生关联是去掉可用其它关联定义的冗余关联,如“学校管理帐户”的实际含义是“学校保管账户”和

9、“事务修改账户”。(3)完善 完善包括正名、分解补充和标明阶数几部分, 正名就是给出个容易理解的名字。 分解补充是将一个综合功能的事务分解为两个单一功能的事务,如将查询事务分解为远程事务和终端事务。 标明阶数就是这个对象或类跟多少个其它对象或类有关联。3划分主题关联 主题,属性都属于对象模型里面的某一个视图,划分关联一般注意两方面.一方面是按问题域将这个问题大概分为几块 另一方面是主题间的依赖和交互尽可能少。4确定属性 首先,要识别属性,要明白某个类的对象应该描述什么东西,属性不表示对象之间的关系,只表示其本质性质,一些数字性的性质,如学生具有学号、姓名、性别等属性。 另外,在确定属性时暂不考

10、虑纯用于实现的属性(即单纯的内部状态)。还有在需求陈述中与已确定的对象有关的名词、形容词可能是选择的线索。这些名词、形容词可能是属性的后选,如每个学生都有成绩,成绩这就是一个属性。5识别继承关系 一般从两方面识别继承关系,一方面是自底向上,将具有相同属性的类向上归纳出父类。一方面是自顶向下,将现有类向下细化出子类,识别出从上到下的继承的层次,这样便于在建立对象模型时的组织结构。6反复修改 在以上五个步骤之后,还要对已经得到的类-&-对象、关联、属性、结构反复进行推敲和修改,并及时与用户进行沟通,复审,以便得到更具体,准确的模型9.3.4 建立动态模型1编写脚本 一般编写脚本有以下三种情况的脚本

11、,一种是正常情况脚本,正常运行时执行的脚本程序。另一种是特殊情况脚本,在输入或输出需要取边界值时执行的脚本程序。第三种是异常情况脚本,由于用户不懂计算机程序,避免不了会在操作中出现失误,这时需要执行用户进行异常中止或取消操作的脚本。2设想用户界面 用户界面的美观程度、方便程度、易学程度、效率都是需要考虑的因素,一般这时会做几个用户界面方案,并用相关软件画出来,供用户参考,让用户确定能够令其满意的界面。3画事件跟踪图 在确定事件之后需要画出事件跟踪图。 在事件跟踪图中,一条竖线代表一个对象,每个事件用一条水平的箭头线表示,箭头方向从事件的发送对象指向接受对象。 时间从上向下递增,也就是说,画在最

12、上面的水平箭头线代表最先发生的事件,画在最下面的水平箭头线所代表的事件最晚发生。 箭头线之间的间距并没有具体含义,图中仅用箭头线在垂直方向上的相对位置表示事件发生的先后,并不表示两个事件之间的精确时间差4画状态图 状态图是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。5审查动态模型9.3.5 建立功能模型1、 画出基本系统模型图 本系统模型由若干个数据源点/终点,及一个处理框组成,这个处理框代表了系统加工、变换数据的整体功能。基本系统模型指明了目标系统的边界。由数据源点输入的数据和输出到数据终点的数据,是系统与外部世界之间的交互事件的参数2 画出

13、功能级数据流图3描述处理框功能 为每个处理框添加详细的功能描述,并形成一个说明文档9.3.6 定义服务1对象的基本服务。 1)存在服务工:指最一般的服务,即创建、变动、删除及选择等操作。 2)计算服务:一个实例需要另一个实例加工结界时,所需的服务。 3)监控服务:模型中某些部件需要快速实时处理时,所需的服务。2.对象的特殊服务3.认定消息关联4.对服务进行说明9.4 面向对象设计9.4.1 面向对象设计准则1模块化 对象被定义为模块,对象把数据结构和作用在数据上的操作封装起来构成模块,成为组成系统的基本。2抽象 抽象是抽出事物的本质、内在的特性,忽略一些无关紧要的属性。3信息隐藏 信息隐藏通过

14、对象的封装性实现,类结构分离了接口和实现,那么对于类用户来讲,属性的表示方法和操作的实现算法是隐藏的。用户只能通过公共接口访问类中的属性。4弱耦合5强内聚 在面向对象设计中,内聚可分为下述3类。 (1)服务内聚。模块是单一的,一个模块只完成一项任务或一个服务只完成一种功能。 (2)类内聚。类内聚要求类的属性和服务应该是高内聚的,而且它们应该是系统任务所必须的。一个类只有一个功能或用途,如果这个类有多个功能,通常把它分解成多个专用的类。 (3)一般特殊内聚。一般特殊结构符合领域知识的表示形式,即特殊类应该尽量地继承一般类的属性和服务,它们是通用性和特殊性的一种方式,这种结构是高内聚的。6可重用

15、1)是尽量使用已有的类(包括弄好环境提供的类库,及以往开发类似系统时创建的类)。 2)是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。9.4.2 启发规则1设计结果应该清晰易懂(1)命名一致。命名应该与专业领域中的名字一致,并且要符合人们的习惯。不同类中相似服务的名字应该相同。(2)重用协议(公共接口)。在设计中应该使用已经建立了的类协议,避免重复劳动或重复定义带来的差异,或不统一,这些协议或是其它设计人员已经建立了的类协议,也可能是类库中已有的协议。(3)减少消息连接。尽量采用已有标准的消息连接,去掉不必要的消息连接。采用统一模式建立自己需要的消息连接,也就是说

16、尽量减少消息模式的数目,增强可理解性和可使用性。(4)避免模糊定义。应该定义具有明确、有限用途的类,避免那些模糊的,不准确的类的定义。2一般特殊结构的深度应适当 一般来说,在一个中等规模(大约包含100个类)的系统中,类层次数应保持为72。3设计简单的类(1)避免包含过多的属性。(2)避免提供太多服务。一般来说,一个类提供的公共服务不要超过7个。(3)明确精练的定义。通常用几个简单的语句描述一个类的任务。(4)简化对象间的通信。4使用简单的协议 一般来说,简单消息中的参数不要超过3个,因为过多的参数会导致对象的修改复杂。5使用简单的服务 类中的服务应该设计得既简单又小,用35行源程序代码比较合

17、适。6把设计变动减至最小 随着设计方案逐渐成熟,改动也应该越来越小,这样才能设计出优良的结果9.4.3 系统分解 可以把面向对象设计模型的四大组成部分想象成整个模型的四个垂直切片。 1子系统之间的两种交互方式 (1)客户供应商关系 (2)平等伙伴关系2组织系统的两种方案(1)水平层次组织 这种组织方案把软件系统组织成一个层次系统,每层是个子系统。(2)垂直块组织 这种组织方案把软件系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务。3设计系统的拓扑结构 构成完整系统的拓扑结构有:管道状、树状、星型状。为了减少系统之间的交互次数,设计时应该采用与问题结

18、构相适应的、尽可能简单的拓扑结构。9.4.4 设计问题域子系统1.调整需求 用户需求或外部环境发生了变化; 分析员对问题域理解不透彻或缺乏领域专家帮助,以致面向对象分析模型不能完整、准确地反映用户的真实需求。2重用已有的类如果有可能重用已有的类,则重用已有类的典型过程如下。(1)选择有可能被重用的已有类,标出这些候选类中对本问题无用的属性和服务,尽量重用那些能使无用的属性和服务降到最低程度的类。(2)在被重用的已有类和问题域类之间添加归纳关系(即从被重用的已有类派生出问题域类)。(3)标出问题域类中从已有类继承来的属性和服务。(4)修改与问题域类相关的关联,必要时改为与被重用的已有类相关的关联

19、。3把问题域类组合在一起4增添一般化类以建立协议 9.4.5 设计人机交互子系统1设计人机交互子界面的准则(1)一致性(2)减少步骤(3)及时提供反馈信息(4)提供撤销命令(5)无须记忆(6)易学(7)富有吸引力2、设计人机交互子系统的策略(1)将用户分类(2)描述用户的类型、水平、使用目的、其它特征(如年龄、性别、习惯等) , 写出操作脚本(3)设计命令层次研究现有的人机交互含义和准则确精化命令层次定初始的命令层次(4)设计人机交互类9.4.6 设计任务管理子系统1、分析并发性 2、设计任务管理子系统(1)确定事件驱动型任务(2)确定时钟驱动型任务(3)确定优先任务(4)确定关键任务(5)确

20、定协调任务(6)尽量减少任务数(7)确定资源需求下述两个因素可能是使用硬件实现某些子系统的主要原因。1)现有的硬件完全能满足某些方面的需求。例如,买一块浮点运算卡比用软件实现浮点运算要容易得多。2)专用硬件比通用的CPU性能更高。例如,目前在信号处理系统中广泛使用固件实现快速付里叶变换。9.4.7 设计数据库管理子系统1选择数据存储管理模式(1)文件管理系统(2)关系数据库管理系统为多种应用提供了一致的接口。标准化语言(大多数商品化关系数据库管理系统都使用SQL语言)。(3)面向对象数据库管理系统 扩展的关系数据库管理系统是在关系数据库的基础上,增加了抽象数据类型和继承机制,此外,还增加了创建

21、及管理类和对象的通用服务。 扩展的面向对象程序设计语言,扩充了面向对象程序设计语言的语法和功能,增加了在数据库中存储和管理对象的机制。9.4.7 设计数据库管理子系统2设计数据管理子系统(1)文件系统定义第一范式表,列出每个类的属性表,把属性表规范成第一范式表的定义。为每个第一范式表定义一个文件。测量性能和需要的存储容量。修改原设计的第一范式,以满足性能和存储需求(2)关系数据库管理系统定义第三范式表,列出每个类的属性表,把属性表规范成第三范式,从而得出第三范式表的定义。为每个第三范式表定义个数据库表。测量性能和需要的存储容量。修改先前设计的第三范式,以满足性能和存储需求(3)面向对象数据库管

22、理系统扩展的关系数据库途径:使用与关系数据库管理系统相同的方法。扩展的面向对象程序设计语言途径9.4.8 设计类中的服务1确定类中应有的服务 2 设计实现服务的方法 (1)算法复杂度(2)容易理解与容易实现(3)易修改(4)选择数据结构 (5)定义内部类和内部操作9.4.9 设计关联1关联的遍历 在应用系统中,使用关联有两种可能的方式:单向遍历和双向遍历2实现单向关联 如果重数是多元的,则需要用个指针集合实现关联。其中1+所在的一方表示1个或多个,也就是说一个公司有1个或多个职员。3实现双向关联第一种方法是只用属性实现一个方向的关联,当需要反向遍历时就执行一次正向查找。第二种方法是两个方向的关

23、联都用属性实现。4链属性的实现 关联对象不属于相互关联的任何一个类,它是独立的关联类的实例工资其实就是雇用这个链,这个关系的属性,所以工资理论上应该不是雇员的属性,而是雇用关系的属性。9.4.10 设计优化1确定优先级2提高效率的几项技术(1)增加冗余关联以提高访问效率 在面向对象分析过程中,应该避免在对象模型中存在冗余的关联,因为冗余关联不仅没有增添关于问题域的任何信息,反而会降低模型的清晰程度。但是,在面向对象设计过程中,当考虑用户的访问模式,及不同类型访问之间彼此的依赖关系时就会发现,分析阶段确定的关联可能并没有构成效率最高的访问路径。(2)调整查找次序 改进了对象模型的结构,从而优化了常用的遍历之后,接下来就应该优化算法了。优化算法的一个途径是尽量缩小查找范围。 (3)保留派生属性 3调整继承关系(1)抽象与具体3调整继承关系(2)为提高继承程度而修改类定义 如果

温馨提示

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

评论

0/150

提交评论