收藏 分享(赏)

软件工程模型与方法 08、面向对象基础.ppt

上传人:kpmy5893 文档编号:5163237 上传时间:2019-02-11 格式:PPT 页数:132 大小:1.83MB
下载 相关 举报
软件工程模型与方法 08、面向对象基础.ppt_第1页
第1页 / 共132页
软件工程模型与方法 08、面向对象基础.ppt_第2页
第2页 / 共132页
软件工程模型与方法 08、面向对象基础.ppt_第3页
第3页 / 共132页
软件工程模型与方法 08、面向对象基础.ppt_第4页
第4页 / 共132页
软件工程模型与方法 08、面向对象基础.ppt_第5页
第5页 / 共132页
点击查看更多>>
资源描述

1、软件工程模型与方法 Models & Methods of Software Engineering,第八章 面向对象基础 肖丁,本章内容,8.1 面向对象基本思想 8.2 面向对象的主要概念和基本原则 8.3 几种经典的面向对象的分析和设计方法 8.4 统一建模语言UML简介,8.1 面向对象基本思想,面向对象方向20世纪60年代末提出,90年代得到了广泛的应用,其思路是从现实世界中的客观对象(如人或事物)出发,尽量运用人类的自然思维方式(如抽象和分类)来构造软件系统。 结构化开发方法将系统划分为功能和数据两个部分,数据和功能分别设计和实现。 面向对象从现实出发,将系统抽象为一组交互的对象,

2、每个对象既包含功能,也拥有数据。,8.1 面向对象基本思想,以图书管理信息系统为例来比较结构化开发方法和面向对象方法的思路。 结构化方法:,图书基本信息 读者基本信息 图书借阅信息 图书预约信息 等,数据库,管理图书基本信息 办理借阅 办理还书 查询图书基本信息 查询自己的借阅信息 等,函数和过程,8.1 面向对象基本思想,面向对象的方法: 从图书借阅的应用中抽象出三类对象:,学生,图书,教师,8.1 面向对象基本思想,可见,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系、用什么观点来研究问题并进行问题求解、以及如何进行系统构造的软件方法学。 从这

3、个意义上讲,面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。面向对象基本思想可以概括为:,8.1 面向对象基本思想,对象:从现实世界中客观存在的事物出发来构建软件系统: 强调直接以问题域(现实世界)中的事物为中心来思考和分析 把它们抽象地表示为软件系统中的对象,作为软件系统的基本构成单位。 这样就可以使软件系统直接映射到问题域,保持问题域中事物及其相互关系的本来面貌。,8.1 面向对象基本思想,属性和服务:用对象的属性表示事物的静态特征;用对象的服务表示事物的动态特征。 关联:通过关联表达类之间的静态关系。 消息:对象之间通过消息进行通信,实

4、现对象之间的动态联系。 封装:类和对象的属性与服务结合为一体,对外屏蔽其内部细节,只有公共的服务对外是可见的。 分类:对事物进行分类。 聚合:复杂的对象可以用简单的对象作为其构成部分。 继承:通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,从而简化系统的构造过程及文档。,8.2 OO的主要概念和基本原则,8.2.1 主要概念8.2.2 基本原则,8.2.1 主要概念,对象 类 关联和链 继承/泛化 聚合,对象,理解对象的两个角度: 现实世界:客观存在的任何事物都可以被看作是对象 有形的对象,如一个人或一件物品; 无形的对象,如一项计划或者一个事件。

5、 对象是一个独立单位,它具有自己的静态特征和动态特征。 软件系统:对象是用来描述现实世界客观事物的一个实体,是构成系统的一个基本单位。 对象由一组属性和对这组属性进行操纵的一组操作组成。 属性用来描述对象静态特征, 操作用来描述对象动态特征。,类,类是具有相同属性、操作、关系和语义的对象集合的描述。 类为属于该类的全部对象提供了统一的抽象描述,由类名、属性和服务三个主要部分组成。 对象是类的实例。,关联和链,关联用来描述类之间的静态联系,可以包含关联的名称、关联的方向和多重性等属性。链是关联的实例,用于描述具体对象之间的某种联系。 对象之间的链可以通过对象的属性表达出来。例如,用类“学生”的对

