面向对象软件工程的概念_第1页
面向对象软件工程的概念_第2页
面向对象软件工程的概念_第3页
面向对象软件工程的概念_第4页
面向对象软件工程的概念_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

面向对象软件工程的概念7.1传统软件开发方法的局限性传统的软件工具、软件技术和抽象层次越来越难以适应大规模复杂软件系统的开发特点。软件能力问题已经成为制约软件发展的因素。软件工程自70年代以来,有力的推动了软件能力的解决。自顶向下的分析与设计的方法、软件项目的工程化管理、软件工具和开发环境、软件质量保证等都对软件的发展起了非常重要的作用。传统的软件开发方法在当时的软件工程中起了主导作用,随着系统复杂性、多变性增强,传统方法的缺陷就显露了出来:(1)面向过程为主。系统围绕着由计算机来实现功能的复杂过程而建立,在分析和解决问题时与人们对现实世界的认识有一定差距。第2页,共59页,2024年2月25日,星期天

(2)软件结构稳定性差。需求分析阶段重点是功能模型,难以彻底明确全部需求。设计阶段的软件体系结构是基于系统功能建立的。每个模块完成一个基本功能,多个模块的组合完成一个整体功能。一个模块的变动可能会影响到多个模块。用户的需求大多针对功能,功能的变化会引起体系结构的变化,不利于系统的维护。(3)软件开发的抽象力度小。解决问题的类型一般用于“输入-处理-输出”为核心的数据处理系统,不适应于复杂的实时、交互、事件驱动、分布式等新型应用的系统开发。(4)软件重用未能得到很好的解决。传统的方法一般从“零”开始开发软件,数据与操作作为相互分离的实体来考虑,使软件的可复用性差。重用的实施仅仅是公用模块的调用。面向对象的封装性、继承性、多态性等特性支持软件重用且重用的粒度大。软件的重用导致更快地、高质量地开发软件,为软件工业化生产奠定基础。第3页,共59页,2024年2月25日,星期天传统方法数据与过程是分离的过程1输入输出过程2过程3数据实体属于该对象的数据对象处理数据的方法消息消息对象把数据和处理数据的方法封状成一个单元第4页,共59页,2024年2月25日,星期天传统方法与面向对象方法的比较面向对象方法系统是交互对象的集合对象与人或其它对象交互对象发送与响应消息传统方法系统是过程的集合过程与数据实体交互过程接受输入并产生输出第5页,共59页,2024年2月25日,星期天7.2面向对象的过程模型1、演化/并行模型(p402)是Booch等人在90年代初建议的。该模型与第1章介绍的螺旋模型、增量模型相似。但强调:(1)对OO系统的分析和设计建模不在相同的抽象层次上进行。(2)分析和设计可以并发地应用到独立的系统构件。第6页,共59页,2024年2月25日,星期天

该模型每次迭代都要计划、工程和评估。每个计划都要调整进度以适应和本次迭代相关的变化。早期阶段迭代进行的分析与设计工作为了分离出OO模型中的所有重要元素;当工程工作不断进展时,产生软件的增量版本;在评估阶段对每个增量的评估其反馈将影响下一次计划活动及后续增量。

2、RUP98年6月推出,该过程强调了开发方法的统一、建模语言的统一、研究成果的统一。该过程是基于构件的,即所构造的系统是由软件构件通过明确定义的接口相互连接所建造起来的。它使用UML来制定软件系统的所有蓝图。RUP的主要特点:(1)用例驱动用例作为系统分析、设计、实现和测试的基本输入。第7页,共59页,2024年2月25日,星期天即用例不只是一种确定系统需求的工具,它还能驱动系统的设计、实现和测试的进行。基于用例模型,开发人员可以创建一系列实现这些用例的设计模型和实现模型。开发人员可以审查每个后续建立的模型是否与用例模型一致。测试人员测试实现以确定实现模型的构件是否实现了用例。所以用例启动了开发过程,还使开发过程结合为一体。开发过程是沿着一系列从用例得到的工作流前进的。第8页,共59页,2024年2月25日,星期天下图显示了用例模型与其他模型之间的相关性:用例模型由…建立分析模型为系统描述一系列类由…设计设计模型为系统定义一系列子系统和界面由…实现实现模型将类映射到构件由…分配测试模型由…验证验证系统是否提供了用例模型中描述的功能配置模型定义软件分布第9页,共59页,2024年2月25日,星期天

