软件工程基础与实例分析第九章面向对象的分析设计与实现

PPT
  • 阅读 200 次
  • 下载 0 次
  • 页数 46 页
  • 大小 362.666 KB
  • 2023-07-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档22.00 元 加入VIP免费下载
此文档由【精品优选】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
软件工程基础与实例分析第九章面向对象的分析设计与实现
可在后台配置第一页与第二页中间广告代码
软件工程基础与实例分析第九章面向对象的分析设计与实现
可在后台配置第二页与第三页中间广告代码
软件工程基础与实例分析第九章面向对象的分析设计与实现
可在后台配置第三页与第四页中间广告代码
软件工程基础与实例分析第九章面向对象的分析设计与实现
软件工程基础与实例分析第九章面向对象的分析设计与实现
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 46
  • 收藏
  • 违规举报
  • © 版权认领
下载文档22.00 元 加入VIP免费下载
文本内容

【文档说明】软件工程基础与实例分析第九章面向对象的分析设计与实现.pptx,共(46)页,362.666 KB,由精品优选上传

转载请保留链接:https://www.ichengzhen.cn/view-290961.html

以下为本文档部分文字说明:

第9章面向对象的分析设计与实现主要学习内容:◼传统方法学的缺点◼面向对象的基本概念◼面向对象分析◼面向对象设计◼面向对象实现9.1传统方法学存在的缺点1、存在的问题◼生产率提高的幅度远不能满足需要。传统的软件工程方法需要的人力,

物力都比较多,流程比较长,所以它的生产率的提高并不快◼软件重用程度很低。作为结构化软件设计,程序设计,分析技术等,都是针对问题空间提出的解决方案,而没有考虑提出一些能适用于另外一个程序的模块◼软件仍然很难维护个软件项目。虽然有很多方法为软件提供功能,性能的维护,但当软件运行时,仍然有很

多困难,所以不得不找到原来的开发人员。◼软件往往不能真正满足用户需要。需求分析之后,后面的人就跟用户没关系了,直到验收测试时才请用户过来,这时用户说,这段时间为什么不找我,我们单位里面有些变化,所以不能真正满足用户需要。9.2面向

对象的基本概念9.2.1基本概念1.对象对象是系统中描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组服务组成。属性是用来描述对象静态特征的一个数据项2.类类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的

抽象描述,其内部包括属性和服务两个主要部分9.2.1基本概念3.类对象类对象指的是类和类中的对象,其符号表示如图9-2所示,类分3个区域,对象用围绕着类的三个区域的虚框表示,在表示类的3个区域内,标出类对象

的名称、属性及服务,这是具有对象的类,是一种具体类。4.消息消息是对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入和应答等信息。5.封装性封装性是把对象的属性和服务结合成一个独立的系统单位。6.继承性继承性是指子类可以自动拥有父类

的全部属性和服务7.多态性不同层次中的类可以共享或共用一个行为(方法)的名子,但在不同层次中,每个类却可以各自按自己的需要来实现这个行为,并且得到不同的结果。8.事件事件是建立动态模型时常用的术语,是指某一时刻引发对象状态改变的控制信息。现实世界中,各对象之间相互触发,一个触发行为就称作是一个事件

。9.状态状态也是建立动态模型时常用的术语,是对象所具有的属性值的一种抽象,按照影响对象显著行为的性质将值集中归并到一个状态中去。10.行为行为也是建立动态模型时常用的术语,是对象要达到某种状态时所做的操作9.2.2面向对象建模1、对象模型对象模型是用来

描述系统数据结构。主题层通过划分主题把一个大型,复杂的对象模型分解几个不同的概念范畴。类与对象层类实体结构层类与对象之间的关系属性层对象的固有数据服务层服务或方法2.动态模型动态模型是用来描述系统控制结构,描述对象在遇到某些事件时它的响应,意味着每个对象实际上有自已的状态,并且这个

状态是可保持的◼事件:引发对象状态改变的控制信息(瞬时)◼状态:即对象的attributes所处的情形(可持续)◼行为:对象要达到某种status所做的操作(耗时)3.功能模型功能模型是用来描述系统功能。要考虑整个软件系统是一个整体,具有什