6、象的属性来记录该对象具体借阅的“图书”对象。,关联名称:借阅 关联方向:单向 多重性:7(表示最多借阅7本),继承/泛化,继承也称泛化,是OO描述类之间相似性的一种重要机制。 当需要定义的一个新类与已经存在的类存在一定程度的相似度的时候,可以通过继承已经存在的类的方法来创建新类,从而减少定义新类的工作量。 在类的继承层次结构中,位于较高层次的类叫做一般类/超类/父类,而位于较低层次的类叫做特殊类/子类。 继承使得特殊类自动地拥有或隐含地复制一般类的全部属性、操作和关联。,继承/泛化,只有当两个类之间是 “is a”, “is like” “is a kind of ”关系时,才可使用继承。 继

7、承可分为单继承和多继承。 如果一个子类继承了超过一个以上的父类的属性和操作,那么这种继承就是多继承; 否则就是单继承。 继承是可传递的,可以跨越任意层次。 子类继承其所有祖先类的属性、操作和关联。,聚合,聚合刻画了现实世界事物的构成关系 ,是一种具有整体-部分语义的关联,也就是说,聚合是关联的一种,只是普通关联的语义没有聚合那么强 。 其语义可表达为: “有一个” “是一部分”,8.2.2基本原则,分类 封装和信息隐藏 消息通信 多态性,分类,分类是按照某种原则划分事物的类别,利用它有助于对复杂世界的认识。 在面向对象的方法中,分类就是把具有相同属性和操作的对象划分为一类,用类作为这些对象的抽

8、象描述。 运用分类原则,可以清楚地表示对象和类之间的关系以及特殊类和一般类之间的关系。,封装和信息隐藏,封装是指将属于对象的各种信息(属性)和对象的行为(操作)组织起来,形成一个实体对象。 接口:定义外部实体能对对象进行的操作方式; 信息隐藏有两方面含义: 对象属性只有通过对象对外发布的接口访问; 外部对象只关心接口的访问方法,不关心接口的内部实现;,消息通信,消息是对象间实现通信的手段。 操作是对象与外界的接口,当系统中的其他对象或其他系统成分请求这个对象执行某个操作时,该对象就响应这个请求,执行该操作的实现。 在面向对象系统中,把向对象发出的操作请求称为消息。 一条消息应包括:消息名、入口

9、参数和返回参数。对象接收到消息后先分析消息的合法性,然后为请求者提供服务。 一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。,多态性,多态性(polymorphism)是一种方法,指在不同的类中可以定义相同的操作,而这些操作在这些类中可以有不同的实现。 简单说,当将子类对象的引用传给声明为父类的一个对象变量,如果子类有这个方法就调用子类的方法,如果子类没有这个方法就调用父类的这个方法。 多态性也是一种特性,这种特性使得一个属性或变量在不同时期可以表示不同类型的对象。从而增加了代码的灵活性和扩展性。,多态性,设有一个类,称为乐器,表示为Instrument,在该类中定义

10、了一个操作play(); 类管乐器Wind、打击乐器Percussion、弦乐器Stringed和铜管乐器Brass继承类Instrument而成为该类的子类,不同的子类对play操作都有不同的实现。 现在,需要写一段代码,分别创建上述4个子类的对象,并让这些对象执行play操作。 如果要填加以个木管乐器Woodwind,怎么修改原有的代码?,多态性,public class Music / 不用关心数组元素具体是绑定到哪种对象static void tuneAll(Instrument e) for(int i = 0; i e.length(); i+)ei.play();public s

11、tatic void main(String args) Instrument orchestra = new Instrument4;int i = 0;/ 将子类对象的引用赋值给引用父类对象的变量orchestrai+ = new Wind();orchestrai+ = new Percussion();orchestrai+ = new Stringed();orchestrai+ = new Brass();tuneAll(orchestra); /,8.3 面向对象的分析和设计方法,8.3.1 OOA/OOD 8.3.2 Booch方法 8.3.3 对象建模技术(OMT) 8.3.

12、4 面向对象软件工程方法(OOSE ),8.3.1 OOA/OOD,OOA/OOD 方法是由Peter Coad和Ed Yourdon在1991年提出的。这是一种逐步进阶的面向对象建模方法,其特点是概念清晰,简单易学。 OOA使用了基本的结构化原则并结合了面向对象的概念,包括确定类与对象、标识结构、定义主题、定义属性、定义服务 OOA的结果是结构化的文档,自顶向下包括五个层次: 主题层(只有主题) 类与对象层(上层中加入类与对象) 结构层(上层中加入结构) 属性层(上层中加入属性) 服务层(上层中加入服务),OOA,确定类与对象主要是描述如何找到类和对象。 从应用系统需求出发,以整个应用为基础

