《面向对象软件工程的概念.pptx》由会员分享,可在线阅读,更多相关《面向对象软件工程的概念.pptx(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、17.1传统软件开发方法的局限性 传统的软件工具、软件技术和抽象层次越来越难以适应大规模复杂软件系统的开发特点。软件能力问题已经成为制约软件发展的因素。软件工程自70年代以来,有力的推动了软件能力的解决。自顶向下的分析与设计的方法、软件项目的工程化管理、软件工具和开发环境、软件质量保证等都对软件的发展起了非常重要的作用。传统的软件开发方法在当时的软件工程中起了主导作用,随着系统复杂性、多变性增强,传统方法的缺陷就显露了出来:(1)面向过程为主。系统围绕着由计算机来实现功能的复杂过程而建立,在分析和解决问题时与人们对现实世界的认识有一定差距。第1页/共59页2 (2)软件结构稳定性差。需求分析阶
2、段重点是功能模型,难以彻底明确全部需求。设计阶段的软件体系结构是基于系统功能建立的。每个模块完成一个基本功能,多个模块的组合完成一个整体功能。一个模块的变动可能会影响到多个模块。用户的需求大多针对功能,功能的变化会引起体系结构的变化,不利于系统的维护。(3)软件开发的抽象力度小。解决问题的类型一般用于“输入-处理-输出”为核心的数据处理系统,不适应于复杂的实时、交互、事件驱动、分布式等新型应用的系统开发。(4)软件重用未能得到很好的解决。传统的方法一般从“零”开始开发软件,数据与操作作为相互分离的实体来考虑,使软件的可复用性差。重用的实施仅仅是公用模块的调用。面向对象的封装性、继承性、多态性等
3、特性支持软件重用且重用的粒度大。软件的重用导致更快地、高质量地开发软件,为软件工业化生产奠定基础。第2页/共59页3传统方法数据与过程是分离的过程1 1输入输入输出输出过程2 2过程3 3数据实体属于该对象的数据对象处理数据的方法消息消息消息消息对象把数据和处理数据的方法封状成一个单元对象把数据和处理数据的方法封状成一个单元第3页/共59页4传统方法与面向对象方法的比较传统方法与面向对象方法的比较面向对象方法面向对象方法面向对象方法系统是交互对象的集合系统是交互对象的集合系统是交互对象的集合对象与人或其它对象交互对象与人或其它对象交互对象与人或其它对象交互对象发送与响应消息对象发送与响应消息对
4、象发送与响应消息传统方法传统方法系统是过程的集合系统是过程的集合过程与数据实体交互过程与数据实体交互过程接受输入并产生输出过程接受输入并产生输出第4页/共59页57.2 面向对象的过程模型1、演化/并行模型(p402)是Booch等人在90年代初建议的。该模型与第1章介绍的螺旋模型、增量模型相似。但强调:(1)对OO系统的分析和设计建模不在相同的抽象层次上进行。(2)分析和设计可以并发地应用到独立的系统构件。第5页/共59页6 该模型每次迭代都要计划、工程和评估。每个计划都要调整进度以适应和本次迭代相关的变化。早期阶段迭代进行的分析与设计工作为了分离出OO模型中的所有重要元素;当工程工作不断进
5、展时,产生软件的增量版本;在评估阶段对每个增量的评估其反馈将影响下一次计划活动及后续增量。2、RUP 98年6月推出,该过程强调了开发方法的统一、建模语言的统一、研究成果的统一。该过程是基于构件的,即所构造的系统是由软件构件通过明确定义的接口相互连接所建造起来的。它使用UML来制定软件系统的所有蓝图。RUP的主要特点:(1)用例驱动 用例作为系统分析、设计、实现和测试的基本输入。第6页/共59页7 即用例不只是一种确定系统需求的工具,它还能驱动系统的设计、实现和测试的进行。基于用例模型,开发人员可以创建一系列实现这些用例的设计模型和实现模型。开发人员可以审查每个后续建立的模型是否与用例模型一致
6、。测试人员测试实现以确定实现模型的构件是否实现了用例。所以用例启动了开发过程,还使开发过程结合为一体。开发过程是沿着一系列从用例得到的工作流前进的。第7页/共59页8 下图显示了用例模型与其他模型之间的相关性:用例模型由建立分析模型为系统描述一系列类由设计设计模型为系统定义一系列子系统和界面由实现实现模型将类映射到构件由分配测试模型由验证验证系统是否提供了用例模型中描述的功能配置模型定义软件分布第8页/共59页9 (2)以构架(Architecture)为中心 软件系统的构架从不同角度描述了即将构造的系统,它刻画了系统的整体设计,去掉了细节部分,突出了系统的重要特征,包含了系统中最重要的静态结
7、构和动态行为。构架是根据应用领域的需要逐渐发展起来的,并在用例中得到反映。每种产品都具有功能和表现形式,功能与用例对应,表现形式与构架对应。用例与构架是相互影响的,用例在实现时必须符合于构架,构架必须预留空间以实现现在或将来所有需要的用例。第9页/共59页103、迭代与增量的过程 迭代指工作流中的步骤,增量指产品中增加的部分。迭代过程要处理一组用例,这组用例合起来能扩展所开发产品的可用性,后续的迭代过程建立在前一次迭代过程末期所开发的产品上。构架提供了一种结构来指导迭代过程中的工作,用例则确定了目标并驱动每次迭代的工作。三条腿的凳子!4、基于构件 统一过程所构造的软件系统,是由软件构件通过明确
8、定义的接口相互连接所建造起来的。5、使用UML 统一过程使用UML来制定软件系统的所有蓝图,UML是整个统一过程的一个完整部分,他们是共同发展起来的,它强调创建和维护模型。第10页/共59页11 6、过程可剪裁 用统一过程开发软件时,各阶段应该有多长?各个阶段迭代多少次是合适的?候选构架可以在哪一点完全建立起来?这些问题的答案取决于系统的规模、项目的性质、开发组织的领域经验,甚至包括相关人员有效配合程度。总之,统一过程是一个框架,可以根据具体情况加以裁剪,以此来适应各种各样的开发过程。第11页/共59页127.3 面向对象的概念 面向对象(Object Oriented,简称OO)的概念起源于
9、20世纪60年代中期的Simula 67。80年代初,Smalltalk语言及其程序设计环境的出现成为面向对象技术发展的一个重要里程碑。80年代中期硬件的发展使C到C+过渡平滑,推出了相应工具及面向对象集成环境,使OOP模式进入主流。80年代中后期,面向对象分析与设计的研究开始发展。进入90年代,面向对象软件工程成了许多软件产品的建造笵型。(1)对象(object)是现实世界中个体或事物的抽象表示。封装了其属性及相关的操作。属性表示对象的性质,属性值规定了对象所有可能的状态。对象的操作指出了该对象具有的行为并提供了对外的服务。第12页/共59页13 (2)类(class)是具有相同属性和相同操
10、作的对象的抽象。通常用类名、类的属性、类的操作三方面的内容来定意一个类。一个具体对象是类的一个实例。(3)消息(message)是一个对象发送给另一个对象的操作请求。消息一般由三部分组成:对象名、消息名、参数。消息传递是对象与外部世界相互通信的唯一途径。(4)方法(method)是对象操作的实现,描述了对象中操作的算法和响应消息的方式。第13页/共59页14(5 5)继承(inheritance)(inheritance)是子类自动的共享其父类中定义的属性和操作的机制,该机制构成了类的层次结构。较高层的父类称为基类、超类、一般类。子类称为派生类、特殊类。子类除了继承父类的特征,还可有自己的特征
11、。继承有传递性,子类能继承上层的全部特征。继承性使得相似的对象可以共享程序代码和数据结构,从而简化了创建类及对象的工作量,基类解决一般性问题,派生类解决特殊问题,提高了软件的可重用性。继承性还使得软件便于维护,当需要扩充软件原有功能时,从要修改的类中派生出一个子类,在该子类中添加新的代码。第14页/共59页15(6)多态(polymorphism)指在类的不同层次上可以使用相同的操作名。同一操作名可有不同的实现方式,运行时可动态地选择哪一个算法。多态性增加了软件的灵活性,可扩充性,通用功能的操作放在高层,不同地实现这一功能的行为放在低层,以实现不同的相应。第15页/共59页167.4 几种面向
12、对象方法 20世纪80年代以来,出现了几十种面向对象软件开发方法。每一种都有自己的符号体系和开发过程,都支持以下基本活动:标识类及对象 描述类及对象之间的关系 定义类的属性和操作 1、Booch方法 Booch是面向对象方法最早的提出者之一,提出了面向对象软件工程的概念。提出了“微开发过程”和“宏开发过程”的思想。第16页/共59页17 微开发过程:定义一组分析任务,包括标识类和对象以及类和对象的语义、定义类和对象间的关系、描述类和对象的动态行为。宏开发过程:将微过程反复应用,并包含了体系结构设计的计划活动:将相似的对象聚集到独立的模块;描述对象管理、内存管理、错误处理等其它功能的实施;可使用
13、原型对上述任务进行精化;将同时执行的进程分配到不同的处理机。该方法提出建立以下模型:类图、对象图、状态转移图、时序图、模块图、进程图。第17页/共59页182、Coad/Yourdon方法 著名的OOA/OOD方法,也是最早的面向对象的分析与设计方法之一。简单、易学。OOA阶段的任务:标识类及对象 定义结构(一般特殊结构、整体部分结构)划分主题 定义属性及对象间的实例连接 定义服务及对象间的消息连接 上述任务迭代进行,产生5个层次的问题域模型(主题层、类及对象层、结构层、属性层、服务层)第18页/共59页19 OOD阶段的活动:问题域部分 人机交互部分 任务管理部分 数据管理部分 3、OMT方
14、法 Rumbaugh等人提出的对象建模技术(Object Model Technology,OMT),该方法强调了三种模型,并将软件开发过程划分为以下几个阶段:(1)系统分析 问题描述 建立对象模型 产品:对象模型对象图数据字典第19页/共59页20 建立动态模型 产品:动态模型状态图事件跟踪图 建立功能模型 产品:功能模型数据流图约束 (2)系统设计 将系统分解为各个子系统 确定问题中固有的并发性 将各子系统分配给处理器 数据存储管理 全局资源管理 选择软件控制机制 边界条件处理 第20页/共59页21 (3)对象设计 对分析模型细化:将三种模型结合起来以获得对象类上的操作。如功能模型中的加
15、工,动态模型中对应一个事件的活动。设计实现操作的算法 优化数据访问路径 实现系统设计中的控制机制 为提高继承而调整类结构 设计对象之间的关联 将类和关联集成到模块中 第21页/共59页22 4、Jacobson方法 也称OOSE方法。最大特点是强调使用实例(Use-Case),每一个用例就是一个使用系统的方式,用例的执行将引发执行一系列与行为相关的事务。该方法将用例贯穿于整个开发阶段,并在用例描述中引入了角色或参与者(Actor)的概念。角色指使用系统的人以及与系统相互作用的软硬件环境。该方法还将对象区分为实体对象(业务对象)、接口对象(界面对象)和控制对象。需求分析阶段活动:定义潜在的角色、
16、识别问题域中的对象和关系、基于需求规格说明和角色的需要描述用例。设计阶段的活动:从用例的描述中发现与设计有关的对象,并描述其属性、行为和关联。同时把所有用例的行为分派给每个对象。第22页/共59页237.5 统一建模语言UML UML(Unified Modeling Language)产生于90年代中期。它不仅统一了Booch、OMT和OOSE方法中的概念和表示法,而且对其作了进一步扩展,最终成为在面向对象技术领域占主导地位的、并被大众所接受的标准建模语言。1、UML概述 UML的发展历程 (下图)UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行可视化建模。UML不
17、是一个开发过程,也不是一个方法,但允许任何一种开发过程和面向对象方法使用它。第23页/共59页24Booch93OMT-2UML 0.8UML 0.9&0.91UML 1.0UML 1.1UML同行专家意见OMG认证10/9510/96&9/96OMG审核,1/97OMG修正,9/97OMG采纳为标准,11/97UML 1.3UML2.02001年重要修改OOSEUML开发历程第24页/共59页252 2、UMLUML中的模型视图 UML有以下主要模型元素,构成了UML中的各种模型视图:第25页/共59页26 用户模型视图 用例图:从用户的角度描述系统能提供哪些功能以及功能 的使用者。结构模型
18、视图:类图:描述系统的静态结构;对 象图:描述系统在某个时刻的静态结构;包图:将类分组成更高层次的静态结构。行为模型试图 顺序图:按时间顺序描述系统元素之间的交互;协作图:从时间和空间的顺序描述系统元素之间的交互;状态图:描述系统元素对事件的响应引起的状态转换;活动图:描述系统元素的活动。实现模型视图 构件图:描述实现系统的元素的组织结构;配置图:描述环境元素的配置,并把实现系统的元素映射 到配置上。第26页/共59页27(1)(1)用例图 用例:根据Jacobson的定义,用例规定了一个动作序列,系统执行这些动作并产生出对于特定参与者可见的有价值的结果。参与者 可以是人、组织、硬件设备或外部
19、系统。用例图用于展示参与者与系统提供的用例之间的连接(通信)关系。仅仅从参与者使用系统的角度描述系统,不反映内部的处理方式。因此用例图定义的是系统的功能需求。下图是某保险业务的用例图。第27页/共59页28签定一份签定一份保险单保险单客户保险销售人员销售统计销售统计客户统计客户统计某保险业务的用例图第28页/共59页29某金融贸易系统用例图设置边界风险分析交易估价进行交易超越边界更新帐目评价交易人员交易经理计帐系统销售员extendextendincludeincludeincludeinclude第29页/共59页30 其中:include、extend为用例图中可用的构造型元素,表示“风险
20、分析”和“交易估价”都包含有公共的“评价”动作,因此把“评价”作为一个独立的用例。而“超越边界”用例是“进行交易”用例的扩展,指交易时对某个特定用户规定了最大贸易量,不能执行一般的常规动作。因此,当描述一般行为时有例外、任选或异常处理时,采用extend;当在两个或多个用例中出现重复描述(有共用行为)而又想避免重复时,采用include。(2)类图 用来描述系统中类和类之间的关系,是系统的静态结构。类图中还描述了类的属性、操作、以及对模型中各种成分的约束。类图包含有类、关联和关系等模型元素。见下图:第30页/共59页31类名属性操作类的完整表示类名类的简单表示类1类2角色角色关联名 关联表示类
21、之间的语义联系(是运行时实例之间的关系)。角色表示该类在这个关联中的作用。关联中可以有重数,重数指一个角色可以有多少个对象来扮演。类的表示:类的关联(association):第31页/共59页32公司董事会办公室分配员工0.1*人员董事会成员0,3.8*董事会同时省略关联名和角色名,默认关联名是has(有),省略重数默认1.1。每一个员工可能没有或者只有一个办公室每一个董事会没有或者有38个董事会成员(有角色名,可以省略关联名)第32页/共59页33在一些情况下关联可能需要记录一些信息,但这些信息不能放在任何一个类中,可引入一个关联类记录这些信息。如下图:学生*选修 *课程学生*课程选修成绩
22、学生*选修 *成绩课程一个多对多关联。“成绩”属性不能放在任何一方(每个学生只有一个成绩或每门课程只有一个成绩)创建一个关联类来保存成绩与带有关联类的多对多关联等价的两个一对多关联的图第33页/共59页34整体类部分类整体类部分类项目人员1 *建筑物建筑物楼房类的聚合类的强聚合(组合)*类的聚合(aggregation):是表示“整体-部分”的特殊关联。组合(composition)是一种强类型的聚合,整体类和部分类共存亡,如果整体类被撤销,部分类也不存在。部分类的存在只是为整体类服务。第34页/共59页35一般类特殊类人员教师学生 由一个超类和几个直接子类构成的结构通常称为泛化。类的这种关系
23、也称为一般-特殊关系或继承关系,将现实世界实体的共同特性抽象为一般类,通过增加独有的特性而成为各种特殊类。如图所示:类的泛化(generalization):下图是一个网上售货系统的部分类图。其中用括起来的内容是约束条件。UML提供了对类图中的基本成分可进行限制与约束的手段。第35页/共59页36销售代表 0.1定货nameaddress顾客creditRating():String产品雇员1DateReceivedisPrepaidnumber:Stringprice:Money协作顾客contactNamecreditRatingcreditLimitcreditCard#个人顾客cred
24、itRating()=“poor”定货作业线dispatch()close()remind()billForMonth()Quantity:Integerprice:MoneyisSatisfied:Boolean1*1物品第36页/共59页37(3)对象图 对象图是类的实例图,给出了存在于程序执行过程中某个特定点的对象与链接的配置示例。对象名:类名属性对象名:类名对象1对象2链名对象的三种描述方式链的表示教师讲授课程类图李伟编号3658职称教授软件工程编号401学分3数据库编号301学分3对象图第37页/共59页38 其中,链是类图中关联的实例,类图中关联表示两个类之间可能存在的所有链接,而
25、对象图中的链上不附加重数。对象图中也不可能包含泛化。对象图不像类图那样具有重要地位,通常用来实例化一个复杂的类图以分析特定的场景。对象图也常用在协作图中,反映一组对象之间的动态协作关系。第38页/共59页39(4)包图 包是将类分组成更高层次的单位。包图用以描述包中存在的类以及包与包之间的依赖关系和泛化关系。包的内容可以是类的列表、类图、或另一个包图。依赖关系用虚线箭头表示。保险单填写界面内部系统保险单客户数据库界面Oracle界面Sybase界面某保险信息管理系统的包图第39页/共59页40(5)状态图 状态图描述类的对象在生命周期内所有可能的状态以及事件发生时状态的转移(transitio
26、n)情况。一个转移可以有一个与之相连的动作(action),这个动作指明了状态转移时应该作些什么。状态图是类图的补充。不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。第40页/共59页41在一楼上升空闲下降到达一层到达楼层升楼层升楼层电梯运行的状态图开始上下降楼层在大楼一层到达楼层上升楼层超时移到一层第41页/共59页42初态终态状态名do/活动名中间态行驶向前向后向前向后低速高速行驶或关系子状态(只取一种)与关系子状态(某时刻可同时到达多个子状态)UML中的状态表示 转移状态1do/活动1状态2do/活动2事件条件/动作其中:状态内部的“活动”不引
27、起状态转移;箭头上的“动作”指状态转移时要执行的动作。第42页/共59页43 (6)顺序图 用来描述对象之间的动态协作关系以及协作过程中的先后次序。它常用来描述一个用例的行为,显示该用例中所涉及到的对象以及对象之间交互的时间顺序。每个对象图符下面的垂直虚线表示对象的生命线,每条对象生命线上的细长矩形表示该对象正处于活动时期,细长矩形底部的“”表示该对象被删除。对象生命线之间的带箭头连线表示对象之间的交互与通信,一般指消息传递并具有以下类型:简单消息,不考虑通信细节。同步消息,必须等待消息的返回。异步消息,不等待消息返回,继续执行。返回消息,同步消息激活的动作返回到发 送对象的消息。消息泛指操作
28、调用、信号传送、事件唤醒等。第43页/共59页44:呼叫者:交换机:远程交换机:受话者拿起话筒响拨号声拨号码.接通信号响铃铃响停止信号拿起话筒铃响停止10 deabcb-a1se-d5sc-b10s路由选择接电话的顺序图第44页/共59页45:计算机:打印服务器:打印机:队列打印()打印机空闲打印()打印机忙存储()打印结束()打印结束()用例“打印程序”的顺序图第45页/共59页46(7)活动图 活动图可有不同的抽象级别。既可以在企业业务模型中描述业务工作流,又可以描述满足一个用例要求所进行的活动及相应约束关系,还可以描述每个活动的具体操作步骤(相当于流程图)。主要图形元素:泳道 活动图中用
29、垂直分隔线划分成的纵向区域,说 明由谁来完成该泳道中的任务。起点 活动图中所有活动的开始,用 表示。终点 活动图中所有活动的结束,用 表示。可有几个终点。活动 完成的任务或操作步骤,用圆角矩形表示。决策 是特殊的活动,表示活动流程中的判断,用菱形表示。第46页/共59页47 同步 表示活动之间的同步或并发,表示引入的信息 流同时到达,引出的信息流同时被触发。同步 用一条粗线表示,称为同步线。业务对象 对象可以作为活动的输入或输出,即活动 会改变对象的状态。用虚线箭头表示数据 传送的方向。转移 是活动之间的关系,由隐含事件引起活动转 移。转移连接各个活动及各个特殊活动(起 点、终点、决策、同步线
30、等)。转移用带箭头 的线表示,其上不标注事件和动作,可标注 转移的条件。下面是两个活动图示例:第47页/共59页48顾客售货库房请求服务支付收货开订单供货交货顾客购物的活动图第48页/共59页49采购部经理副总经理协商采购协议签定采购协议草案采购协议草案(待审)审批通过否生成正式采购协议通知供货商采购协议草案(未通过)正式采购协议(通过)通过未通过采购协议活动图第49页/共59页50(8)协作图 同对象图的画法一样,但强调对象之间的交互关系。不像顺序图那样侧重于某种特定情况下对象之间交互的时序。协作图中用箭头表示消息,并注明消息名称和可选参数。箭头附在有协作关系的每对对象的通信链上。在每个消息
31、前加数字标明消息发送的顺序。下图是打印程序的协作图:第50页/共59页511.21.2:打印机忙 保存打印文件:队列:计算机 1.31.3:打印机空闲 打印文件 :打印机:打印服务器1 1:打印文件协作图举例第51页/共59页52(9)构件图 构件可以是源代码文件、二进制文件或可执行文件。构件图用来说明这些构件之间在编译、链接或执行时的依赖关系,利用这种依赖关系能容易的分析一个构件的变化对其他构件的影响。以下是一个某教学管理的构件图,该图例中:表示构件接口,对外提供可见的操作和属性表示依赖关系属性为.dll的构件为动态链接库中的构件。第52页/共59页53 教学管理.exe 课程课程管理.dl
32、l成绩管理.dll人事管理.dll开设课程选课注册教师学生构件接口某一教学管理构件图某一教学管理构件图第53页/共59页54(10)配置图 用来描述系统中硬件设备的配置、通信以及在各硬件设备上软构件和对象的配置。能清楚地展示分布式系统运行时的体系结构。在该图中硬件设备称为结点,之间的连接为通信路径,连接上要标明通信协议或网络类型。下图是银行ATM系统的配置图。第54页/共59页55 局域网局域网InternetATMATM客户机银行储户ATMATM应用服务器ATMATM数据服务器ATM系统配置图:客户管理事务管理帐务管理第55页/共59页563、UML对软件开发过程的支持第56页/共59页57用例图输入新客户输入新客户创建新订单创建新订单订单订单运货运货客户客户订单订单客户客户创建新订单的顺序图核实客户核实客户准备输入的项目准备输入的项目准备发运准备发运订单类的状态图几种视图之间的关系第57页/共59页58习题1、传统软件开发方法有什么缺陷?2、解释面向对象软件开发过程的特点。3、比较几种面向对象的软件开发方法。4、UML是什么?如何支持软件开发过程。5、UML中有哪些模型视图?各有什么特点?第58页/共59页西安交通大学 刘海岩59感谢您的观看!第59页/共59页