么样的功能。在面向对象里面,对象模型确定了发生操作的客体,动态模型确定操作什么时候发生,功能模型指出发生了什么操作,所以功能模型是操作的一个实体,由多张数据流图组成,数据流图说明数据流是如何从外部输入,经过操作和内部存储输出到外部的。9.3面向对象分析9.3.1面向对象分析的特点1.有利于

对问题及系统责任的理解2.有利于对人员之间的交流3.对需求变化有较强的适应性4.支持软件重用9.3.2需求陈述需求陈述包括问题范围、功能需求、性能要求、应用环境、假设条件等五个方面。如一个远程教育学院,想做一个学位查询系统,就可以发个招

标公告向社会去招标,某公司想去应标,要根据招标书上的要求,写出相应的应标书,应标书上有相当一大部分内容是需求陈述,要写出关于开发出的这个学位查询系统所能具备的功能、性能、可靠性、接口和应用环境等方面的内容,同时给出当某些特殊情况存在时的解决方案等等。9.3.3建立对象模型1.确定类-&-对

象(1)列出所有候选对象。跟据需求陈述里面的名词列出所有候选对象,这些对象可能是物理实体,也可以是人或组织或要处理的事件,也可以是对象间的活动,如上面提到的远程教育学院学位查询系统中,可以确定以下类-&-对象,分别是学生,系统,服务器,客户机,教师,网络,成绩,科目,软件,类别,院,系,班级,学年

,家庭住址,联系电话,及格,账户,事务,学校,学士,性别,分数,学制,信息,密码,类型,访问,校园网。(2)去粗取精。把以上所有可能的候选对象进行抽象,找到哪个是实体,哪一个是属性。如学生,教师,院,学校等是实体,而成绩,性别,分数等是属性。2.确定关联(1)收集◼要收集需求

陈述中涉及对象的动词短语。关联常用描述性动词或动词词组来表示,如“服务器,客户机组成网络”,“学位录入系统设置在学校内部”等。◼收集需求陈述中对象间隐含的关联如“学位的获取由各个学年成绩决定”,“学校保管学生和老师

的帐户”等。◼根据问题域知识得出的关联如“成绩等于平时成绩和卷面折合成绩之和”等。2.确定关联(2)筛选➢删除与已删去的对象有关的关联。在上例中如果删除对象“网络”,则与“网络”相关联的“校园网”也删去。➢删除与问题无关的或应在实现阶段考虑的关联,包括瞬时事件、三元关联和派生

关联。➢瞬时事件要注意关联描述的静态结构。如“学生访问服务器查学位”描述了学生和服务器进行交互周期中的一个动作,它并不是服务器与学位之间的固有关系,因此应该删去。➢三元关联要分解为二元关联或限定关联。如“教师输入针对成绩的事务”

可以分解成“教师输入事务”和“事务修改成绩”这样两个二元关联。➢派生关联是去掉可用其它关联定义的冗余关联,如“学校管理帐户”的实际含义是“学校保管账户”和“事务修改账户”。(3)完善完善包括正名、分解补充和标明阶数几部分,◼正名就是给出个容易理解的名字。◼

分解补充是将一个综合功能的事务分解为两个单一功能的事务,如将查询事务分解为远程事务和终端事务。◼标明阶数就是这个对象或类跟多少个其它对象或类有关联。3.划分主题关联➢主题,属性都属于对象模型里面的某一个视图,划分关

联一般注意两方面.➢一方面是按问题域将这个问题大概分为几块➢另一方面是主题间的依赖和交互尽可能少。4.确定属性◼首先,要识别属性,要明白某个类的对象应该描述什么东西,属性不表示对象之间的关系,只表示其本质

性质,一些数字性的性质,如学生具有学号、姓名、性别等属性。◼另外,在确定属性时暂不考虑纯用于实现的属性(即单纯的内部状态)。还有在需求陈述中与已确定的对象有关的名词、形容词可能是选择的线索。这些名词、形容词可能是属性的后选,

如每个学生都有成绩,成绩这就是一个属性。5.识别继承关系一般从两方面识别继承关系,一方面是自底向上,将具有相同属性的类向上归纳出父类。一方面是自顶向下,将现有类向下细化出子类,识别出从上到下的继承的层次,这样便于在建立对象模型时的组织结构。6.反复修改在以上五个步骤之后,还要对已