13、标识类与对象,然后按这些类与对象分析系统的职责。 获取充足的环境和对象行为信息; 标识结构按照两种不同的原则进行: 第一种是按照一般化特殊化结构,确定已标识出的类之间的继承层次关系。 第二种是按照整体部分关系,来确定一个对象怎样由其它对象组成,以及对象怎样组合成更大的复杂对象。,OOA,标识主题是通过把类与对象划分成更大的单元来完成的。 主题是一组类与对象。 主题的大小应合适地选择,使得人们可以从模型很好地理解系统。 标识属性是通过标识与类有关的信息和关联来完成的。 标识好的属性应放在合适的继承层次上。关联也要通过检查问题域上的关系标识出来。 定义服务就是定义类上的操作。 主要是通过定义对象状

14、态,以及定义诸如创建、访问、连接、计算、监控等服务来完成。,OOD,设计问题域部分 问题域部分实际上是OOA工作的进一步延伸,在OOA工作基础上进行。 设计人机交互部分 突出人如何使用系统,以及系统如何向用户提交信息。,OOD,设计任务管理部分 识别事件驱动任务; 识别时钟驱动任务; 识别优先任务和关键任务; 识别协调者; 定义每一个任务。 设计数据管理部分 数据存放方法的设计,需要确定采用关系型数据库还是面向对象数据库; 相应服务的设计,设计哪些类来实现数据的持久化服务。,8.3.2 Booch方法,Booch方法是Grady Booch从1983年开始研究,1991年后走向成熟的一种方法。

15、 Booch方法强调多次重复和开发者的创造性,包含一组启发性的过程式建议: 在一定抽象层次上标识类与对象; 标识类与对象的语义; 标识类与对象之间的关系; 实现类与对象;,8.3.2 Booch方法,Booch方法使用四个主图和两个辅图来描述系统各方面的联系: 四个主图: 类图描述类之间的关系; 对象图描述具体的对象和在对象之间传递的消息; 模块图用来描述这些程序构件; 进程图描述过程(进程)如何被分配给特定的处理器。 两个辅图: 状态转换图:用于描述某个类的状态空间和状态变化; 时序图:描述不同对象间的动态交互。Booch方法的缺点在于不能有效地找出每个对象和类的操作。,8.3.3 OMT,

16、OMT最早是由Loomis,Shan和Rumbaugh在1987年提出 ,J. Rumbaugh在1991年正式把OMT应用于面向对象的分析和设计。 这个方法是在实体关系模型上扩展了类、继承和行为而得到的。 OMT包括了一组定义得很好的并且相互关联的概念,它们是 类(class)、对象(object)、泛化(generalization)、继承(inheritance)、链(1ink)、链属性(link attribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scenario)、属性(attribute)、子系统(subsystem)、模块(

17、module)等。,8.3.3 OMT,OMT包含四个步骤: 分析 系统设计 对象设计 实现 OMT的三种模型: 对象模型,用类和关系来刻画系统的静态结构。 动态模型,用事件和对象状态来刻画系统的动态特性。 功能模型,按照对象的操作来描述如何从输入给出输出结果。,8.3.3 OMT,OMT的四个步骤 : 分析:其目的是建立可理解的现实世界模型。 分析模型由上述三种模型组成。 初始的需求用问题陈述来表达。 系统设计:用于确定高层次的开发策略。 系统被划分成子系统,并分配到处理器和任务。 对象设计:其目标是确定对象的细节,包括定义对象的操作和算法。 实现:在良好的面向对象编程风格和编码原则指导下进

18、行的。,8.3.4 OOSE,面向对象软件工程(OOSE)是由Ivar Jacobson提出的,他将面向对象的思想贯穿到软件工程中,目的是为了得到一个能适应变化的、健壮的、可维护的系统。 OOSE的过程由五个模型构成: 需求模型 分析模型 设计模型 实现模型 测试模型,8.3.4 OOSE,需求模型:从用户的观点出发完整地刻画了系统的功能需求 ,主要建模手段有 用例(Use Case) 问题域对象模型 人与系统的交互界面 分析模型:主要目的是要建立健壮的、可扩展的系统的基本结构。 OOSE定义了三种对象类型: 实体对象刻画系统要长期管理的信息和信息上的行为。 界面对象刻画系统界面,使用户和系统