(2)以构架(Architecture)为中心软件系统的构架从不同角度描述了即将构造的系统,它刻画了系统的整体设计,去掉了细节部分,突出了系统的重要特征,包含了系统中最重要的静态结构和动态行为。构架是根据应用领域的需要逐渐发展起来的,并在用例中得到反映。每种产品都具有功能和表现形式,功能与用例对应,表现形式与构架对应。用例与构架是相互影响的,用例在实现时必须符合于构架,构架必须预留空间以实现现在或将来所有需要的用例。第10页,共59页,2024年2月25日,星期天3、迭代与增量的过程迭代指工作流中的步骤,增量指产品中增加的部分。迭代过程要处理一组用例,这组用例合起来能扩展所开发产品的可用性,后续的迭代过程建立在前一次迭代过程末期所开发的产品上。构架提供了一种结构来指导迭代过程中的工作,用例则确定了目标并驱动每次迭代的工作。——三条腿的凳子!4、基于构件统一过程所构造的软件系统,是由软件构件通过明确定义的接口相互连接所建造起来的。5、使用UML

统一过程使用UML来制定软件系统的所有蓝图,UML是整个统一过程的一个完整部分,他们是共同发展起来的,它强调创建和维护模型。第11页,共59页,2024年2月25日,星期天6、过程可剪裁用统一过程开发软件时,各阶段应该有多长?各个阶段迭代多少次是合适的?候选构架可以在哪一点完全建立起来?这些问题的答案取决于系统的规模、项目的性质、开发组织的领域经验,甚至包括相关人员有效配合程度。总之,统一过程是一个框架,可以根据具体情况加以裁剪,以此来适应各种各样的开发过程。第12页,共59页,2024年2月25日,星期天7.3面向对象的概念

面向对象(ObjectOriented,简称OO)的概念起源于20世纪60年代中期的Simula67。80年代初,Smalltalk语言及其程序设计环境的出现成为面向对象技术发展的一个重要里程碑。80年代中期硬件的发展使C到C++过渡平滑,推出了相应工具及面向对象集成环境,使OOP模式进入主流。80年代中后期,面向对象分析与设计的研究开始发展。进入90年代,面向对象软件工程成了许多软件产品的建造笵型。

(1)对象(object)

是现实世界中个体或事物的抽象表示。封装了其属性及相关的操作。属性表示对象的性质,属性值规定了对象所有可能的状态。对象的操作指出了该对象具有的行为并提供了对外的服务。第13页,共59页,2024年2月25日,星期天

(2)类(class)

是具有相同属性和相同操作的对象的抽象。通常用类名、类的属性、类的操作三方面的内容来定意一个类。一个具体对象是类的一个实例。(3)消息(message)

是一个对象发送给另一个对象的操作请求。消息一般由三部分组成:对象名、消息名、参数。消息传递是对象与外部世界相互通信的唯一途径。

(4)方法(method)

是对象操作的实现,描述了对象中操作的算法和响应消息的方式。

第14页,共59页,2024年2月25日,星期天(5)继承(inheritance)

是子类自动的共享其父类中定义的属性和操作的机制,该机制构成了类的层次结构。较高层的父类称为基类、超类、一般类。子类称为派生类、特殊类。子类除了继承父类的特征,还可有自己的特征。继承有传递性,子类能继承上层的全部特征。继承性使得相似的对象可以共享程序代码和数据结构,从而简化了创建类及对象的工作量,基类解决一般性问题,派生类解决特殊问题,提高了软件的可重用性。继承性还使得软件便于维护,当需要扩充软件原有功能时,从要修改的类中派生出一个子类,在该子类中添加新的代码。

第15页,共59页,2024年2月25日,星期天(6)多态(polymorphism)

指在类的不同层次上可以使用相同的操作名。同一操作名可有不同的实现方式,运行时可动态地选择哪一个算法。多态性增加了软件的灵活性,可扩充性,通用功能的操作放在高层,不同地实现这一功能的行为放在低层,以实现不同的相应。

第16页,共59页,2024年2月25日,星期天7.4几种面向对象方法20世纪80年代以来,出现了几十种面向对象软件开发方法。每一种都有自己的符号体系和开发过程,都支持以下基本活动:

•标识类及对象

•描述类及对象之间的关系

•定义类的属性和操作

1、Booch方法

Booch是面向对象方法最早的提出者之一,提出了面向对象软件工程的概念。提出了“微开发过程”和“宏开发过程”的思想。

第17页,共59页,2024年2月25日,星期天