经得到的类-&-对象、关联、属性、结构反复进行推敲和修改,并及时与用户进行沟通,复审,以便得到更具体,准确的模型9.3.4建立动态模型1.编写脚本一般编写脚本有以下三种情况的脚本,一种是正常情况脚本,正常运行时执行的脚本程序。另

一种是特殊情况脚本,在输入或输出需要取边界值时执行的脚本程序。第三种是异常情况脚本,由于用户不懂计算机程序,避免不了会在操作中出现失误,这时需要执行用户进行异常中止或取消操作的脚本。2.设想用户界面用户界面的美观程度、方便程度、易学程度

、效率都是需要考虑的因素,一般这时会做几个用户界面方案,并用相关软件画出来,供用户参考,让用户确定能够令其满意的界面。3.画事件跟踪图◼在确定事件之后需要画出事件跟踪图。◼在事件跟踪图中,一条竖线代表一个对象,每个事件用一条水平的箭头线

表示,箭头方向从事件的发送对象指向接受对象。◼时间从上向下递增,也就是说,画在最上面的水平箭头线代表最先发生的事件,画在最下面的水平箭头线所代表的事件最晚发生。◼箭头线之间的间距并没有具体含义,图中仅用箭头线在垂直方向上的相对位

置表示事件发生的先后,并不表示两个事件之间的精确时间差4.画状态图状态图是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。5.审查动态模型9.3.5建立功能模型1、画出

基本系统模型图本系统模型由若干个数据源点/终点,及一个处理框组成,这个处理框代表了系统加工、变换数据的整体功能。基本系统模型指明了目标系统的边界。由数据源点输入的数据和输出到数据终点的数据,是系统与外部世界之间的交互事件的参数2.画出功能级数据流图3.描述处理框功能为

每个处理框添加详细的功能描述,并形成一个说明文档9.3.6定义服务1.对象的基本服务。1)存在服务工:指最一般的服务,即创建、变动、删除及选择等操作。2)计算服务:一个实例需要另一个实例加工结界时,所需的服务。3)监控

服务:模型中某些部件需要快速实时处理时,所需的服务。2.对象的特殊服务3.认定消息关联4.对服务进行说明9.4面向对象设计9.4.1面向对象设计准则1.模块化对象被定义为模块,对象把数据结构和作用在数据上的操作封装起来构成模块,成为组成系统的基本。2.抽

象抽象是抽出事物的本质、内在的特性,忽略一些无关紧要的属性。3.信息隐藏信息隐藏通过对象的封装性实现,类结构分离了接口和实现,那么对于类用户来讲,属性的表示方法和操作的实现算法是隐藏的。用户只能通过公共接口访问类中的属性。4.弱耦合5.强内聚在面向对象设计

中,内聚可分为下述3类。(1)服务内聚。模块是单一的,一个模块只完成一项任务或一个服务只完成一种功能。(2)类内聚。类内聚要求类的属性和服务应该是高内聚的,而且它们应该是系统任务所必须的。一个类只有一个功能或用途,如果这个类有多个功能,通常把它分解成多个专用的类

。(3)一般——特殊内聚。一般——特殊结构符合领域知识的表示形式,即特殊类应该尽量地继承一般类的属性和服务,它们是通用性和特殊性的一种方式,这种结构是高内聚的。6.可重用1)是尽量使用已有的类(包括弄好环境提供的类库,及以往开发类似系统时创建的类)。2)是如果确实需要创建新类,则在设计这些新类

的协议时,应该考虑将来的可重复使用性。9.4.2启发规则1.设计结果应该清晰易懂(1)命名一致。命名应该与专业领域中的名字一致,并且要符合人们的习惯。不同类中相似服务的名字应该相同。(2)重用协议(公共接口)。在设计中应该使用已经建立了的类协议,避免重复劳动或重复定义

带来的差异,或不统一,这些协议或是其它设计人员已经建立了的类协议,也可能是类库中已有的协议。(3)减少消息连接。尽量采用已有标准的消息连接,去掉不必要的消息连接。采用统一模式建立自己需要的消息连接,也就是说尽量减少消息模式的数目,增强可