19、能进行双向通信。 控制对象本身不完成任何功能,只是向其他对象委托职责,负责协调其他对象的工作。 通过将RM中的对象分别识别到AM中的不同对象类型并分析对象间的关系实现分析模型。,8.3.4 OOSE,设计模型:最终表现为由类(对象)模块,并且这些类(对象)有了详细定义。 实现模型:就是用某种程序设计语言来实现设计模型。 测试模型:关于类(对象)的底层测试。,8.4 UML简介,8.4.1 UML的出现和发展 8.4.2 UML概述 8.4.3 UML中的扩展机制 8.4.4 UML中的图 8.4.5 基于UML的面向对象软件开发过程,8.4.1 UML的出现和发展,统一建模语言UML是由Gra

20、dy Booch、Ivar Jacobson和James Rumbaugh发起,在Booch方法、OOSE方法和OMT方法基础上,广泛征求意见,集众家之长,几经修改而成的一个面向对象分析与设计建模语言。 该建模语言得到了“UML 伙伴联盟”的应用与反馈,并得到工业界的广泛支持,由OMG 组织采纳作为业界标准,是软件界第一个统一的建模语言。,8.4.1 UML的出现和发展,UML发展的四个阶段: 各自为政:上世纪80年代到1993年期间,面向对象方法出现了百家争鸣的局面, 但是不同方法的模型相互转换几乎不可能; 统一阶段:1994年10月开始,Rational 公司的Booch、Rumbaugh

21、和Jacobson 在Booch、OMT和OOSE方法的基础上进行研究,于1996年发布了统一建模语言UML(Unified Modeling Language) ; 标准化阶段:OMG为了使UML标准更加完善,发布了征求建议书(RFP),随后,Rational软件有限公司建立了UML Partners联盟,各软件开发商和系统集成商共同努力,1997年制定出UML1.1标准,被OMG采纳 ; 工业界应用:1998年OMG接管了UML标准的维护工作,UML已成为软件工业界事实上的标准。,8.4.2 UML概述,UML 是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示,它 不是一种

22、可视化的程序设计语言,而是一种可视化的建模语言; 不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准; 不是过程,也不是方法,但允许任何一种过程和方法使用它。,UML的特点和目标,为建模者提供现成的、易用的、表达能力强的可视化建模语言,以开发和交换有意义的模型; 提供可扩展性和特殊化机制以延伸核心概念; 与具体的实现无关,可应用于任何语言平台和工具平台; 与具体的过程无关,可应用于任何软件开发的过程; 支持更高级的开发概念,例如构件、协作、框架和模式,强调在软件开发中对架构、框架、模式和构件的重用(UML 1.4规范); 与最好的软件工程实践经验集成; 可升级,具有广阔的适

23、用性和可用性; 推动对象工具市场的成长。,UML的基本结构,基本构造块 Basic building block 事物 Thing 关系 Relationship 图 Diagram 语义规则 Rule name、scope、visibility、integrity、execution 通用机制 Common mechanism specification、adornment、common division、extensibility mechanism,UML的基本结构,事物 Thing 及关系 Relationship Structural thing Class, interface,

24、collaboration, use case, component, node Behavior thing Interaction, state machine Group thing package Annotation thing note,依赖 Dependency 关联 Association 泛化 Generalization 实现 Realization,UML的组成,UML 用模型来描述系统的结构(静态特征)以及行为(动态特征)。从不同的视角为系统的架构建模,形成系统的不同视图(view), 称为4+1试图,UML的组成,用例视图:强调从用户的角度看到的或需要的系统功能,这种

25、视图也叫做用户模型视图(user model view) 或场景视图(scenario view); 逻辑视图: 展现系统的静态或结构组成及特征,也称为结构模型视图(structural model view) 或静态视图(static view); 并发视图:描述设计的并发和同步等特性,关注系统非功能性需求,也称为行为模型视图(behavioral model view)、过程视图(process view)、 协作视图(collaborative view)和动态视图(dynamic view); 构件视图:关注软件代码的静态组织与管理,也称为实现模型视图(implementation m

26、odel view )和开发视图(development view); 部署视图:描述硬件的拓扑结构以及软件和硬件的映射问题,关注系统非功能性需求(性能、可靠性等),也称为环境模型视图或物理视图(physical view);,UML的组成,每种UML视图都是由一个或多个图组成的,一个图就是系统架构在某个侧面的表示,所有图一起组成了系统的完整视图。 UML1.4中规定的9种图包括: 用例图(Use case diagram):描述系统的功能; 类图(Class diagram):描述系统的静态结构(类及其相互关系); 对象图(Object diagram): 描述系统在某个时刻的静态结构(对象

27、及其相互关系);,UML的组成,顺序图(Sequence diagram):按时间顺序描述系统元素间的交互; 协作图(Collaboration diagram):按照时间和空间的顺序描述系统元素间的交互和它们之间的关系; 状态图(State diagram):描述了系统元素的状态条件和响应; 活动图(Activity diagram):描述了系统元素的活动; 构件图(Component diagram):描述了实现系统的元素的组织; 部署图(Deployment diagram):描述了环境元素的配置并把实现系统的元素映射到配置上。,UML的组成,视图和组成视图的图之间的对应关系: 用例视图