微开发过程:定义一组分析任务,包括标识类和对象以及类和对象的语义、定义类和对象间的关系、描述类和对象的动态行为。宏开发过程:将微过程反复应用,并包含了体系结构设计的计划活动:

•将相似的对象聚集到独立的模块;

•描述对象管理、内存管理、错误处理等其它功能的实施;

•可使用原型对上述任务进行精化;

•将同时执行的进程分配到不同的处理机。该方法提出建立以下模型:类图、对象图、状态转移图、时序图、模块图、进程图。第18页,共59页,2024年2月25日,星期天2、Coad/Yourdon方法著名的OOA/OOD方法,也是最早的面向对象的分析与设计方法之一。简单、易学。

OOA阶段的任务:

•标识类及对象

•定义结构(一般-特殊结构、整体-部分结构)

•划分主题

•定义属性及对象间的实例连接

•定义服务及对象间的消息连接上述任务迭代进行,产生5个层次的问题域模型(主题层、类及对象层、结构层、属性层、服务层)第19页,共59页,2024年2月25日,星期天OOD阶段的活动:

•问题域部分

•人机交互部分

•任务管理部分

•数据管理部分

3、OMT方法

Rumbaugh等人提出的对象建模技术(ObjectModelTechnology,OMT),该方法强调了三种模型,并将软件开发过程划分为以下几个阶段:(1)系统分析

•问题描述

•建立对象模型产品:对象模型=对象图+数据字典第20页,共59页,2024年2月25日,星期天•建立动态模型产品:动态模型=状态图+事件跟踪图

建立功能模型产品:功能模型=数据流图+约束(2)系统设计

•将系统分解为各个子系统

•确定问题中固有的并发性

•将各子系统分配给处理器

•数据存储管理

•全局资源管理

•选择软件控制机制

边界条件处理第21页,共59页,2024年2月25日,星期天

(3)对象设计对分析模型细化:

•将三种模型结合起来以获得对象类上的操作。如功能模型中的加工,动态模型中对应一个事件的活动。

•设计实现操作的算法

•优化数据访问路径

•实现系统设计中的控制机制

•为提高继承而调整类结构

•设计对象之间的关联

•将类和关联集成到模块中

第22页,共59页,2024年2月25日,星期天

4、Jacobson方法也称OOSE方法。最大特点是强调使用实例(Use-Case),每一个用例就是一个使用系统的方式,用例的执行将引发执行一系列与行为相关的事务。该方法将用例贯穿于整个开发阶段,并在用例描述中引入了角色或参与者(Actor)的概念。角色指使用系统的人以及与系统相互作用的软硬件环境。该方法还将对象区分为实体对象(业务对象)、接口对象(界面对象)和控制对象。需求分析阶段活动:定义潜在的角色、识别问题域中的对象和关系、基于需求规格说明和角色的需要描述用例。设计阶段的活动:从用例的描述中发现与设计有关的对象,并描述其属性、行为和关联。同时把所有用例的行为分派给每个对象。第23页,共59页,2024年2月25日,星期天7.5统一建模语言UMLUML(UnifiedModelingLanguage)产生于90年代中期。它不仅统一了Booch、OMT和OOSE方法中的概念和表示法,而且对其作了进一步扩展,最终成为在面向对象技术领域占主导地位的、并被大众所接受的标准建模语言。

1、UML概述

UML的发展历程(下图)

UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行可视化建模。UML不是一个开发过程,也不是一个方法,但允许任何一种开发过程和面向对象方法使用它。

第24页,共59页,2024年2月25日,星期天Booch’93OMT-2UML0.8UML0.9&0.91UML1.0UML1.1UML同行专家意见OMG认证10/9510/96&9/96OMG审核,1/97OMG修正,9/97OMG采纳为标准,11/97UML1.3UML2.02001年重要修改OOSEUML开发历程第25页,共59页,2024年2月25日,星期天2、UML中的模型视图

UML有以下主要模型元素,构成了UML中的各种模型视图:第26页,共59页,2024年2月25日,星期天

•用户模型视图用例图:从用户的角度描述系统能提供哪些功能以及功能的使用者。

•结构模型视图:类图:描述系统的静态结构;对象图:描述系统在某个时刻的静态结构;包图:将类分组成更高层次的静态结构。

•行为模型试图顺序图:按时间顺序描述系统元素之间的交互;协作图:从时间和空间的顺序描述系统元素之间的交互;状态图:描述系统元素对事件的响应引起的状态转换;活动图:描述系统元素的活动。