理解性和可使用性。(4)避免模糊定义。应该定义具有明确、有限用途的类,避免那些模糊的,不准确的类的定义。2.一般——特殊结构的深度应适当一般来说,在一个中等规模(大约包含100个类)的系统中,类层次数应保持为7±2

。3.设计简单的类(1)避免包含过多的属性。。(2)避免提供太多服务。一般来说,一个类提供的公共服务不要超过7个。(3)明确精练的定义。通常用几个简单的语句描述一个类的任务。(4)简化对象间的通信。4.使用简单的协议一般来说,简单消息中的参数不要超过3个,因为过多

的参数会导致对象的修改复杂。5.使用简单的服务类中的服务应该设计得既简单又小,用3~5行源程序代码比较合适。6.把设计变动减至最小随着设计方案逐渐成熟,改动也应该越来越小,这样才能设计出优良的结果9.4.3系统分解可以把面向对象设计模型的四大组成部分想象成整个模型的四个垂直切片。1.子系

统之间的两种交互方式(1)客户——供应商关系(2)平等伙伴关系2.组织系统的两种方案(1)水平层次组织这种组织方案把软件系统组织成一个层次系统,每层是—个子系统。(2)垂直块组织这种组织方案把软件系统垂

直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务。3.设计系统的拓扑结构构成完整系统的拓扑结构有:管道状、树状、星型状。为了减少系统之间的交互次数,设计时应该采用与问题结构相适应的、尽可能简单的拓扑结构

。9.4.4设计问题域子系统1.调整需求◼用户需求或外部环境发生了变化;◼分析员对问题域理解不透彻或缺乏领域专家帮助,以致面向对象分析模型不能完整、准确地反映用户的真实需求。2.重用已有的类如果有可能重用已有的类,则重用已有类的典型

过程如下。(1)选择有可能被重用的已有类,标出这些候选类中对本问题无用的属性和服务,尽量重用那些能使无用的属性和服务降到最低程度的类。(2)在被重用的已有类和问题域类之间添加归纳关系(即从被重用的已有类派生出问题域类)。(3

)标出问题域类中从已有类继承来的属性和服务。(4)修改与问题域类相关的关联,必要时改为与被重用的已有类相关的关联。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)确定协调

任务◼(6)尽量减少任务数◼(7)确定资源需求下述两个因素可能是使用硬件实现某些子系统的主要原因。1)现有的硬件完全能满足某些方面的需求。例如,买一块浮点运算卡比用软件实现浮点运算要容易得多。2)专用硬件比通用的CPU性能更高。例如,目前在信号处理系

统中广泛使用固件实现快速付里叶变换。9.4.7设计数据库管理子系统1.选择数据存储管理模式(1)文件管理系统(2)关系数据库管理系统◼为多种应用提供了一致的接口。◼标准化语言(大多数商品化关系数据库管理系统都使用SQL语言)。(3)面向对象数据库管理系统◼扩展的关

系数据库管理系统是在关系数据库的基础上,增加了抽象数据类型和继承机制,此外,还增加了创建及管理类和对象的通用服务。◼扩展的面向对象程序设计语言,扩充了面向对象程序设计语言的语法和功能,增加了在数据库中存储和管理对象的机制。9.4.7设计数据库管理子系统2.设计数据管理子系统(1)文件系

统◼定义第一范式表,列出每个类的属性表,把属性表规范成第一范式表的定义。◼为每个第一范式表定义一个文件。◼测量性能和需要的存储容量。◼修改原设计的第一范式,以满足性能和存储需求(2)关系数据库管理系统◼定义第三范式表,列出每个类的属性表,把属性表规范成第三范式,从而得出第三范式表的定义。◼为每个

第三范式表定义—个数据库表。◼测量性能和需要的存储容量。◼修改先前设计的第三范式,以满足性能和存储需求(3)面向对象数据库管理系统➢扩展的关系数据库途径:使用与关系数据库管理系统相同的方法。➢扩展的面向对象程序设计语言途径9.4.8设计类中的服务1