28、:使用用例图和活动图; 逻辑视图和并发视图:使用类图、对象图,顺序图,协作图,状态图和活动图; 构件视图:使用构件图; 部署视图:使用部署图。,用例图,参与者(Actor):是具有行为能力的事物,可以是一个人(由所扮演的角色来识别)、计算机系统、硬件设备或组织。 场景(Scenario):是参与者和被讨论系统之间一系列特定的活动和交互,通常被称为“用例的实例”。场景是使用系统的一个特定情节或用例的一条执行路径。例如,借书成功的场景或者由于各种原因借书不成功的场景。 用例(Use Case):通俗地讲,用例就是描述参与者如何使用系统来达到目标的一组成功场景和失败场景的集合。例如,借书就是一个用例

29、。,用例图的作用,用例图主要用于构建用例建模,绘制用例图可按照以下步骤进行: 首先要确定系统的边界,找出在系统边界之外与系统进行交互的参与者; 然后从这些参与者与系统进行交互的角度,通过用例来描述参与者怎样使用系统,以及系统向他们提供哪些功能来实现其目标。,用例图,在UML 语言中,用例图包含系统边界、参与者和用例等三种模型元素图示 : 参与者:用例:系统边界,类图,UML类图用于描述类以及类之间的关系。 类图包含三个部分: 类名:表示问题域中的概念,含义清晰准确 属性:可见性 属性名:类型名= 初始值 性质串 操作:可见性 操作名(参数表):返回值类型 性质串,类图中的属性,属性的可见性:

30、公有的(public):能够被系统中其它任何操作查看和使用,当然也可以被修改;属性名前用“+”表示; 私有的(private):仅在类内部可见,只有类内部的操作才能存取该属性,不能被其子类直接存取,属性名前用“-”表示; 保护的(protected):供类中的操作存取,并且该属性也能被其子类直接存取,属性明前用“#”表示。,类图中的操作,操作的型构(signature) 包括:操作名、参数表和返回值类型;同一个类中各操作型构必须是唯一的 。 参数表由多个参数(用逗号分开)构成,参数的语法格式为: 参数名:参数类型名= 缺省值,类图中的操作,实例操作与类操作 实例操作:使用操作前必须创建对象;

31、类操作:即使没有创建对象,该操作也能被调用;,类之间关系的表示,UML中类之间的关系可分为: 关联 聚合 继承 依赖,普通关联,用连接两个类的直线表示; 如果类与类之间的关联是单向的,则称为导航关联。 多重性:表示关联关系的数量关系。 角色:类在一个关联关系中扮演的角色;,反身关联,也称为递归关联 一个类可能与它自己发生关联,这样的关联称为反身关联。 当一个类的对象可以充当多种角色时,反身关联就可能发生。,限定关联,在UML中,唯一标识对象的ID(标识)信息叫做限定符(qualifier)。 利用限定符来查找对象,将得到符合条件的一个对象集合。在类图中,限定词放置在关联关系末端的一个小方框内,

32、紧挨着开始导航的类。,有序关联及关联类,要明确表示关联中的次序关系,一定要将约束“ordered”放在表示关联的直线旁且紧挨着对象被排序的类。 关联间的异或关系 当两个关联不能同时存在时使用 关联类 具有属性和操作的关联可用用关联类表示,例子:保险公司,保险公司有0或多个保险合同,这些合同与1个或多个客户有关。客户有0或多个保险合同,合同内注明保险的具体条款等内容。 保险合同位于一家保险公司和一个或多个客户之间,用它建立保险公司和客户之间的保险关系 保险合同用0或1个保险单表示,也就是合同的书面表示,一个保险单表示一份保险合同,聚合,聚合用来表达事物之间的整体-部分关系; 把作为“整体”的类称