•实现模型视图构件图:描述实现系统的元素的组织结构;配置图:描述环境元素的配置,并把实现系统的元素映射到配置上。第27页,共59页,2024年2月25日,星期天(1)用例图

用例:根据Jacobson的定义,用例规定了一个动作序列,系统执行这些动作并产生出对于特定参与者可见的有价值的结果。参与者可以是人、组织、硬件设备或外部系统。用例图用于展示参与者与系统提供的用例之间的连接(通信)关系。仅仅从参与者使用系统的角度描述系统,不反映内部的处理方式。因此用例图定义的是系统的功能需求。下图是某保险业务的用例图。第28页,共59页,2024年2月25日,星期天签定一份保险单客户保险销售人员销售统计客户统计某保险业务的用例图第29页,共59页,2024年2月25日,星期天某金融贸易系统用例图设置边界风险分析交易估价进行交易超越边界更新帐目评价交易人员交易经理计帐系统销售员《extend》《include》《include》第30页,共59页,2024年2月25日,星期天

其中:《include》、《extend》为用例图中可用的构造型元素,表示“风险分析”和“交易估价”都包含有公共的“评价”动作,因此把“评价”作为一个独立的用例。而“超越边界”用例是“进行交易”用例的扩展,指交易时对某个特定用户规定了最大贸易量,不能执行一般的常规动作。因此,当描述一般行为时有例外、任选或异常处理时,采用《extend》;当在两个或多个用例中出现重复描述(有共用行为)而又想避免重复时,采用《include》。(2)类图

用来描述系统中类和类之间的关系,是系统的静态结构。类图中还描述了类的属性、操作、以及对模型中各种成分的约束。类图包含有类、关联和关系等模型元素。见下图:第31页,共59页,2024年2月25日,星期天类名属性操作类的完整表示类名类的简单表示类1类2角色角色关联名关联表示类之间的语义联系(是运行时实例之间的关系)。角色表示该类在这个关联中的作用。关联中可以有重数,重数指一个角色可以有多少个对象来扮演。①类的表示:②类的关联(association):第32页,共59页,2024年2月25日,星期天公司董事会办公室分配员工0..1*人员董事会成员0,3..8*董事会同时省略关联名和角色名,默认关联名是has(有),省略重数默认1..1。每一个员工可能没有或者只有一个办公室每一个董事会没有或者有3~8个董事会成员(有角色名,可以省略关联名)第33页,共59页,2024年2月25日,星期天在一些情况下关联可能需要记录一些信息,但这些信息不能放在任何一个类中,可引入一个关联类记录这些信息。如下图:学生*选修*课程学生**课程选修成绩学生*选修*成绩课程一个多对多关联。“成绩”属性不能放在任何一方(每个学生只有一个成绩或每门课程只有一个成绩)创建一个关联类来保存成绩与带有关联类的多对多关联等价的两个一对多关联的图第34页,共59页,2024年2月25日,星期天整体类部分类整体类部分类项目人员1*建筑物楼房类的聚合类的强聚合(组合)*③类的聚合(aggregation):是表示“整体-部分”的特殊关联。组合(composition)是一种强类型的聚合,整体类和部分类共存亡,如果整体类被撤销,部分类也不存在。部分类的存在只是为整体类服务。第35页,共59页,2024年2月25日,星期天一般类特殊类人员教师学生

由一个超类和几个直接子类构成的结构通常称为泛化。类的这种关系也称为一般-特殊关系或继承关系,将现实世界实体的共同特性抽象为一般类,通过增加独有的特性而成为各种特殊类。如图所示:

④类的泛化(generalization):

下图是一个网上售货系统的部分类图。其中用{}括起来的内容是约束条件。UML提供了对类图中的基本成分可进行限制与约束的手段。第36页,共59页,2024年2月25日,星期天销售代表0..1定货nameaddress顾客creditRating():String产品雇员1DateReceivedisPrepaidnumber:Stringprice:Money协作顾客contactNamecreditRatingcreditLimitcreditCard#个人顾客{creditRating()==“poor”}定货作业线dispatch()close()remind()billForMonth()Quantity:Integerprice:MoneyisSatisfied:Boolean1****1物品第37页,共59页,2024年2月25日,星期天

(3)对象图

对象图是类的实例图,给出了存在于程序执行过程中某个特定点的对象与链接的配置示例。

对象名:类名属性对象名:类名对象1对象2链名对象的三种描述方式链的表示教师讲授课程类图李伟编号=3658职称=教授软件工程编号=401学分=3数据库编号=301学分=3对象图第38页,共59页,2024年2月25日,星期天