.确定类中应有的服务2.设计实现服务的方法(1)算法复杂度(2)容易理解与容易实现(3)易修改(4)选择数据结构(5)定义内部类和内部操作9.4.9设计关联1.关联的遍历在应用系统中,使用关联有两种可能的方式:单向遍历和双向遍历2.实现单向关联如果重数是多元的,则

需要用—个指针集合实现关联。其中1+所在的一方表示1个或多个,也就是说一个公司有1个或多个职员。3.实现双向关联◼第一种方法是只用属性实现一个方向的关联,当需要反向遍历时就执行一次正向查找。◼第二种方法是两个方向的关

联都用属性实现。4.链属性的实现关联对象不属于相互关联的任何一个类,它是独立的关联类的实例工资其实就是雇用这个链,这个关系的属性,所以工资理论上应该不是雇员的属性,而是雇用关系的属性。9.4.10设计优化1.确定优先级2.提高效率的几项技术(1)增加冗余关联以提高

访问效率在面向对象分析过程中,应该避免在对象模型中存在冗余的关联,因为冗余关联不仅没有增添关于问题域的任何信息,反而会降低模型的清晰程度。但是,在面向对象设计过程中,当考虑用户的访问模式,及不同类型访问之

间彼此的依赖关系时就会发现,分析阶段确定的关联可能并没有构成效率最高的访问路径。(2)调整查找次序改进了对象模型的结构,从而优化了常用的遍历之后,接下来就应该优化算法了。优化算法的一个途径是尽量缩小查找范围。(3)保留派生属性3.调整继

承关系(1)抽象与具体3.调整继承关系(2)为提高继承程度而修改类定义◼如果在一组相似的类中存在公共的属性和公共的行为,则可以把这些公共的属性和行为抽取出来放在一个共同的祖先类中,供其子类继承,更常见的情况是,各个现有类中的属性和行为(操作),虽然相似却并不完全相同。在这种情况

下需要对类的定义稍加修改,才能定义一个基类供其子类从中继承需要的属性或行为。◼有时抽象出一个基类之后,在系统中暂时只有一个子类能从它继承属性和行为,显然,在当前情况下抽象出这个基类并没有获得共享的好处。但是,这样做通常仍然是值得的,因为,将来可能重用这个基类。(3)利

用委托实现行为共享仅当存在真实的一般——特殊关系(即子类确实是父类的—种特殊形式)时,利用继承机制实现行为共享才是合理的。9.5面向对象实现9.5.1程序设计语言1.面向对象的语言与非面向对象的语言(1)一致的表示方法(2)可重用性(3)可维护性2.

面向对象语言的技术特点(1)支持类与对象概念的机制(2)实现整体——部分结构的机制(3)实现—般——特殊结构的机制(4)实现属性和服务的机制(5)类型检查(6)类库(7)效率(8)持久保存对象(9)参数化类(10)开发环境3.选择面向对象语

言(1)将来能否占主导地位根据目前占有的市场份额,以及专业书刊和学术会议上所进行的分析、评价,人们往往能够对未来哪种面向对象语言将占据主导地位做出预测,但是,最终决定选用哪种面向对象语言的实际出素,往往是诸如成本

之类的经济因素而不是技术出素。(2)可重用性采用面向对象方法开发软件的基本目的和主要优点,是通过重用提高软件生产率。应该优先选用能够最完整、最准确地表达问题域语义的面向对象语言。(3)类库和开发环境决定可重用性的因素,不仅仅是面向对象程序语言本身,开

发环境和类库也是非常重要的因素。事实上,语言、开发环境和类库这三个因素综合起来,共同决定了可重用性。(4)其它因素9.5.2设计风格1、提高可重用性◼提高方法的内聚◼减少方法的规模保持方法的一致性◼把策略与现实分开2

、提高可扩充性◼封装实现策略◼不要用一个方法遍历多条关联链要用多种方法◼避免使用多分支语句◼精心确定共有方法这样可以有抽象类出来3、提高健壮性◼预防用户的操作错误◼检查参数的合法性◼不要预先确定限制条件◼先测试后优化

精品优选
精品优选
该用户很懒,什么也没有留下。
  • 文档 34925
  • 被下载 0
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?