33、为聚集(aggregate),作为“部分”的类称为成分。 识别聚合关系的常用方法是寻找“由构成”、“包含”、“是的一部分”等子句,聚合,组合:更强类型的聚合;要求部分的生存周期取决于整体的生存周期,部分不能脱离整体而单独存在,每个部分只能属于一个整体。 聚合另一层重要意义: 将一组对象集合看做一个统一的单元,将整体对象定义成控制对象,它为整个集合提供接口。当操作应用于整体对象时,整体对象往往需要将操作再传播给各成员对象,以便使集合像一个单独的对象那样运作。,聚合,关联、聚合和组合的联系和区别,关联对象之间互相了解,以便在一起工作,聚合 1、保护整体的完整性 2、如同一个单元在运作 3、操作通过

34、一个对象控制依次向下传播,组合 每一部分只能是一个整体的成员 部分不能脱离整体而单独存在,例子:油画,一幅油画由许多图形组成,图形可以由直线、圆、多边形和各种线型混合而成的组合图等。,继承,继承关系中包含父类和子类,用一个带空心三角形的直线表示,空心三角形紧挨着父类。 继承可以有多个层次,继承,如果一个类中没有包含足够的信息来实例化一个具体的对象,这样的类称为抽象类。抽象类往往用来表征对问题领域进行分析、设计得出的抽象概念,是对一系列看上去不同、但本质上相同的具体概念的抽象。抽象类是不能够被直接实例化。 例如,对“汽车”、“船”进行抽象形成的“交通工具”概念。 抽象类中一般都带有抽象的操作。抽

35、象类的子类一定要实现抽象类中的抽象操作,为抽象操作提供方法(算法实现),否则该子类仍然是抽象类。 与抽象类恰好相反的类称为具体类。具体类有自己的对象,并且该类中的操作都有具体实现的方法。,继承,依赖,依赖关系描述的是两个模型元素(类、构件、用例)之间语义上的连接关系。 其中,一个模型元素是独立的,另一个模型元素是非独立的(依赖的),它依赖于独立的模型元素,如果独立的模型元素发生改变,将会影响依赖该模型元素的其他模型元素。 比如,某个类中使用另一个类的对象作为操作中的参数,则这二个类之间就具有依赖关系。,对象图,对象图可以看作类图的实例 ,表示在某一时刻这些类的具体实例和这些实例之间的具体连接关

36、系。 对象图中,表示对象之间静态联系的线称作“链”。因此链可以看作是关联的实例。 对象的图示中在对象的名字下面要加下划线。对象名有下列三种表示格式: 对象名:类名 :类名 对象名,对象图,交互图,UML中的交互图是顺序图和协作图的统称,用于详细地描述对象的动态行为,即捕获对象需要提供哪些操作、对象之间如何协作来实现用例的各个场景。 交互图仅表达用例的一个场景,而不要同时表达多个场景。 顺序图是强调消息交互时间顺序的交互图; 协作图则是强调接收和发生消息的对象的结构组织的交互图。,顺序图,顺序图是一种详细表示对象之间以及对象与参与者之间交互的图,它由一组协作的对象以及它们之间可发送的消息组成,强

37、调消息之间的顺序。 顺序图是二维的,垂直方向表示时间,水平方向表示不同的对象或参与者。 序列图描述系统执行期间的某一时间点对象之间的特殊交互顺序。 顺序图中的主要元素包括: 对象或参与者 生命线 控制焦点 消息,顺序图例,对象或参与者,对象和参与者依次排列在水平方向上,它们的顺序并不重要,消息发起者一般放在最左侧。 对象或参与者在序列图上并不都处于一排,而是错落有致的。其规则是: 所有在通信开始前就存在的对象放置在图的顶部; 在中途被创建的对象,放置在箭头指向的位置;,控制焦点,控制焦点表示了对象的一个操作执行的持续时间,也表示了对象和它的调用者之间的控制关系。 在顺序执行的情况下,一个控制焦

38、点表示一个对象的操作或者它的从属操作活动着的持续时间。 用一个窄长的矩形表示控制焦点。矩形的顶端和它的开始时刻对齐,即画在开始该动作箭线所指向之处。矩形的末端和它的结束时刻对齐,即画在返回的箭线的尾部。 对象操作递归调用自己或调用本对象的其他操作时,控制焦点表示为左图。,消息,消息是对象之间通信的描述,说明了一个通信过程,指明消息的发送对象和接收对象。 一个消息的执行会引起一个操作的调用、发送一个信号、或引起一个对象被创建或删除。接收消息的对象可能会向调用者返回一个结果。 同步消息:实箭头用于表示过程调用或其他的嵌套控制流。在外层控制恢复之前,要完成整个嵌套序列。异步消息:枝装箭线用于异步通信