其中,链是类图中关联的实例,类图中关联表示两个类之间可能存在的所有链接,而对象图中的链上不附加重数。对象图中也不可能包含泛化。对象图不像类图那样具有重要地位,通常用来实例化一个复杂的类图以分析特定的场景。对象图也常用在协作图中,反映一组对象之间的动态协作关系。第39页,共59页,2024年2月25日,星期天(4)包图包是将类分组成更高层次的单位。包图用以描述包中存在的类以及包与包之间的依赖关系和泛化关系。包的内容可以是类的列表、类图、或另一个包图。依赖关系用虚线箭头表示。保险单填写界面内部系统保险单客户数据库界面Oracle界面Sybase界面某保险信息管理系统的包图第40页,共59页,2024年2月25日,星期天(5)状态图

状态图描述类的对象在生命周期内所有可能的状态以及事件发生时状态的转移(transition)情况。一个转移可以有一个与之相连的动作(action),这个动作指明了状态转移时应该作些什么。状态图是类图的补充。不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。第41页,共59页,2024年2月25日,星期天在一楼上升空闲下降到达一层到达楼层

升楼层

电梯运行的状态图开始上下降楼层在大楼一层到达楼层上升楼层超时移到一层第42页,共59页,2024年2月25日,星期天初态终态状态名do/活动名中间态行驶向前向后向前向后低速高速行驶或关系子状态(只取一种)与关系子状态(某时刻可同时到达多个子状态)①UML中的状态表示②转移状态1do/活动1状态2do/活动2事件[条件]/动作其中:状态内部的“活动”不引起状态转移;箭头上的“动作”指状态转移时要执行的动作。第43页,共59页,2024年2月25日,星期天

(6)顺序图

用来描述对象之间的动态协作关系以及协作过程中的先后次序。它常用来描述一个用例的行为,显示该用例中所涉及到的对象以及对象之间交互的时间顺序。每个对象图符下面的垂直虚线表示对象的生命线,每条对象生命线上的细长矩形表示该对象正处于活动时期,细长矩形底部的“×”表示该对象被删除。对象生命线之间的带箭头连线表示对象之间的交互与通信,一般指消息传递并具有以下类型:

简单消息,不考虑通信细节。同步消息,必须等待消息的返回。异步消息,不等待消息返回,继续执行。返回消息,同步消息激活的动作返回到发送对象的消息。消息泛指操作调用、信号传送、事件唤醒等。第44页,共59页,2024年2月25日,星期天:呼叫者:交换机:远程交换机:受话者拿起话筒响拨号声拨号码......接通信号响铃铃响停止信号

拿起话筒铃响停止<10

deabc{b-a<1s}{e-d<5s}{c-b<10s}路由选择接电话的顺序图第45页,共59页,2024年2月25日,星期天:计算机:打印服务器:打印机:队列打印()[打印机空闲]打印()[打印机忙]存储()打印结束()打印结束()用例“打印程序”的顺序图第46页,共59页,2024年2月25日,星期天(7)活动图活动图可有不同的抽象级别。既可以在企业业务模型中描述业务工作流,又可以描述满足一个用例要求所进行的活动及相应约束关系,还可以描述每个活动的具体操作步骤(相当于流程图)。主要图形元素:

•泳道活动图中用垂直分隔线划分成的纵向区域,说明由谁来完成该泳道中的任务。

•起点活动图中所有活动的开始,用表示。

•终点活动图中所有活动的结束,用表示。可有几个终点。

•活动完成的任务或操作步骤,用圆角矩形表示。

•决策是特殊的活动,表示活动流程中的判断,用菱形表示。

第47页,共59页,2024年2月25日,星期天•同步表示活动之间的同步或并发,表示引入的信息流同时到达,引出的信息流同时被触发。同步用一条粗线表示,称为同步线。

•业务对象对象可以作为活动的输入或输出,即活动会改变对象的状态。用虚线箭头表示数据传送的方向。

•转移是活动之间的关系,由隐含事件引起活动转移。转移连接各个活动及各个特殊活动(起点、终点、决策、同步线等)。转移用带箭头的线表示,其上不标注事件和动作,可标注转移的条件。下面是两个活动图示例:第48页,共59页,2024年2月25日,星期天顾客售货库房请求服务支付收货开订单供货交货顾客购物的活动图第49页,共59页,2024年2月25日,星期天采购部经理副总经理协商采购协议签定采购协议草案采

温馨提示

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

评论

0/150

提交评论