1、第十章 面向对象 (1),2,软件工程 - 2012 - 第十章 面向对象(1),第十章内容概要,面向对象方法学概述 UML基础 面向对象的需求提取 面向对象分析 面向对象设计的准则 启发规则 软件重用 面向对象系统设计 面向对象对象设计,3,软件工程 - 2012 - 第十章 面向对象(1),4,软件工程 - 2012 - 第十章 面向对象(1),Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通过消息进行通信” 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成; 把所有对象都划分成各种对象类(简称为类,class),每个
2、对象类都定义了一组数据和一组方法; 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级); 对象彼此之间仅能通过传递消息互相联系。,什么是面向对象,5,软件工程 - 2012 - 第十章 面向对象(1),对象:在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。 对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。,面向对象的概念,6,软件工程 - 2012 - 第十章 面向对象(1),对象的形象表示:,面向
3、对象的概念,7,软件工程 - 2012 - 第十章 面向对象(1),对象的定义: 定义1:对象是具有相同状态的一组操作的集合。 定义2:对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。 定义3:对象=(ID,MS,DS,MI)。其中,ID是对象的标识或名字,MS是对象中的操作集合,DS是对象的数据结构,MI是对象受理的消息名集合(即对外接口)。,面向对象的概念,8,软件工程 - 2012 - 第十章 面向对象(1),对象中的数据表示对象的状态,一个对象的状态只能由该对象的操作来改变。每当需要改变对象的状态时,只能由
4、其他对象向该对象发送消息。对象响应消息时,按照消息模式找出与之匹配的方法,并执行该方法。,面向对象的概念,9,软件工程 - 2012 - 第十章 面向对象(1),与面向对象相关的主要概念: 标识身份(Identity); 抽象(Abstraction); 分类(Classification); 封装(Encapsulation); 继承(Inheritance); 多态(Polymorphism); 这些概念按与面向对象本质相关的程度排列;,面向对象的概念,10,软件工程 - 2012 - 第十章 面向对象(1),标识身份:意指数据与操作都被组织到相互分离、区别开来的问题空间实体当中。没有身份
5、,对象就没有和某问题空间相联系,就仅仅是某个抽象数据类型,丧失了与问题求解相关的语义,无法与其他问题空间对象相联系,也无法被集成进整个开发求解过程。,面向对象的概念,11,软件工程 - 2012 - 第十章 面向对象(1),抽象:这个要素并非面向对象独有,是在描述系统时应在一定程度上遵循的原则;,面向对象的概念,12,软件工程 - 2012 - 第十章 面向对象(1),分类:把具有相同属性类型和操作的对象组成一组。 分类本身具有主观性; 要针对待解问题与其解决方案来确定如何分类; 是组织问题空间知识的一种方法; 类(class):“类”就是对具有相同数据和相同操作的一组相似对象的定义。 实例(
6、instance):实例就是由某个特定的类所描述的一个具体的对象。,面向对象的概念,13,软件工程 - 2012 - 第十章 面向对象(1),封装:类封装了它的实例对象的属性与行为,隐藏实现细节。 对象具有封装性的条件如下: 有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。 有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。 受保护的内部实现。,面向对象的概念,14,软件工程 - 2012 - 第十章 面向对象(1),继承:是指能够直接获得已有的性质和特征,而不必重复定义它们。 根据各类间的异同点把它们组成层
7、次结构,从而表示:位于下层的类继承了上层中某类的特点。 继承是子类自动地共享基类中定义的数据和方法的机制。 或者反方向来看,是从“特殊性”概念归纳“一般性” 概念的一种机制。 抽象类,面向对象的概念,15,软件工程 - 2012 - 第十章 面向对象(1),使用继承的好处: 继承性使得相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息; 易于修改软件; 方便新的应用系统的开发; 利于软件重用;,面向对象的概念,16,软件工程 - 2012 - 第十章 面向对象(1),多态:类的一个行为在其子类中有不同表现形式。 行为(Behavior):是指一个对象所能执行的动作或者变换;
8、操作(Operation):行为在类的定义中进一步被明确为操作; 方法(Method):一个操作在某个类中的一种特定实现被称为一个方法;,面向对象的概念,17,软件工程 - 2012 - 第十章 面向对象(1),Polymorphism means “many forms”. Polymorphic operations have many implementations. A concrete subclass must implement all the abstract operations that it inherits. With polymorphism, objects of
9、different classes respond to the same message in different ways. Concrete operations may also be polymorphic but this is bad style.,18,软件工程 - 2012 - 第十章 面向对象(1),19,软件工程 - 2012 - 第十章 面向对象(1),与人类习惯的思维方法一致: 传统的程序设计技术忽略了数据和操作之间的内在联系,用这种方法所设计出来的软件系统其解空间与问题空间并不一致,难于理解。 面向对象的软件技术以对象(object)为核心 , 而对象是数据和操作的
10、统一体,是对现实世界实体的正确抽象。 面向对象的设计方法与传统的面向过程的方法有本质不同:,面向对象方法学的优点,20,软件工程 - 2012 - 第十章 面向对象(1),面向对象的环境提供了强有力的抽象机制,便于用户在利用计算机软件系统解决复杂问题时使用习惯的抽象思维工具; 面向对象方法学中普遍进行的对象分类过程,支持从特殊到一般的归纳思维过程; 面向对象方法学中通过建立类等级而获得的继承特性,支持从一般到特殊的演绎思维过程; 先设计出由抽象类构成的系统框架,随着认识深入和具体化再逐步派生出更具体的派生类符合人们认识客观世界解决复杂问题时逐步深化的渐进过程。,面向对象方法学的优点,21,软件
11、工程 - 2012 - 第十章 面向对象(1),稳定性好: 传统的软件开发方法以算法为核心,建立起来的软件系统的结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。 面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比较稳定的。,面向对象方法学的优点,22,软件工程 - 2012 - 第十章 面向对象(1),可重用性好: 传统的软件重用技术是利用标准函数库,但是,标准函数缺乏必要的“柔性”。 即使是具有功能内聚性的模块也并不是自含的和独立的,相反,它必须运行在相应的数据结构上。 面
12、向对象方法所使用的对象是数据和操作的统一体,因此,对象具有很强的自含性。对象固有的封装性和信息隐藏机制,使得对象的内部实现与外界隔离,具有较强的独立性。 面向对象的软件技术在利用可重用的软件成分构造新的软件系统时,有很大的灵活性:实例化、继承。,面向对象方法学的优点,23,软件工程 - 2012 - 第十章 面向对象(1),较易开发大型软件产品: 面向对象范型中构成软件系统的每个对象就像一个微型程序,可以把一个大型软件产品分解成一系列本质上相互独立的小产品来处理 。,面向对象方法学的优点,24,软件工程 - 2012 - 第十章 面向对象(1),可维护性好: 面向对象的软件稳定性比较好。 面向
13、对象的软件比较容易修改:封装,继承和多态性。 面向对象的软件比较容易理解。 易于测试和调试。,面向对象方法学的优点,25,软件工程 - 2012 - 第十章 面向对象(1),面向对象开发的优势: 易于表示含有大量交互的系统; 能用相同术语来描述问题及其解决方案:对象连接了问题空间和求解空间; 开发过程的不同阶段都能使用同一种术语:对象连接了各开发阶段; 面向对象是一种关于问题及其解答该如何表述的哲学; 面向对象不是一种软件生命周期模型。,使用面向对象方法的开发过程,26,软件工程 - 2012 - 第十章 面向对象(1),需求获取; 面向对象分析:确定问题空间对象、它们间的关系、属性和操作,建
14、立分析模型; 系统设计:确定子系统和大多数重要的求解空间对象; 对象设计:精确细化上述两组对象,并确定完成系统所需的其他求解空间对象; 面向对象编码与测试;,使用面向对象方法的开发过程,27,软件工程 - 2012 - 第十章 面向对象(1),使用面向对象方法的开发过程,喷泉模型,28,软件工程 - 2012 - 第十章 面向对象(1),第十章内容概要,面向对象方法学概述 UML基础 面向对象的需求提取 面向对象分析 面向对象设计的准则 启发规则 软件重用 面向对象系统设计 面向对象对象设计,29,软件工程 - 2012 - 第十章 面向对象(1),模型(Model) :为了理解事物而对事物作
15、出的一种抽象,是对事物的一种无歧义的书面描述。 模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。 模型是一种思考工具,把知识规范地表示出来。 建模(Modeling):捕捉系统本质的过程; 建模: 直观地记录下认知和求解过程; 支持团队成员间的有效沟通; 为重复利用各阶段积累的智力成果创造有利条件; 建模:简化了认知过程,化简了求解过程;,面向对象建模,30,软件工程 - 2012 - 第十章 面向对象(1),31,软件工程 - 2012 - 第十章 面向对象(1),32,软件工程 - 2012 - 第十章 面向对象(1),33,软件工程 - 2012 -
16、 第十章 面向对象(1),34,软件工程 - 2012 - 第十章 面向对象(1),35,软件工程 - 2012 - 第十章 面向对象(1),36,软件工程 - 2012 - 第十章 面向对象(1),37,软件工程 - 2012 - 第十章 面向对象(1),38,软件工程 - 2012 - 第十章 面向对象(1),39,软件工程 - 2012 - 第十章 面向对象(1),40,软件工程 - 2012 - 第十章 面向对象(1),41,软件工程 - 2012 - 第十章 面向对象(1),42,软件工程 - 2012 - 第十章 面向对象(1),在不同类型系统中的应用 主要用于软件密集型系统,也可
17、用于对非软件系统进行建模: 信息系统 技术系统 嵌入式实时系统 分布式系统 商业系统,面向对象建模符号系统UML,43,软件工程 - 2012 - 第十章 面向对象(1),在软件开发的不同阶段中的应用 需求分析 分析 设计 构造 测试,面向对象建模符号系统UML,44,软件工程 - 2012 - 第十章 面向对象(1),UML2.0的13种图,面向对象建模符号系统UML,45,软件工程 - 2012 - 第十章 面向对象(1),类模型:描述系统内部对象的特征、对象之间的相互关系以及对象所属的每个类的属性和操作,捕获系统的静态特征。 类图:对类及其关系进行建模。 对象图:显示了单独的对象及其关系
18、。 类图相当于对象图的无限集合。,类建模,46,软件工程 - 2012 - 第十章 面向对象(1),类图类表示法,47,软件工程 - 2012 - 第十章 面向对象(1),类图类表示法小结,类表示法小结,48,软件工程 - 2012 - 第十章 面向对象(1),链接(link):是对象间物理上或概念上的连接; 关联(association):描述了有共同结构和语义的一组链接; 链接是关联的实例。 在问题陈述中,链接和关联经常以动词形式出现。,类建模链接和关联,49,软件工程 - 2012 - 第十章 面向对象(1),类建模链接和关联,Person,name,Company,name,OwnsS
19、tock,*,*,类图,John:Person,name=“John”,对象图,多对多关联,50,软件工程 - 2012 - 第十章 面向对象(1),多重性(multiplicity):指定了一个类与关联类的单个实例可能相关的实例数目。 “1”、“*”、“01”、“35” 不要在软件开发早期过度担心多重性。首先确定类和关联,然后再确定多重性。,类建模链接和关联,51,软件工程 - 2012 - 第十章 面向对象(1),关联终端名(association end):指定了关联终端的名字。 关联终端名在问题陈述中常以名词形式出现。 关联终端名的使用是可选的,但是对于同一个类的两个对象之间的关联来说
20、,关联终端名是必需的。关联终端名也可以区分同一对类之间的多重关联。 在创建类图时,应该正确使用关联终端名,不应该为每个引用引入一个独立的类。,类建模关联终端名,52,软件工程 - 2012 - 第十章 面向对象(1),类建模关联终端名,53,软件工程 - 2012 - 第十章 面向对象(1),关联类(association class):是一种关联,也是一种类。描述了关联的属性和操作。 不应把关联类的属性建模为类的属性。,类建模关联类,54,软件工程 - 2012 - 第十章 面向对象(1),限定关联(qualified association):是这样一种关联,其中被称为限定符(qualif
21、ier)的属性会消除在“多”关联端上对象的歧义。 限定符在目标对象间进行选择,将多重性从“多”降到“1”。,类建模限定关联,55,软件工程 - 2012 - 第十章 面向对象(1),泛化(generalization)是指类(父类,superclass)与其一个或多个变体(子类,subclass)之间的关系。 在类的层次结构中,子类继承(inherit)其父类的特征。 不要把子类嵌套得过深。,类建模泛化和继承,56,软件工程 - 2012 - 第十章 面向对象(1),要尽量避免n元关联大部分关联可以分解成带限定符和属性的二元关联。 n元关联的UML符号是以直线连接相关类的一个菱形。 在实现时要
22、把n元关联提升为类。,高级类建模n元关联,57,软件工程 - 2012 - 第十章 面向对象(1),高级类建模n元关联,58,软件工程 - 2012 - 第十章 面向对象(1),聚合(aggregation):是一种强类型关联,其中一个聚集对象由多个部件构成。 聚合刻画了装配件(assembly)类与某个部件类相关联的一种关系。 聚合具有传递性(transitivity)和反对称性(antisymmetric)。,高级类建模聚合,59,软件工程 - 2012 - 第十章 面向对象(1),组合(composition):是有两个约束的聚合: 一个部件至多属于一个装配件; 一个部件一旦被指定给一个
23、装配件,它就与装配件有着共同的生存期。,高级类建模组合,60,软件工程 - 2012 - 第十章 面向对象(1),抽象类(abstract class):是指没有直接的实例的类,但其子孙类有直接的实例。 具体类(concrete class):是指可以实例化的类,可以有直接的实例。 在UML中,抽象类名用斜体表示,也可以在名称下面或后面放置关键词abstract。 抽象类可以定义被子类继承的方法。 抽象类可以定义操作签名,而不提供相应的方法。我们称此为抽象操作(abstract operation)。每个具体子类必须提供自己的实现。 避免使用具体父类是一种好的做法。,高级类建模抽象类,61,软
24、件工程 - 2012 - 第十章 面向对象(1),高级类建模抽象类,62,软件工程 - 2012 - 第十章 面向对象(1),约束(constraint)是涉及模型元素的一种布尔条件,这些元素包括对象、类、属性、链接、关联和泛化集等。 约束限制了元素可以假定的取值。,高级类建模约束,63,软件工程 - 2012 - 第十章 面向对象(1),高级类建模约束,64,软件工程 - 2012 - 第十章 面向对象(1),包(package)是一组拥有公共主题的元素(包括类、关联、泛化和更小的包)。 包可以分割模型,使其更易理解和管理。 设计包时经常会用下面这些技巧: 仔细刻画每个包的作用域; 在单个包
25、中定义每个类; 让包变得内聚。,高级类建模包,65,软件工程 - 2012 - 第十章 面向对象(1),状态模型刻画了对象及其关系随着时间的变化,描述响应外部激励而发生的操作序列。 状态模型由多个状态图组成。 每个类对应一个状态图,描述对应用程序来说是重要的那些时序行为。,状态建模,66,软件工程 - 2012 - 第十章 面向对象(1),事件(event)是指在某个时刻发生的事情。 两个因果无关的事件是并发的(concurrent)。 常见的事件类型: 信号事件(signal event):信号是指从一个对象到另一个对象的明确的单向信息流动;信号事件是发送或接收信号的事件。 变更事件(cha
26、nge event):是指由满足布尔表达式而引起的事件。 时间事件(time event):是指在绝对时间上或在某个时间间隔内发生的事情所引起的事件。,状态建模事件,67,软件工程 - 2012 - 第十章 面向对象(1),状态建模事件,68,软件工程 - 2012 - 第十章 面向对象(1),状态(state)是对象取值和链接的抽象。 UML中用包含可选状态名的圆角矩形表示状态。 每个对象在某个时刻只能处在一种状态下,在给定时刻,类的不同对象可以存在于多个状态中。 状态确定对象对输入事件的响应,响应可能包括行为调用或状态变化。 事件表示时间点,状态表示时间段。状态对应着对象接收的两次事件之间
27、的时间间隔。,状态建模状态,69,软件工程 - 2012 - 第十章 面向对象(1),迁移(transition)是指从一个状态到另一个状态的瞬时变化。从源状态到目标状态一发生变化,就说触发(fire)了迁移。 当事件发生时,迁移就会触发(除非有可选的警戒条件会忽略事件)。 警戒条件(guard condition)是指为了让迁移发生而必须为真的布尔表达式。 当事件发生时,警戒条件就会触发,但只有在条件为真的时候才会发生迁移。警戒条件仅在事件发生时检查一次。,状态建模迁移和状态,70,软件工程 - 2012 - 第十章 面向对象(1),状态建模迁移和状态,71,软件工程 - 2012 - 第十
28、章 面向对象(1),状态图(state diagram)的结点是状态,有向弧是状态间的迁移。 状态图详细说明了由事件序列引起的状态序列。 状态模型(state model)包含了多个状态图,每个类一个状态图,状态图建模重要的时序行为。 只为那些有时序意义的类构建状态图。如果某类对不同的事件响应不同,或有一个以上的状态,那么它就有重要的时序行为。,状态建模状态图,72,软件工程 - 2012 - 第十章 面向对象(1),状态图可以表示连续循环或单触发生存期,在连续循环中不关心循环是如何开始的。 单触发状态图表示有着有限生存期的对象,有初始状态(实心圆)和终止状态(靶心)。,状态建模单触发状态图,
29、73,软件工程 - 2012 - 第十章 面向对象(1),效应(effect):是对为响应事件而执行的行为的引用。 活动(activity):是由效应触发的实际行为。 活动执行的条件包括:迁移、进入或退出某状态以及收到状态内的其他事件。 活动表示法是“/”和活动的名称(或描述),跟在引起活动的事件后面。,状态建模状态图行为,74,软件工程 - 2012 - 第十章 面向对象(1),do活动:是指持续了一段时间的活动。 do活动只会在某个状态内出现,不能附在迁移上。 进入和退出活动:绑定在状态入口和出口的活动。 如果某状态有多个活动,则执行的顺序为:到达迁移上的活动、进入活动、do活动、退出活动
30、、输出迁移上的活动。,状态建模状态图行为,75,软件工程 - 2012 - 第十章 面向对象(1),状态建模状态图行为,76,软件工程 - 2012 - 第十章 面向对象(1),状态建模状态图,77,软件工程 - 2012 - 第十章 面向对象(1),简单手表“设置时间” 的状态图,78,软件工程 - 2012 - 第十章 面向对象(1),当要刻画的问题复杂时,可以使用子状态机(submachine)来组织模型。 调用子状态机的UML表示法是列出局部状态名,后面跟着冒号和子状态机。,高级状态建模嵌套状态图,dispense: DispenseItem,79,软件工程 - 2012 - 第十章
31、面向对象(1),可以嵌套状态以显示其共同特性、共享其行为。 组合状态(composite state)名标识外部轮廓,轮廓完全围住嵌套状态。 每个嵌套状态会接收其组合状态的输出迁移。,高级状态建模嵌套状态,80,软件工程 - 2012 - 第十章 面向对象(1),高级状态建模嵌套状态,81,软件工程 - 2012 - 第十章 面向对象(1),交互模型描述对象如何交互才能产生有用的结果。 交互可以在不同的抽象层次上建模: 在较高层次上,用例描述系统如何与外部参与者交互; 顺序图提供了更多的细节,显示一组对象间随着时间变化所交换的消息; 活动图提供更深入的细节,显示某次计算中处理步骤之间的控制流。
32、,交互建模,82,软件工程 - 2012 - 第十章 面向对象(1),参与者(actor):是系统的直接外部用户直接与系统通信的一个对象或一组对象,但不是系统的一部分。 每个参与者都表示以某种方式对系统起作用的那些对象。 参与者可以是人、设备和其他系统。 建模参与者有助于定义系统,识别系统内部及其边界上的对象。,用例模型参与者,83,软件工程 - 2012 - 第十章 面向对象(1),用例(use case):是系统通过与参与者的交互可以提供的一段连贯的功能。 每个用例会涉及一个或多个参与者以及系统本身。 用例涉及系统和其参与者之间的消息序列。 用例有固定的消息序列,但也会有一些变体。用例把与
33、一部分系统功能相关的所有行为组合在一起:普通主线行为、普通行为的变体、异常条件、错误条件和请求取消。,用例模型用例,84,软件工程 - 2012 - 第十章 面向对象(1),Use Case的描述: Use Case的名字:唯一标识 参与的Actor(s):标出其中的主动Actor 入口条件:Use Case启动前需要的条件 事件流:Use Case的动作序列 出口条件:完成后应满足的条件 特殊需求:非功能性需求,用例模型用例描述,85,软件工程 - 2012 - 第十章 面向对象(1),用例模型用例描述,use case name,use case identifier,brief desc
34、ription,the actors involved in the use case,the system state before the use case can begin,The actual steps of the use case,the system state when the use case can has finished,alternative flows,86,软件工程 - 2012 - 第十章 面向对象(1),事件流中的分支:Keyword If,87,软件工程 - 2012 - 第十章 面向对象(1),事件流中的循环:Keyword For,88,软件工程 -
35、 2012 - 第十章 面向对象(1),事件流中的循环:Keyword While,89,软件工程 - 2012 - 第十章 面向对象(1),用例模型用例图,用例图包括一组用例和一组参与者,主要用于描述系统和外部环境的关系。,90,软件工程 - 2012 - 第十章 面向对象(1),用例模型用例模型的准则,首先确定系统边界。 确保关注参与者。 每个用例必须给用户提供价值。 关联用例和参与者。 记住用例是非形式化的。 用例可以结构化。,91,软件工程 - 2012 - 第十章 面向对象(1),高级交互建模用例关系,包含(include)关系将一个用例合并到另一个用例的行为序列中。 被包含的用例就
36、像是子程序。,92,软件工程 - 2012 - 第十章 面向对象(1),高级交互建模用例关系,扩展(extend)关系给用例添加增量行为。 将常规动作放在一个基本用例中,将非常规动作放在其扩展用例中。 扩展用例会把自己加入基用例中,而不是基用例显式地合并扩展用例。,93,软件工程 - 2012 - 第十章 面向对象(1),What is interest about extendis that the base use case does not know anything about the extension use cases. It just provides hooks for th
37、em. In fact, the base use case is perfectly complete without its extensions. This is very different from include, where the base used cases were incomplete without their inclusion use cases.,extendVs. Include,94,软件工程 - 2012 - 第十章 面向对象(1),高级交互建模用例关系,泛化(generalization)可以显示通用用例的一个特殊变体。 父用例表示通用的行为序列,通过插
38、入额外的步骤或定义步骤,子用例特化父用例。,95,软件工程 - 2012 - 第十章 面向对象(1),高级交互建模用例关系,用例关系的准则:不要过度使用用例关系,更不要将用例关系用到编程当中。用例的目标是澄清需求。 用例泛化:如果一个用例有几种变体,那么就用抽象用例建模公共的行为,再特化每种变体。 用例包含:如果一项用例包含有一段定义良好且有可能用在其他场合的行为片段,那么就该为该行为定义一项用例,并把该用例包含在原始用例中。 用例扩展:如果用可选特性来定义一项有意义的用例,那么要把基行为建模为用例,并用扩展关系来增加特性。 包含关系和扩展关系:都可以把行为分解成较小的片段。但是,包含关系隐含
39、着被包含行为是配置系统的一个必要的部分,而扩展关系暗示着没有增加的行为的系统也是有意义的。,96,软件工程 - 2012 - 第十章 面向对象(1),顺序模型,顺序模型详细描述用例的主题。 有两种顺序模型:场景和顺序图。,97,软件工程 - 2012 - 第十章 面向对象(1),顺序模型场景,场景(scenario)是指系统在某个特定的执行期内所发生的一系列事件。 场景可以看作是用例的一次特定执行。 场景可以表示为一列文本语句。 在开发的早期阶段应该在高层表达场景;在后续阶段可以显示确切的消息。,98,软件工程 - 2012 - 第十章 面向对象(1),顺序模型顺序图,顺序图(sequence
40、 diagram)显示了交互的参与者以及参与者之间的消息序列。 一个对象通过发送消息与其他对象相互作用。一个对象对消息的接收触发一个操作的执行,从而可能给其他对象发消息。 顺序图对识别用例 中的附加对象很有用: 包含在用例中的对象称为参与对象; 顺序图展示了这些对象间传送消息的时间顺序,反映了对象之间的一次特定交互过程。,99,软件工程 - 2012 - 第十章 面向对象(1),顺序模型顺序图,每个参与者以及系统都用一条垂直的生命线(lifeline)表示; 每条消息用从发送方指向接收方的水平箭头表示; 时间从上往下延伸,但间距是不相关的; 图中只显示了消息的顺序,而不是它们的准确时间。,10
41、0,软件工程 - 2012 - 第十章 面向对象(1),顺序模型顺序图,101,软件工程 - 2012 - 第十章 面向对象(1),顺序模型顺序图,每个用例需要一张或多张顺序图来描述其行为。每张顺序图显示用例的一个特定的行为序列。 顺序图可以显示大规模的交互,但这样的交互常会包含许多独立的可以按不同方式进行组合的任务。无需重复信息就可以为每项任务绘制一张独立的顺序图。 也要为用例内部的每种异常绘制一张顺序图。,102,软件工程 - 2012 - 第十章 面向对象(1),顺序模型顺序图,103,软件工程 - 2012 - 第十章 面向对象(1),顺序模型顺序图,104,软件工程 - 2012 -
42、 第十章 面向对象(1),顺序图示例:简单手表调时,105,软件工程 - 2012 - 第十章 面向对象(1),顺序图示例:一台打印服务器,106,软件工程 - 2012 - 第十章 面向对象(1),顺序模型,顺序模型的准则: 至少为每个用例编写一种场景; 把场景抽象为顺序图; 划分复杂的交互; 为每种错误条件绘制一张顺序图。,107,软件工程 - 2012 - 第十章 面向对象(1),高级交互建模带有被动对象的顺序图,主动对象在发送消息之后还保持活动状态,并可以响应其他消息。 所有的对象并不总是主动的,多数是被动的对象:没有自己的控制线程,在调用时才会被激活。一旦操作完成,控制权就会返回给调
43、用者,被动对象就会变成不活动的。,108,软件工程 - 2012 - 第十章 面向对象(1),高级交互建模带有被动对象的顺序图,UML用细长的矩形条表示对象执行的时间段。这个时间段被称为激活(activation)或控制焦点(focus of control)。 对象存在但不活动的时间段用虚线表示,对象存在的整个时段被称为生命线(lifeline)。,109,软件工程 - 2012 - 第十章 面向对象(1),高级交互建模带有临时对象的顺序图,UML表示创建的方法是,把对象符号放在表示创建此对象的调用的箭头头部。 一个大“X”标记表示顺序图中被销毁对象生命周期的结束。“X”放在销毁对象的调用箭
44、头的头部;如果对象自行销毁并将控制权返回给另一个对象,那么“X”就放在返回箭头的尾部。,110,软件工程 - 2012 - 第十章 面向对象(1),111,软件工程 - 2012 - 第十章 面向对象(1),112,软件工程 - 2012 - 第十章 面向对象(1),113,软件工程 - 2012 - 第十章 面向对象(1),114,软件工程 - 2012 - 第十章 面向对象(1),115,软件工程 - 2012 - 第十章 面向对象(1),116,软件工程 - 2012 - 第十章 面向对象(1),也是用来描述系统中对象间的动态协作关系; 协作图侧重说明哪些对象间有消息传递; 顺序图侧重表
45、述在某情况下对象间传递消息的时序性; 协作图中要给消息编号来标明消息的执行顺序;,协作图简介,117,软件工程 - 2012 - 第十章 面向对象(1),协作图示例:打印服务器,118,软件工程 - 2012 - 第十章 面向对象(1),协作图中使用的消息层次编号能反映激活的嵌套性质,这在顺序图中能显式地表示出来。,119,软件工程 - 2012 - 第十章 面向对象(1),活动模型,活动图(activity diagram)显示了组成复杂过程的步骤序列。 与顺序图类似,活动图可以显示控制流,但专注于操作而不是对象。 活动图在设计算法和工作流的早期阶段最为有用; 类似流程图,描述一个Use C
46、ase的处理流程; 活动图可以方便地描述控制转移条件以及并行执行等要求。,120,软件工程 - 2012 - 第十章 面向对象(1),活动图示例:打印过程,121,软件工程 - 2012 - 第十章 面向对象(1),活动图示例: 表示并发和同步,122,软件工程 - 2012 - 第十章 面向对象(1),123,软件工程 - 2012 - 第十章 面向对象(1),构件图描述程序代码的组织结构; 构件: 源代码构件 二进制目标代码构件 可执行构件 文档构件,构件图简介,124,软件工程 - 2012 - 第十章 面向对象(1),反映程序代码构件间的依赖关系的构件图,125,软件工程 - 2012 - 第十章 面向对象(1),描述系统中软硬件的物理配置情况和系统体系结构; 结点表示实际的物理设备; 连接表示各物理结点的连接方式; 结点内部表示分配到该结点运行的构件或对象。,配置图简介,126,软件工程 - 2012 - 第十章 面向对象(1),描述一个系统的物理体系结构的配置图,