39、,也就是没有控制嵌套。发送者发出消息后,立即继续执行中的下一步,不进行等待。返回消息:虚的枝装箭线显示地表示从调用过程的返回。,对象的创建、销毁和控制范围,具有条件的顺序图,具有循环的顺序图,对集合的迭代表示,打电话的顺序图,建立顺序图时应遵循的策略,根据用例描述,设置交互的语境,包括可能需要的对象和参与者。 在顺序图的上部列出所选定的一组对象或参与者,并为它们设置生命线。通常把发起交互的对象放在左边。 在交互期间被创建和撤销的对象,在适当的时刻,用消息箭线在它们的生命线上显式地予以指明。 决定消息将以什么样的顺序在对象之间传递。 在各对象下方的生命线上,按使用该对象操作的先后次序排列各个代表

40、操作执行的控制焦点。 两个对象的操作执行如果属于同一个控制线程,则接收者操作的执行应在发送者发出消息后开始,并在发送者结束之前结束。 对对象所执行的操作的功能以及时间或空间约束进行描述。 如果需要可视化消息的迭代或分支,就使用迭代或分支的表示法。,协作图,协作图是一种强调发送和接收消息的对象结构组织的交互图,显示围绕对象以及它们之间的链而组织的交互。 协作图由对象、链以及链上的消息构成,其中也可以有参与者。参与者和对象之间、对象和对象之间的实线称为链,链上带箭头的实线是对象之间的消息。,协作图例,参与者,类,链,消息,序号,条件,协作图与顺序图的区别,顺序图和协作图可以相互转换,而不丢失语义信

41、息。 两种图从不同的角度描述了系统中不同对象间的交互过程。 顺序图对象间没有链,对象间消息的存在隐含了其间有链的存在 ; 顺序图不显式地显示消息的顺序号,消息的顺序隐藏在从图的顶部到底部所有消息的物理顺序中; 顺序图能够描述消息的返回,等价的顺序图,订单协作图实例,:Order Entry Window,:Delivery Item,:Order Line,:Order,:Reorder Item,:Stock Item,prepare(),1*for all order lines:prepare(),1.1:hasStock:=check() 1.2:hasStock:remove(),1

42、.2.1:needsReorder:=needToReorder(),1.2.2needsReorder:new,1.3:hasStock:new,状态图,现实中的事物往往具有以下特征: 大多数事物在其生命周期中经历了不同的状态; 对象在一段有限的时间内,位于某个状态中; 存在引起事物状态变化的事件; 事物在其状态间按次序转化; 事物从一个阶段到另一个阶段的递进是即时的,即状态的改变不需要时间; 当事件发生时,事物可能需要采取一些动作。,UML状态图表示,事件,事件指的是发生的且引起某些动作(action)执行的事情,这些事情的发生可能会引起状态的转换。 事件可以分为以下几种: 信号事件:一个

43、对象对另一个对象信号的接收,导致一个信号事件。把这样的事件的型构(signature)放在由它所触发的操作上。 调用事件:对操作调用的接收,导致一个调用事件。这样的操作由接收事件的对象实现。 时间事件:在指定时间(经常是当前状态的入口)后,经过了一定的时间或到了指定日期/时间,导致一个时间事件。 改变事件(条件变为真事件):用布尔表达式描述的指派条件变为真,就导致一个改变事件。无论表达式的值何时由假变成真,事件都发生。可以把其看作是连续测试条件,直到它为真。,事件的表示,事件的定义格式如下: 事件名(用逗号分隔的参数列表) 参数的格式如下: 参数名:类型表达式 通常事件后面还跟有一个监护条件(

44、guard condition),它是一个布尔表达式。当事件发生后,还要监测其监护条件,如果监护条件为假,则该事件不触发状态转换,并且事件丢失。,事件动作,动作是在状态内或在状态转化时所做的操作 ,一个动作可能是: 执行对象的一个操作,如设置或修改本对象的一个属性; 调用另一个对象的一个公共操作; 产生发送给分析范围之外的事件(例如,操作员、硬件设备或在另一个系统/子系统中的对象); 向一个对象发送信号; 创建或撤消另一个对象;,动作表达式,动作表达式指在事件后面放置一条斜线,后面描述希望执行的动作, when(温度120度)/测试设备( ):表示当when(温度120度)事件发生后,要执行的

45、动作表达式是测试设备()。 如果动作表达式包含的动作不止一个,只要将它们之间用逗号分割开就可以了。 假设当when(温度120度)事件发生后,要执行的动作表达式是测试设备并且发送通知,则其表达式如下: when(温度120度)/ 测试设备(),发送通知(),状态,状态是对象生命期的一个阶段,在该阶段中该对象要满足一些特定的条件,并可从事特定的活动。状态图中有一个初始状态和多个终止状态; 状态名称分栏放置状态名,在同一张状态图里不允许相同名称的状态。 没有名称的状态是匿名的,同一张图中的各匿名状态被认为是互不相同的。 内部转换分栏给出对象在这个状态中所执行的动作、活动和内部转换 。,状态内的要素

46、,入口动作表示在进入状态时, 执行相应的动作表达式规定的动作。 出口动作表示在退出状态时, 执行相应的动作表达式规定的动作。,活动是在一个状态内执行的 处理过程,是一个动作或动 作的集合。,对象收到事件后,不会 引起对象状态的变化, 却会触发对象的响应, 这种情形被称为内部 转换。,延迟事件是指在当前状 态下暂不处理、但将推 迟到该对象的另一个状 态下排队处理的事件。,状态转换,转换是两个状态之间的一种关系,表示当一个特定事件出现,且如果满足一定的条件(如果有的话),对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作。 把转换表示成从源状态出发并在目标状态上终止的带箭头的

47、实线,并把事件型构、监护条件和动作表达式放在其上: (1)right_mouse_down(location)location in window/object:= pick_object(location); 当鼠标落在窗口中,且按下了右键,就引发了一个转换并把所选中的对象赋给了变量object。 (2)object.highlight; 调用object的highlight操作,引发了一个状态转换。该转换无监护条件,转换也不执行任何动作。,组合状态图,一个状态可以进一步细分为很多子状态。 组合状态是由两个或多个子状态构成的状态,而且子状态还可以是组合状态。 子状态之间可以拥有“and”和“

48、or”两种关系。 对象处于组合状态s1 and s2,当且仅当对象既处于子状态1,又处于子状态2;对象处于组合状态s1 or s2,当且仅当对象处于子状态1或子状态2。,状态图之间的消息,状态图间的消息发送可以通过动作或在状态图间的虚线箭头来表示 两种表示方法: 从源对象的状态转移画虚线箭头至目标对象的边缘,然后在目标对象中画一条状态转移线表示收到指定的消息 从源对象画虚线箭头到目标对象,表示在执行过程中的某一时刻源对象发送消息给目标对象,状态图实例:电梯,状态图实例:机器人,状态图实例,请给出开关日光灯的状态迁移图请给出调节电子表时间的类图和状态迁移图,活动图,UML活动图类似传统的流程图,

49、显示出活动、判定点和分支,可用来对类中的方法、用例或企业业务过程建模。 UML活动图的符号: 起始点:实心圆圈代表; 终点:带有外边界的实心圆代表; 执行的活动:圆角矩形框代表,如起床、锁门; 活动转移:箭头代表,用于对活动发生的顺序建模。 判定:菱形代表,或直接从一个活动中引出可能的路径。表示对条件进行判断,根据判定结果再决定执行哪条路径。 并发活动:用与路径垂直的横线表示;,活动图实例,带泳道的活动图,为了表达活动图中的活动分别由哪些对象来负责,可以将活动图分割成多个平行的段,这些段被称为泳道(swim lane)。 每个泳道的顶部可以显示角色名,该角色负责的活动放在各个角色的泳道中。 一个泳道到另一个泳道之间可以发生转移。,构件图,构件是定义了良好接口的物理实现单元,是系统中可替换的部分。 在UML中,用构件表示将类和接口等逻辑元素打包而形成的物理模块。,包名,构件名,构件,构件和类,相同点: 都有名称 都能实现一组接口 都可以参与依赖、关联、继承和聚合关系 都可以有实例 都可以参与交互 不同点: 类表示逻辑抽象,而构件表示存在于比特空间中的物理抽象。 构件表示的是物理模块,而不是逻辑模块,与类处于不同的抽象级别。 类可以拥有属性和操作,而构件通常仅拥有通过其接口向外提供或请求的操作。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 软件工程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报