软件工程 第四章 面向对象技术

128
软软软软 1 软软软软 软软软 软软软软软软 4.1 面面面面面面面 4.2 Rational 面面面面 统一 4.3 UML 面面面面 统一

description

软件工程 第四章 面向对象技术. 4.1 面向对象的概念 4.2 Rational 统一开发过程 4.3 UML 统一建模语言. 4.1 面向对象的概念. 客观世界中的应用问题面对的主体都是物理的或概念的 实体 。 从这些实体出发,分析实体的 作用 、 责任 以及它们之间 协作 ,从而找出问题的解,是很自然的。 面向对象技术就是适合用这种方式分析和解决问题的方法。它的基石就是 问题领域中识别出来的各种对象 。依赖这些对象提供的服务和对象之间相互的协同(关系),实现期望的功能。 面向对象技术能够在解决方案中直接模拟问题领域,并与人类的思维习惯相一致。. - PowerPoint PPT Presentation

Transcript of 软件工程 第四章 面向对象技术

Page 1: 软件工程 第四章  面向对象技术

软件工程 1

软件工程第四章 面向对象技术4.1 面向对象的概念4.2 Rational统一开发过程4.3 UML统一建模语言

Page 2: 软件工程 第四章  面向对象技术

软件工程 2

客观世界中的应用问题面对的主体都是物理的或概念的实体。 从这些实体出发,分析实体的作用、责任以及它们之间协作,从而找出问题的解,是很自然的。 面向对象技术就是适合用这种方式分析和解决问题的方法。它的基石就是问题领域中识别出来的各种对象。依赖这些对象提供的服务和对象之间相互的协同(关系),实现期望的功能。 面向对象技术能够在解决方案中直接模拟问题领域,并与人类的思维习惯相一致。

4.1 面向对象的概念

Page 3: 软件工程 第四章  面向对象技术

软件工程 3

什么是面向对象 Peter Coad 和 Edward Yourdon 提出面向对象方法的概念: 面向对象 = 对象 + 分类 + 继承 + 消息通信 采用这四个概念开发的软件系统就是面向对象的软件系统。 一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。

Page 4: 软件工程 第四章  面向对象技术

软件工程 4

面向对象范型的特点 面向对象系统中的对象是数据抽象与过程抽象的综合体。 所谓过程抽象是指当使用某个过程时,无需关心过程内部的实现细节,只要知道如何调用该过程以及该过程完成什么功能即可。 所谓数据抽象是指使用结构或记录等方式把某个实体的数据集中起来,使得使用者能够以单元为单位使用数据。 面向对象范型在数据抽象中组织过程抽象。

Page 5: 软件工程 第四章  面向对象技术

软件工程 5

面向对象系统的状态分别保存在各个对象的数据存储中,而不是保存在一些全局变量中。 系统解决问题的控制流包含在各个对象中的操作内。并通过消息传递,控制流从一个对象转移到另一个对象。 算法被分布到各种实体中。通过执行消息传递和对象中的操作实现算法的功能。

Page 6: 软件工程 第四章  面向对象技术

软件工程 6

面向对象的特点 抽象性:对象包含数据抽象和行为抽象; 封装性:信息隐蔽(使用与实现分开); 共享性:

同一个类中所有对象共享相同的数据结构和行为; 同一应用中的对象通过继承关系,共享共同的数据结构和行为; 不同应用中的对象通过复用,共享数据结构和行为。

Page 7: 软件工程 第四章  面向对象技术

软件工程 7

对象( object ) 对象是系统中描述客观事物的实体,是构成系统的一个基本单元,由一组属性值和一组对属性进行操作的服务组成。

对象 = 对象名 +数据 (属性 )+操作 (行为 ) 属性值一般只能通过执行对象的操作来改变。 操作(方法或服务)描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。 对象可以是外部实体、信息结构、事件、角色、组织结构、地点或位置、操作规程等。

Page 8: 软件工程 第四章  面向对象技术

软件工程 8

计算机窗口中的三个多边形对象

(50, 60)

(50, 85)

(35, 60)

(35, 85)

(50, 45)

(60, 35)

(56, 10)

(46, 37)

(10, 50)

(20, 20)(23, 30)

Page 9: 软件工程 第四章  面向对象技术

软件工程 9

表示多边形的三个对象

drawmove(x, y)contains?(aPoint)

(10, 50)(20, 20)(23, 30)

triangle

drawmove(x, y)contains?(aPoint)

(46, 37)(50, 45)(60, 35)(56, 10)

quadrilateral1

drawmove(x, y)contains?(aPoint)

(35, 60)(35, 85)(50, 85)(50, 60)

quadrilateral2

Page 10: 软件工程 第四章  面向对象技术

软件工程 10

类( class ) 把具有相同属性(数据结构)和服务(操作)的对象归在一起就形成了类。 类的定义包括一组数据属性和在数据上的一组合法操作。 属于某一个类的各个对象都是该类的实例 (inst

ance) ,它们都可使用类中的操作。 类定义了各个实例所共有的数据结构,使用类的构造函数,可以在创建该类的实例时初始化这个实例的状态。

Page 11: 软件工程 第四章  面向对象技术

软件工程 11

由两个四边形对象导出一个类

drawmove(x, y)contains?(aPoint)

(46, 37)(50, 45)(60, 35)(56, 10)

quadrilateral1

drawmove(x, y)contains?(aPoint)

(35, 60)(35, 85)(50, 85)(50, 60)

quadrilateral2

drawmove(x, y)contains?(aPoint)

point1point2point3point4

quadrilateral

Page 12: 软件工程 第四章  面向对象技术

软件工程 12

消息( message ) 消息是一个对象向另一个对象传递的信息。有四类消息:发送对象请求接收对象提供服务、发送对象激活接收对象、发送对象询问接收对象、发送对象仅传送信息给接收对象。 消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可能是空的),如 quadrilateral1. move(15, 20) 。 接收消息的实例执行消息中指定的操作,并将形式参数与参数表中相应的值结合起来。

Page 13: 软件工程 第四章  面向对象技术

软件工程 13

继承( inheritance ) 如果某几个类之间具有共性的东西 ( 属性和行为 ) ,抽取出来放在一个泛化类中,将各个类的特有的东西放在特化类中分别描述,则可建立起特化类对泛化类的继承。 继承是使用已有的类定义做为基础建立新类的定义技术。 已有的类可当做泛化类(父类)来引用,则新类相应地可当做特化类(子类)来引用。

Page 14: 软件工程 第四章  面向对象技术

软件工程 14

建立继承结构的好处: 易编程、易理解 代码短 , 结构清晰 易修改 共同部分只要在一处修改即可 易增加新类 只须描述不同部分

怎样建立一个好的继承层次 类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。 当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能需要调整原来的层次结构。

Page 15: 软件工程 第四章  面向对象技术

软件工程 15

a) 建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在已有类汽车中。关系如右图所示。新类是已有类的特殊情形。这时直接让起重车类作为汽车类的子类即可。

起重车类汽车类

汽车

载重车大轿车 救火车 起重车

Page 16: 软件工程 第四章  面向对象技术

软件工程 16

b) 增加一个新类拖拉机。它的底盘、发动机等与汽车不同,但驱动装置、轮胎等与汽车相同。 调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。 车辆是抽象类,相关操作到子类汽车找。。

汽车 拖拉机

车辆汽车

拖拉机

Page 17: 软件工程 第四章  面向对象技术

软件工程 17

c) 另一种情形是在已有类的基础上加入新类,使得新类成为已有类的泛化类。 例如,已经存在三角形类,四边形类,想加入一个多边形类,并使之成为三角形和四边形类的泛化类。

三角形类

四边形类多边形类 六边形

多边形

四边形三角形

Page 18: 软件工程 第四章  面向对象技术

软件工程 18

d) 前三个情况主要是通过查找(应用领域)类库,找到可以原封不动地继承的类或可以通过调整继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的已有类,就从新开始完全独立地建立一个类。

如果一个类需要用到多个现有类的特征,可以从多个类中继承,称为多继承。 例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。

多继承

Page 19: 软件工程 第四章  面向对象技术

软件工程 19

多态性和动态绑定 对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。

退休者 教师

退休教师

Page 20: 软件工程 第四章  面向对象技术

软件工程 20

多态性指同名的函数或操作可在不同类型的对象中有各自相应的实现。例如a) 整数“ +” :整数加法b) 浮点数“ +” :浮点数加法c) 字符串“ +” :字符串连接d) 点“ +” :两个点的坐标位置分别叠加

具有多态的函数或操作在运行时才根据实际的对象类型,执行相应实现程序的连接,此即动态绑定。

Page 21: 软件工程 第四章  面向对象技术

软件工程 21

例如,想要在屏幕上画一系列多边形,多态性允许发送消息 draw ,根据消息接收对象的类型不同,画出不同的多边形。 draw针对的是一系列的类型(类族)而不仅仅是一个类型。

多态性的实现有 2 种: 利用继承关系,把所有数据类型当作一个抽象数据类型的子类型。

Page 22: 软件工程 第四章  面向对象技术

软件工程 22

利用模板机制,把所有可能的数据类型用一个参数化的数据类型来代替。 动态绑定保证在程序执行时实施与对象 P 连接的操作。如果 P 是矩形类的实例,则执行与矩形连接的操作,如果 P 是三角形类的实例,则执行与三角形连接的操作。 动态绑定把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。

Page 23: 软件工程 第四章  面向对象技术

软件工程 23

4.2 Rational 统一开发过程1. 最佳软件开发实践 为了以一种更好的、迭代的、可预测的方式开发软件产品,总结了软件开发的最佳实践:

1) 迭代式软件开发;2) 需求管理;3) 基于构件的软件体系结构;4) 建立软件可视化模型;5) 不断验证软件质量;6) 控制变更。

Page 24: 软件工程 第四章  面向对象技术

软件工程 24

2. Rational 统一开发过程 软件开发过程的作用是:1) 成为开发组活动顺序的向导。2) 详细说明需要开发哪些制品,何时开发。3) 指导每一个成员及整个开发组的工作。4) 提供监控和度量项目产品和活动所依据的准则。

如果没有一个良好定义的过程,开发组将各行其是,开发成功与否完全依赖个别优秀的人才,这不是能够长久的。

Page 25: 软件工程 第四章  面向对象技术

软件工程 25

Rational 统一开发过程( RUP, Rational Unify Process )描述了如何在软件开发组织中严格分配任务和职责的方法。

RUP 是一个过程产品, " 软件过程也是软件。 " RUP 采用二维的过程结构:

横轴表明过程的生存周期,它反映了过程被激活时的动态情况,用周期、阶段、迭代和里程碑表示。纵轴表明过程的静态状况,通过过程构件、活动、工作流、制品和工作人员描述过程。

Page 26: 软件工程 第四章  面向对象技术

软件工程 26

初始 细化 构造 移交阶 段

初始化 细化 #1 细化 #2 构造 #1 构造 #2 构造 #3移交 #1移交 #2

迭代

工作流业务建模需求

分析与设计 实现测试实施配置和变更管理项目管理环境

沿时间轴的组织结构

沿内容轴的组

Page 27: 软件工程 第四章  面向对象技术

软件工程 27

3. 过程的静态描述:过程模型 过程模型中的主要模型元素有 4 种:

工作人员:谁做( Who ) 活动:怎么做( How ) 制品:做什么( what ) 工作流:何时做( when )

1) 过程的中心概念是工作人员,工作人员不是指某一个人,而是指完成工作的角色。工作人员定义人们应履行的行为和职责。

Page 28: 软件工程 第四章  面向对象技术

软件工程 28

2) 活动定义了工作人员所执行的工作。有 3 类步骤:a) 思考步骤b) 执行步骤c) 评审步骤

3) 制品是过程生产、修改或使用的一些信息。RUP 的制品分为 5 个信息集。a) 管理集:计划制品、操作制品b) 需求集:构想文档、项目相关人员需求、用例模型和业务模型

Page 29: 软件工程 第四章  面向对象技术

软件工程 29

c) 设计集:设计模型、软件体系结构描述、测试模型d) 实现集:源代码和可执行程序、相关数据结构和数据文档e) 实施集:安装资料、用户文档、培训材料

4) 工作流用来描述生成结果的活动序列,用以描述工作人员之间的交互。在 RUP 中共有 9 个核心过程工作流,包括 6 个核心工程工作流和 3 个核心支持工作流。

Page 30: 软件工程 第四章  面向对象技术

软件工程 30

a) 业务建模工作流:描述业务过程的本质和执行情形。b) 需求工作流:定义系统构想,使用用例模型和补充规格说明定义系统软件需求,管理系统范围和需求变更。c) 分析和设计工作流:研究实现环境和系统构件的效用,定义软件的组织结构,把需求获取结果转化为实现规格。d) 实现工作流 : 建立代码的分层结构,实现类和对象,进行单元测试和系统集成。

Page 31: 软件工程 第四章  面向对象技术

软件工程 31

e) 测试工作流:根据事先定义的度量和准则检查产品,确认产品是否满足或者超出事先定义并被一致接受的需求。f) 实施工作流:在实际使用环境中测试软件、包装要交付的软件、发布软件产品、培训最终用户及销售人员。

核心支持工作流有a) 项目管理工作流b) 配置和变更管理工作流c) 环境工作流

Page 32: 软件工程 第四章  面向对象技术

软件工程 32

4. 过程的动态描述:迭代开发 将一个大项目分解为可连续应用瀑布模型的几个小部分。在对一部分进行分析、设计、实现并确认后,再对下一部分进行分析、设计、实现和确认。以此进行下去,直到整个项目完成。在 RUP 中,迭代过程分为几个阶段。初始 细化 构造 移交

生存周期构架里程碑生存周期目标里程碑 最初运行能力里程碑 产品发布里程碑时间

Page 33: 软件工程 第四章  面向对象技术

软件工程 33

1) 初始阶段:确定最终产品的构想及其用例,定义项目范围。2) 细化阶段:计划需完成活动和资源,详细说明产品特性并设计软件体系结构。3) 构造阶段:构造整个产品,逐步完善软件体系结构和计划,直到产品(完整的构想)已完全准备好交付给用户。4) 移交阶段:移交产品给用户,包括制造,交付,培训,支持及维护产品。

Page 34: 软件工程 第四章  面向对象技术

软件工程 34

这 4 个阶段构成开发周期,周期结束时产生一代新的软件产品。 软件产品产生于初始开发周期,随着重复执行同样的过程,软件发展到下一代产品,这一时期即为软件的进化周期。

I E C T

I E C T

I E C T

V1

V2

V3

初始开发周期

进化周期

Page 35: 软件工程 第四章  面向对象技术

软件工程 35

5. Rational 统一过程的特点: 用例驱动的、以体系结构(架构)为中心的、迭代和增量的过程。 用例建模技术可以用为大多数项目相关人员理解的形式来表述问题。

参与者( Actor ) 用例( Use Case ) 场景( scenario ) 事件流( event flow )

Actor use case

Page 36: 软件工程 第四章  面向对象技术

软件工程 36

用例和参与者的事例 银行储户通过自动取款机(自动柜员机)提款,转账或检查账户余额。用一组用例表达如下:

转账

提款 检察账户余额储户

Page 37: 软件工程 第四章  面向对象技术

软件工程 37

用例模型 将整个系统或子系统的所有用例,以及与之交互的参与者集合起来构成系统的用例模型。 用例模型给出系统预期功能模型和系统上下文环境模型,它成为开发人员和用户之间的契约。 用例模型的目的是确保系统能处理所有的功能性需求。

Page 38: 软件工程 第四章  面向对象技术

软件工程 38

用例驱动的过程 “用例驱动” 指开发过程是基于用例,从一个工作流向下一个工作流,逐步前进的。 开发初期,人们使用用例获取用户需求,建立用例模型,描述系统的全部功能。 基于用例模型,人们创建一系列实现这些用例的分析模型、设计模型和实现模型。 测试人员测试实现确保系统正确实现了用例。

Page 39: 软件工程 第四章  面向对象技术

软件工程 39

以体系结构为中心的过程 用例的选择不是孤立的,它与软件的体系结构是密切相关的。 软件体系结构的作用与一个建筑的体系结构类似。对于一个建筑,可以从框架结构、供热、上下水、供电、天然气、其他服务管线等不同角度来考察它。使得施工人员在施工前就能全面了解这个建筑。 软件的体系结构也从不同角度描述了即将构造的系统,包括系统的静态特征和动态特征。

Page 40: 软件工程 第四章  面向对象技术

软件工程 40

每一种产品都有功能和表现形式两个方面。用例就是功能,体系结构就是表现形式。 在开发过程中,必须兼顾功能和表现形式,做出适当权衡,才能得到好的产品。因此,用例和体系结构必须在迭代中并行演进。 为了找到可以演进的体系结构,设计师必须从全面了解系统的主要功能(即主要用例)入手。

Page 41: 软件工程 第四章  面向对象技术

软件工程 41

4.3 统一建模语言 UML UML 是 Unified Modeling Language 的缩写。 它是一种标准的语言,以直观的表述、定义、构造和文档化软件为主的系统的工作制品。 UML聚集了来自下列建模的精髓:

数据建模(实体关系图 ERD ) 业务建模 (工作流) 对象建模 构件建模

它可用于软件生命周期各个过程,并适用于各种不同的实现技术。

Page 42: 软件工程 第四章  面向对象技术

软件工程 42

UML 的特点 统一标准

融合了当前一些流行的面向对象开发方法的主要概念和技术,成为一种面向对象的标准化的统一建模语言。 提供了标准的面向对象的模型元素的定义和表示法,有标准的语言工具可用。 已成为工业标准化组织 OMG 的正式标准。

面向对象 支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法。

Page 43: 软件工程 第四章  面向对象技术

软件工程 43

可视化,表示能力强大 一种图形化语言,系统的逻辑模型和实现模型都能用 UML 的模型图形清晰地表示。 可以处理与软件的说明和文档有关的问题。 提供了语言的扩展机制,用户可以根据需要增加定义自己的衍型( StereoType )、标记值和约束等。 可用于各种复杂类型的软件系统的建模。

独立于过程 系统建模语言,独立于开发过程。

Page 44: 软件工程 第四章  面向对象技术

软件工程 44

容易掌握使用 概念明确,建模表示法简洁明了,图形结构清晰,容易掌握使用。 着重学习三个方面的主要内容: (1) UML 的基本模型元素 (2) 组织模型元素的规则 (3) UML语言的公共机制

与程序设计语言的关系 用 Java , C++ 等编程语言可实现一个系统。 一些 CASE工具可以根据 UML 所建立的系统模型来产生 Java 、 C++ 等代码框架。

Page 45: 软件工程 第四章  面向对象技术

软件工程 45

UML 的定义 UML 定义有两个组成部分:语义和表示法。 语义用自然语言描述,表示法定义了 UML 的可视化标准表示符号,这决定了 UML 是一种可视化的建模语言。 在语义上,模型是元模型的实例。 UML 定义给出了语法结构的精确定义。 使用 UML 时,要从不同的角度观察系统,为此定义了概念“视图”。视图是对系统的模型在某方面的投影,注重于系统的某个方面。

Page 46: 软件工程 第四章  面向对象技术

软件工程 46

UML 的构成 UML 的三个主要组成元素

1)基本构造块( basic building blocks )2)组织构造块的规则( rules )3)运用于整个 UML 的公共机制( common mechanisms )

UML 包括三种基本构造块 :1)事物( things )2)关系( relationships )3)图( diagrams )

Page 47: 软件工程 第四章  面向对象技术

软件工程 47

UML 事物 — 结构事物1) Class (类)

2) Interface (接口) 描述了一个类或构件的服务(操作)集。 ISpelling

类名属性操作

open( )close( )move( )display( )

originsize

Window

操作属性类名

Page 48: 软件工程 第四章  面向对象技术

软件工程 48

3) Collaboration (协作) 合作完成某个特定任务的一组类及其关联的集合,用于对用例的实现建模。

4) Use Case (用例) 表示系统想要实现的行为,不关心这些行为是怎样实现的。

Place Order

OrderManagement

用例 协作实现实现

协作用例

Page 49: 软件工程 第四章  面向对象技术

软件工程 49

5) Active Class (主动类) 与一般类相同,但它至少拥有一个进程或线程,故能够启动控制活动。

6) Component (构件) 系统中物理的、可替代的部件。

Orderform.java

suspend()flush()

EventManager

Page 50: 软件工程 第四章  面向对象技术

软件工程 50

7) Node (节点) 系统在运行时存在的物理元素。

数据库服务器应用服务器

课程管理 成绩管理

Page 51: 软件工程 第四章  面向对象技术

软件工程 51

UML 事物 — 行为事物8) Interaction (交互) 交互由在特定的上下文环境中共同完成一定任务的一组对象之间传递的消息组成。 交互涉及的元素包括消息、动作序列和链。

p:Person :CompanyAssign(development)

消息有名对象

匿名对象

有名对象

匿名对象

消息

Page 52: 软件工程 第四章  面向对象技术

软件工程 52

9) State Machine (状态机) 状态机描述了一个对象或一个交互在生存周期内响应事件所经历的状态序列。 状态机涉及的元素包括状态、转换、事件活动等。

initializing command

idle

Keypress

Finished

Exit

Page 53: 软件工程 第四章  面向对象技术

软件工程 53

UML 事物 — 分组事物10) package (包)

包是把元素组织成组的机制,结构事物、行为事物甚至其他分组事物都可以放进包内。 包不象构件(仅在运行时存在),它纯粹是概念上的(即它仅在开发时存在)。

用户接口包

业务对象包应用包

Page 54: 软件工程 第四章  面向对象技术

软件工程 54

UML 事物 — 注释事物11) Note (注释)

依附于一个元素或一组元素之上,对其进行约束或解释的简单符号。

CashAccount

presentValue()

See policy8-5-96.doc for details about these algorithms.

Page 55: 软件工程 第四章  面向对象技术

软件工程 55

UML Relationships (关系) UML 中有 4 种关系:

依赖 关联 泛化 实现

关系特征: 这四种关系是 UML 模型中可以包含的基本关系。 它们也有变体。例如,依赖的变体有细化、跟踪、包含和延伸。

Page 56: 软件工程 第四章  面向对象技术

软件工程 56

1) 依赖( Dependency ) 两个事物之间的语义关系,其中目标事物发生变化会影响源事物的语义。 图中虚线箭头从源事物指向目标事物,表示源事物依赖于目标事物。

CourseSchedule

add(c:Course)remove(c:Course)

Course

Iterator

<<friend>>

Page 57: 软件工程 第四章  面向对象技术

软件工程 57

两个类之间的依赖关系可以是: 源类访问定义在目标类内部的数据值; 源类的操作调用了定义在目标类的操作; 源类的返回类或参数是目标类的实例;

如果在顺序图中的两个对象存在消息的传送,而且它们之间没有结构方面的连接,可以在类图上用依赖关系建模。 依赖的变体包含特定的语义,表明类之间的关系、包之间的关系、用例之间的关系、对象之间的关系、建模元素与模型之间的关系等。

Page 58: 软件工程 第四章  面向对象技术

软件工程 58

类之间的依赖关系可以是:a. 友元依赖 <<friend>>目标类(如二叉树)视源类(如迭代器)为友元,允许源类访问目标类的所有私有属性和操作。

b. 导出依赖 <<derive>>两个类或对象如果存在导出依赖,则表明源类(如年龄)可以从目标类(如出生年月)通过计算导出。

Iterator BinaryTree<<friend>>

Age BirthDay<<derive>>

Page 59: 软件工程 第四章  面向对象技术

软件工程 59

c. 细化依赖 <<refine>>在类图中表示同一模型的不同详细程度的规格说明,源类比目标类更为详细。

d. 实例化依赖 <<instantiate>>若要强调一个类的对象是由另一个类的对象创建的,可用实例化依赖。它表明源类创建了目标类的一个实例。

Chessboardfrom optimized

chessboardfrom simple

<<fefine>>

Array Stack<<instantiate>>

Page 60: 软件工程 第四章  面向对象技术

软件工程 60

e. 使用依赖 <<use>>不加任何修饰的依赖即为使用依赖。也可用修饰 <<use>>强调源类的语义依赖于目标类的具有共有可见性的构成的语义。

f. 绑定( Binding )依赖这种依赖关系中的目标类是模板类,源类是从模板实例化的类。

Binary SearchTree Binary Tree

<<use>>

<int> Stack <class T> Stack

Page 61: 软件工程 第四章  面向对象技术

软件工程 61

包之间的依赖关系可以是:a. 访问依赖 <<access>>

它表明源包被赋予了可访问目标包的权限。

b. 导入依赖 <<import>>它表明了源包可以访问目标包里的元素,但各个包有自己独立的命名空间,这意味着属于不同包的两个元素可以重名。导入依赖可以使目标包内的公共可见元素进入源包的命名空间。

source target<<access>><<access>>

<<import>><<import>>source target

Page 62: 软件工程 第四章  面向对象技术

软件工程 62

用例之间的依赖关系可以是:a. 包含依赖 <<include>>它表明源用例显式地包含目标用例作为其行为的一部分。此时将源用例称为基用例,目标用例称为内含用例。如果两个用例之间具有包含依赖关系,则表明基用例的动作序列中有特定的步骤把内含用例的动作序列包含进来。

b. 扩展依赖 <<extend>>

<<include>><<include>>base use case inclusion

use case

Page 63: 软件工程 第四章  面向对象技术

软件工程 63

它表明源用例扩展了目标用例的行为。此时,源用例称为基用例,目标用例称为扩展用例。扩展用例在特定条件下为基用例提供附加的动态行为。例如,在人机交互过程中出现差错时进行的异常处理即为扩展动作。

扩展依赖与包含依赖的区别在于,如果仅将扩展从基用例地动作序列中去除,基用例仍然是语义完备的,即它的执行仍将产生有意义的结果。而包含依赖则不然。

base use case

<<extend>><<extend>> extension use case

Page 64: 软件工程 第四章  面向对象技术

软件工程 64

对象之间的依赖关系可以是:a. 转换依赖 <<become>>

当需要在交互图上表示对象状态的转换时可以用转换依赖。主要强调由于消息而导致对象状态的改变。转换依赖连接的目标对象和源对象是同一个对象。b. 调用依赖 <<call>>

当需要在交互图或对象图上显式强调对象之间或操作之间的调用关系时要用调用依赖。它表明源对象引用了目标对象的操作,或源操作引用了目标操作。c. 复制依赖 <<copy>>

Page 65: 软件工程 第四章  面向对象技术

软件工程 65

为了在交互图或活动图上描述对象复制的动作可以采用复制依赖。它连接两个对象,目标对象是源对象的完全相同而又独立的副本。d. 发送依赖 <<send>>它连接一个对象(在源端)和一个消息(在目标端),表明源对象在交互过程中发送了一个消息,可以用在状态机的描述中。它针对内嵌有状态机的对象,可用来描述如何通过发送信号以产生某种事件的动作。

建模元素与模型之间的依赖关系是:a. 回溯依赖 <<trace>>它连接两个模型元素,表明目标是源的历史上的前驱。如交互和协作就是从用例导出的。

Page 66: 软件工程 第四章  面向对象技术

软件工程 66

2) 关联( Association ) 关联是一种结构关系,它描述一组链,这些链是类之间或类与接口之间的连接。通过这种连接,一个对象可以访问另一个对象的属性或调用另一个对象的操作。 关联是双向的,其中的角色代表一个类的对象在另一个类中的存在。

聚合( aggregation )是一种特殊类型的关联,它描述了整体和部分间的结构关系。employer employee0..1 *

Page 67: 软件工程 第四章  面向对象技术

软件工程 67

聚合关系在整体端有一个菱形作为标记。 复合聚合( composite aggregate ) 是一种特殊的聚合关系,它表明整体对象与部分对象具有相同的生存周期。

3) 角色的重复度( Multiplicity )

复合聚合 ,双向导航0..*

0..1

0..*

整体 类名

部分 类名 2部分 类名 1

聚合 , 单向导航0..1

Page 68: 软件工程 第四章  面向对象技术

软件工程 68

表明角色在关联关系中出现的次数。如 1 ,0..1 , 1..* , * 等。

导航( navigation )一般默认关联关系是双向的,而导航则限制关联关系到一个方向。在图中用箭头指明方向。

限定关联( qualification )如教师与学生的关系由课程的标识决定。

company department1 1..*

Page 69: 软件工程 第四章  面向对象技术

软件工程 69

关联类关联关系是两个类之间的语义连接。在比较简单的情况下,关联关系的语义用关联关系的名字来概括。但在某些情况下,需要对关联关系的语义做详细的定义、存储和访问,为此可以建立关联类,描述关联的属性。

teacher student

1

*教师教课

nCourseID

course学生选课

教师教学生1

*限定类 目标类

Page 70: 软件工程 第四章  面向对象技术

软件工程 70

3) 泛化( Generalization ) 一般化─特殊化的关系(继承)。表明特化类共享一个或多个泛化类的结构和行为。 如果两个类被定义为具有泛化关系,就意味着在任何泛化类(父类)的对象出现的地方,都可以用特化类(子类)来代替。

descriptiondateHiredsalary

job

company company1 1..*

employer employee

关联类关联类

Page 71: 软件工程 第四章  面向对象技术

软件工程 71

Event

ConsoleWindow DialogBox Control

Window

open()close()move()display()handleEvent()泛化 关联

依赖

Page 72: 软件工程 第四章  面向对象技术

软件工程 72

继承的多态性表明子类的操作的动态行为可代替父类的同名操作的动态行为。 泛化关系的变体:实现继承。它规定其中的子类可继承其父类的结构和行为,但其可见性成为私有,也不支持父类的接口。

4) 实现( Realization ) 类之间的语义关系,其中的一个类元指定了由另一个类保证执行的契约。 两种情况出现实现关系: 1 )在接口和实现它们的类或构件之间; 2 )在用例和它们的协作之间。

Page 73: 软件工程 第四章  面向对象技术

软件工程 73

Place Order

OrderManagement

用例实现

协作

Page 74: 软件工程 第四章  面向对象技术

软件工程 74

类属性操作

对象属性值操作 接口 用例

构件 节点

状态机

包 注 释

依赖 关联 泛化 实现聚合 复合

模型中主要的图形元素

Page 75: 软件工程 第四章  面向对象技术

软件工程 75

UML 模型的图形Use CaseDiagramsUse Case

Diagrams用例图用例图

ScenarioDiagramsScenario

Diagrams协作图协作图State

DiagramsStateDiagrams构件图构件图

ComponentDiagramsComponent

Diagrams部署图部署图

StateDiagramsStateDiagrams对象图

ScenarioDiagramsScenario

Diagrams状态图状态图

Use CaseDiagramsUse Case

Diagrams顺序图顺序图State

DiagramsStateDiagrams类图类图

活动图活动图

模型

Page 76: 软件工程 第四章  面向对象技术

软件工程 76

UML 图的作用 UML 可以用于 :

使用用例( use cases )和参与者( actors )描述系统的边界和它的主要功能。 使用交互图(顺序图、协作图)具体描述用例的实现。 使用类图表示系统的静态结构。 是用状态转换图模型化对象的行为。 使用构件图和部署图展现系统的物理实现体系结构。 使用衍型( stereotypes )扩展建模能力。

Page 77: 软件工程 第四章  面向对象技术

软件工程 77

UML 工作的实例 某大学用计算机管理的注册( registration )系统

注册管理员设置一个学期的所有课程信息 一个课程可以有多个课程选课单。

学生选择 4门主修课和 2门选修课 当某学生在学期注册了,则记账( billing )系统会得到通知,在该学期给该学生开设账号。 学生在注册后一段时间可以使用系统增加 /撤销所选课程。 教授使用这个系统接受他们课程的选课名册。 注册系统的用户将得到密码( password ),用于登录的确认。

Page 78: 软件工程 第四章  面向对象技术

软件工程 78

用例图( use case diagram ) 用例图展现了一组用例、参与者( Actor )以及它们之间的关系。 用例图通常包括用例、参与者和扩展关系、包含关系等。 用例图的功能是支持系统的行为,即该系统在它的上下文环境中所提供的外部可见服务。 用例图的两种使用方式:

上下文环境建模:说明位于系统之外并与系统进行交互的参与者以及他们所扮演的角色的含义。功能需求建模:说明系统想要的行为。

Page 79: 软件工程 第四章  面向对象技术

软件工程 79

参与者( Actors ) 参与者定义了一组与系统有信息交互关系的人、事、物。它是用例的客户并与用例进行交互。一个参与者针对每一个与之通信的用例扮演一种角色。 角色可以是人或外部系统。它定义了系统的边界。

StudentStudentRegistrarRegistrar ProfessorProfessor Billing SystemBilling System

Page 80: 软件工程 第四章  面向对象技术

软件工程 80

用例( Use Cases ) 一个用例是一种系统应表现行为的模式 :

每个用例是一个参与者与系统在一次对话中所执行的相关事务的序列。 要调查参与者以确定他们的要求:

Registrar (注册管理员)- 维护所有课程信息 Professor (教授)- 要求选课名单 Student (学生)- 维护选课表 Billing System (记账系统)- 从注册中心接受记账信息

Maintain ScheduleMaintain ScheduleMaintain CurriculumMaintain Curriculum Request Course RosterRequest Course Roster

Page 81: 软件工程 第四章  面向对象技术

软件工程 81

用例的规格说明 为每个用例建立一个规格说明,描述用例的事件流( flow of event )。

从参与者角度编写 它包含在用例执行时系统必须为参与者提供的各种细节。 典型的内容有

用例如何开始和结束 基本的事件流 候补的事件流 异常的事件流

Page 82: 软件工程 第四章  面向对象技术

软件工程 82

保持所有课程信息的事件流 用例开始于注册管理员登录到注册系统并敲入他的密码时。系统检验此密码是否有效,并提示注册管理员选择当前学期或下个学期。注册管理员敲入他期望的学期。然后系统提示选择他所期望的活动,包括: Add , Delete , Review 或 Quit 。a) 如果选择 Add ,则执行增加课程的子事件流。b) 如果选择 Delete ,则执行删除课程的子事件流。c) 如果选择 Review ,则执行审查所有课程信息的子事件流。d) 如果选择 Quit ,则用例终止。

Page 83: 软件工程 第四章  面向对象技术

软件工程 83

register course (注册课程)用例 用例允许学生在本学期注册他的课程申请。 如果在本学期开学的一段时间内学生作出 add或 drop 的变更,他还可修改和删除他的课程选择。 课程目录系统提交一个表格,列出本学期所有的课程申请。 基本事件流:

a) 当学生想要注册课程申请或者想要改变他的已有的选课表时,本用例开始。

Page 84: 软件工程 第四章  面向对象技术

软件工程 84

b) 系统要求学生具体说明他可能会执行的功能(建立、更新或者删除一个选课表)。c) 一旦学生提交了请求信息,将执行某一个子流。

如果学生选择“建立一个选课表”,则执行一个“建立”子事件流的服务。 如果学生选择“更新一个选课表”,则执行一个“更新”子事件流的服务。 如果学生选择“删除一个选课表”,则执行一个“删除”子事件流的服务。

Page 85: 软件工程 第四章  面向对象技术

软件工程 85

建立选课表子事件流a) 系统检索来自课程目录系统的一个有效的课程申请的列表,并把这个表显示给学生。b) 学生根据这个有效的课程申请列表选择 4 门主修课申请和 2 门选修课申请。c) 一旦学生作出他的选择,系统为学生建立一个选课表,包括了这个学生选择的课程申请。d) 执行“提交选课表”子事件

Page 86: 软件工程 第四章  面向对象技术

软件工程 86

用例图的事例 注册系统的用例图直观地描述了参与者和用例之间的关系。

StudentStudent

RegistrarRegistrar

ProfessorProfessor

Maintain ScheduleMaintain Schedule

Maintain CurriculumMaintain Curriculum

Request Course RosterRequest Course Roster

Billing SystemBilling System

Page 87: 软件工程 第四章  面向对象技术

软件工程 87

交互图 — 用例的实现 用例图描述了系统的外部视图。 交互图则描述了如何通过对象之间的交互实现用例。 交互图展现了按一定的目的进行的一种交互,它由在一个上下文中的一组对象及它们之间交互的信息组成。 交互图有两种类型:

顺序图( Sequence diagram ) 协作图( Collaboration diagram )

Page 88: 软件工程 第四章  面向对象技术

软件工程 88

顺序图( Sequence Diagram ) 顺序图也称为序列图,它按时间顺序显示对象之间的交互。

registration registration managermanager math 101math 101 : Student: Student

registrationregistration formform

math 101math 101 section 1section 1

1: fill in info1: fill in info

2: submit2: submit 3: add course(joe,3: add course(joe, math 01)math 01)

4: are you open?4: are you open?5: are you open?5: are you open?

6: add (joe)6: add (joe)7: add (joe)7: add (joe)

Page 89: 软件工程 第四章  面向对象技术

软件工程 89

顺序图展现了一组对象和由这组对象收发的消息,用于按时间顺序对控制流建模。 对象表述为虚垂线顶端的矩形框。这些对象都排列在图的顶部,其生命线从图的顶部画到图的底部。 垂线是对象的生命线,说明对象在一段时间内存在。 对象可以在交互过程中创建,在交互过程中撤销。 生命线之间的箭头表示消息。消息出现的次序自上而下。 消息箭头可以回到同一条生命线,指明自调用,即对象发给自己的消息。

Page 90: 软件工程 第四章  面向对象技术

软件工程 90

顺序图的控制焦点是一个瘦高的矩形,表示一个对象执行一个动作所经历的时间段。矩形的顶部表示动作的开始,底部表示动作的结束(可以由一个返回消息来标记)。 顺序图的构造步骤:

a) 首先,把参加交互的对象放在图的上方,横向排列。通常把发起交互的对象放在左边,较下级对象依次放在右边。b) 然后,把这些对象发送和接收的消息纵向按时间顺序从上到下放置。c) 这样,就提供了控制流随时间推移的清晰的可视化轨迹。

Page 91: 软件工程 第四章  面向对象技术

软件工程 91

选课的顺序图 : 学生 : 选课表单 : 课程登记管理器 : 课程目录 : 课程

打开 取课程列表 取课程列表显示课程列表

选择 4门主修课和 2门选修课把课程加入计划 添加学生

重复 4门课

Page 92: 软件工程 第四章  面向对象技术

软件工程 92

边界类 是直接与系统外部实体交互的类,描述系统与外部(人或其他系统)的接口建模,其原型为 <<boundary>> 。 控制类 是为特定用例的控制行为建模的类,协调特定于用例的行为所需的事件,其原型为

<<control>> 。 实体类 是用来保存或更新某个对象的信息的类,独立于它的环境。原型为 <<entity>> 。

ControlControl EntityEntityActorActor Boundary

Page 93: 软件工程 第四章  面向对象技术

软件工程 93

: Registrar: Registrar

course form :course form : CourseFormCourseForm

theManager :theManager :

CurriculumManagerCurriculumManageraCourse :aCourse :

CourseCourse

1: set course info2: process

3: add course

4: new course

协作图( Collaboration Diagram ) 协作图也称为合作图,它显示了对象与周围对象之间的交互,以及它们之间的链接。

Page 94: 软件工程 第四章  面向对象技术

软件工程 94

协作图展现了一组对象,这组对象之间的连接以及这组对象收发的消息。 协作图中的协作不是参与者与系统之间的交互,而是系统内部某一个用例中各个对象之间信息传递的方式。 消息上所附编号指明执行顺序。 协作图的构造步骤:

a) 将参加交互的对象作为图的顶点。b) 将连接这些对象的链表示为图的弧。c) 用对象发送和接收的消息修饰这些链。

协作图提供了在协作对象的结构组织的上下文环境中观察控制流的一个清晰的可视化轨迹。

Page 95: 软件工程 第四章  面向对象技术

软件工程 95

类图( class diagram ) 类图从系统的逻辑视图展现了一组类、接口、协作和它们之间的关系。 类图给出系统的静态设计视图,主动类的类图给出了系统的静态进程视图。 在类图中 UML 建模元素包括:

类及其结构和行为; 接口; 协作; 关联、依赖、泛化关系; 多重性和导航指示符; 角色名字。

Page 96: 软件工程 第四章  面向对象技术

软件工程 96

类( Class ) 类是具有共同结构、共同行为、共同关系和共同语义的对象的集合。 通过检查在顺序图和协作图中的对象可以发现类。 一个类用间隔为三部分的矩形描绘。 类应当使用领域的术语来命名:

应建立命名的标准 例如,所有的类都是以大写字母开头的单一名词

Page 97: 软件工程 第四章  面向对象技术

软件工程 97

类的事例RegistrationForm

RegistrationManager

Course

Student

CourseOfferingProfessor

ScheduleAlgorithm

Page 98: 软件工程 第四章  面向对象技术

软件工程 98

操作( Operations ) 一个类的行为通过类的各种操作来表达。 这些操作可以通过检查交互图来寻找。

registration form

registration manager

3: add course(joe, math 01)

RegistrationManager

addCourse(Student,Course)

Page 99: 软件工程 第四章  面向对象技术

软件工程 99

属性( Attributes ) 一个类的结构通过它的属性来表达。 通过检查类的定义、问题的需求,并参照领域知识来发现属性。

每个课程选课单有课程号 number 、地点 location 、时间 time

CourseOffering

numberlocationtime

Page 100: 软件工程 第四章  面向对象技术

软件工程 100

类的事例RegistrationForm

RegistrationManager

addStudent(Course, StudentInfo)

CoursenamenumberCreditsopen()addStudent(StudentInfo)

Studentnamemajor

CourseOfferingllocationopen()addStudent(StudentInfo)

ProfessornametenureStatus

ScheduleAlgorithm

Page 101: 软件工程 第四章  面向对象技术

软件工程 101

寻找关系 通过检查交互图,以发现关系

如果两个对象必须打交道,一定存在沟通的路径。Registration

ManagerMath 101: Course

3: add student(joe)

Course

RegistrationManager

Page 102: 软件工程 第四章  面向对象技术

软件工程 102

关系的事例RegistrationForm

RegistrationManager

addStudent(Course, StudentInfo)

CoursenamenumberCreditsopen()addStudent(StudentInfo)

Studentnamemajor CourseOffering

locationopen()addStudent(StudentInfo)

ProfessornametenureStatus

ScheduleAlgorithm

Page 103: 软件工程 第四章  面向对象技术

软件工程 103

多重性和导航的事例RegistrationForm

RegistrationManager

addStudent(Course, StudentInfo)

CoursenamenumberCreditsopen()addStudent(StudentInfo)

Studentnamemajor CourseOffering

locationopen()addStudent(StudentInfo)

ProfessornametenureStatus

ScheduleAlgorithm

10..*

0..*1

1

1..*4

3..10

0..41

Page 104: 软件工程 第四章  面向对象技术

软件工程 104

泛化(继承)的事例

RegistrationUser

RegistrationManager

addStudent(Course, StudentInfo)

CoursenamenumberCreditsopen()addStudent(StudentInfo)

Studentnamemajor CourseOffering

locationopen()addStudent(StudentInfo)

ProfessornametenureStatus

ScheduleAlgorithm

10..*

0..*1

1

1..*4

3..10

0..41

RegistrationForm

Page 105: 软件工程 第四章  面向对象技术

软件工程 105

对象图( Object Diagram ) 对象图展现了一组对象以及它们之间的关系。用以详述、构造和文档化系统中存在的实例以及它们之间的相互关系。 对象图给出系统的静态设计视图或静态进程视图,和类图一样。描述了在类图中所建立的事物的实例的静态快照。 对象图一般包括对象和链。 这种视图主要支持系统的功能需求,即系统应该提供给最终用户的服务。因而它也用于表示交互图表示的动态场景的一个静态画面。

Page 106: 软件工程 第四章  面向对象技术

软件工程 106

对象图的事例 c: 公司

名称 =“研发”d2: 部门d1: 部门

名称 =“销售”

d3: 部门名称 =“打印机销售”

: 联系信息地址 =“清华产业楼 411”

p: 人员姓名 =“郑人杰”雇员标识 =6037职务 =“销售副总”

经理

对象 属性值匿名对象

连接 link

Page 107: 软件工程 第四章  面向对象技术

软件工程 107

状态迁移图( State Transition Diagram ) 状态是在对象生存周期中的一个位置。在此位置满足某种条件,执行某种活动或等待某个事件。 状态迁移图展现了一个状态机,它由状态、转移、事件和活动组成。 状态迁移图显示了:

一个给定类的生存史; 导致状态转移的一系列事件; 产生状态变化的一系列活动;

状态图关注系统的动态视图。

Page 108: 软件工程 第四章  面向对象技术

软件工程 108

状态迁移图的事例Open

entry: Register studentexit: Increment count

Initializationdo: Initialize course

Closeddo: Finalize course

Canceleddo: Notify registered students

Add Student / Set count = 0

Add student[ count < 10 ]

[ count = 10 ]Cancel

Cancel

Cancel

Page 109: 软件工程 第四章  面向对象技术

软件工程 109

活动图( Activity Diagram ) 一个活动是一个在状态机内部正在进行的非原子(即可中断的)动作。 活动图是一种特殊的状态图。其中,

大多数的或者全部的状态都是动作状态或者活动状态 大多数的或者全部的迁移都是由于源状态中活动的完成而被触发的。

一个活动图着重于描述计算过程或工作流的顺序的和并发的执行步骤。

Page 110: 软件工程 第四章  面向对象技术

软件工程 110

按订单供货

接订单

开发票

结清订单

快速交付 正常交付 收款[ 紧急订单 ] [非紧急订单 ]

分叉起点

变迁

结束汇合合并

活动分支

Page 111: 软件工程 第四章  面向对象技术

软件工程 111

活动图的两种使用方式对工作流建模 对操作建模

实现 与系统进行协作的参与者所观察到的活动 把活动图作为流程图使用,对一个计算的细节部分建模适用性 对工作流的建模 对分支、分叉和汇合状态的建模内容 用于可视化、详述、构造和文档化开发系统所涉及的业务过程

操作的参数和它的局部对象

Page 112: 软件工程 第四章  面向对象技术

软件工程 112

泳道( swimlanes ) 活动图描述发生了什么,但没有说明该活动由谁来完成。泳道描述了这种关系。 泳道用矩形框表示,属于某个泳道的活动放在该矩形框内,将对象名放在矩形框的顶部,表示泳道中的活动由该对象负责。 两个泳道中活动的各自由不同的对象负责,活动之间控制权的转移表明对象之间的协作关系。 所以泳道可以将活动图的逻辑描述与顺序图、写作图的责任描述结合起来。

Page 113: 软件工程 第四章  面向对象技术

软件工程 113

乘客 电梯按下按钮

电梯移到当前楼层

[电梯在当前楼层 ]

[否则 ]

电梯开门进入电梯

电梯关门按下目标楼层按钮

开往目标楼层电梯开门离开电梯电梯关门

Page 114: 软件工程 第四章  面向对象技术

软件工程 114

借阅者 图书馆

在书架上找书[返还 ]

[借阅 ]

排队等待

创建借阅记录

准备下次行动

[返还 ]

[借阅 ]

书放回书架删除借书记录

[ 多个 ]

[ 不多于一个 ]

Page 115: 软件工程 第四章  面向对象技术

软件工程 115

构件图( Component diagram ) 构件图展现了一组构件之间的组织和依赖。 构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作。 一个构件可能是:

部署构件:如动态链接库 (DLL) 、二进制可执行构件、 ActiveX 控件、 JavaBeans 等,是形成可执行文件的基础。 工作产品构件:如数据文件或源代码。是部署构件的来源。 执行构件:可运行的构件

Page 116: 软件工程 第四章  面向对象技术

软件工程 116

构件图的事例

Course CourseOffering

Student Professor

Course.dllPeople.dll

CourseUser

Register.exeBilling.exe

BillingSystem

Page 117: 软件工程 第四章  面向对象技术

软件工程 117

接口( interface ) 接口是一个类或构件提供给其他类或构件的一组操作。类的变体,其变体关键字是 <<interface>> 。 每个接口要指定一个名字,以区分不同的接口。接口的名字就是类的名字,用字符串表示。 构件的接口有两种类型:

导入接口( import interface ):访问服务的构件使用导入接口; 导出接口( export interface ):由提供操作的构件提供。

Page 118: 软件工程 第四章  面向对象技术

软件工程 118

部署图( Deployment Diagram ) 部署图展现了在软件过程中存在的运行处理节点以及其中的构件的配置。 部署图给出了体系结构的静态实施视图。它描述系统硬件的物理拓扑结构(包括网络布局和构件在网络上的位置),以及在此结构上执行的软件(即运行时软构件在节点中的分布情况)。 它与构件图相关,通常一个节点包含一个或多个构件。

Page 119: 软件工程 第四章  面向对象技术

软件工程 119

部署图的事例Registration Database

Dorm

LibraryMain

Building

主排课

数据库库

宿舍图书馆

注册

Page 120: 软件工程 第四章  面向对象技术

软件工程 120

UML 的规则 命名 (names)

为事物、关系和图起名。如:“ student” 、“ PersonInfo::student” 作用域 (scope)

把施于类而不是施于实例的操作和属性说明为类作用域。相当于 C++静态变量。订单

getNumbergetNewNumber

实例作用域类作用域加下划线者

Page 121: 软件工程 第四章  面向对象技术

软件工程 121

可见性 (visibility) 对类中任一属性或操作定义存取权限。 加前缀: + (公用 ) 、 - (私用 ) 、 # ( 保护 )

完整性 (integrity) 保持事物之间联系的正确性和一致性。 单个模型是不充分的,应建立互补的连锁的模型,从整体描述软件的蓝图。 保持模型与现实的一致性。

执行 (execution) 通过运行或模拟动态模型,才能真正理解和领会程序代码的含义是什么。

Page 122: 软件工程 第四章  面向对象技术

软件工程 122

UML 的公共机制 规格说明 (specifications)

UML 的图形表示用来对系统进行可视化,UML 的规格说明用来描述系统的细节。

规格说明提供了对构造块的语法和语义的文字叙述。 在增量式建模中,可有两种方式: 先画图,再增加语义到它的规格说明中; 先创建规格说明,或对已完成的系统执行逆向工程,创建这些规格说明的投影图。

Page 123: 软件工程 第四章  面向对象技术

软件工程 123

修饰 (adornments) 对类的描述可以包含其他细节,表示为图形或文字修饰。 UML 表示中每一个元素都有一个基本符号,可将各种修饰细节加到这个符号上。 例如,下图是一个带修饰的类。

Transaction

+ execute()+ roolback()# priority()- timestamp()

公用操作保护操作私用操作

Page 124: 软件工程 第四章  面向对象技术

软件工程 124

通用划分 (common divisions) 对类和对象的划分

接口和实现的分离 Spellingwizard.dllIUnknown

ISpelling

Customernameaddressphone

Yin:Customer

:Customer

pressman

有名 Customer 对象匿名 Customer 对象由规格说明指定为一个 Customer 对象

接口是契约,实现是契约的一种实施。

Page 125: 软件工程 第四章  面向对象技术

软件工程 125

扩展机制 (extended mechanisms) 约束 (Constraint)

约束可增加新的语义或改变已有的规则。 约束用 {…} 表明,放在相关元素附近。

妻子

丈夫

{ 或 }

{安全码 }

性别 : {女 , 男 }

个人

经理

银行存款公司

0..1

0..1

多个元素间的约束

简单约束

Page 126: 软件工程 第四章  面向对象技术

软件工程 126

标记值( Tagged Value ) 用标记值可为 UML 的事物增加新的特性。 标记值与类的属性不同。标记值可以看作是元数据,它的值应用到元素本身,而不是它的实例。 标记值常用来详述与代码生成或配置管理有关的特性。如指定特定类映射到的编程语言,或描述一个构件的作者或版本。 标记值用 {…(标记 ) = …( 值 )} 表示。

Page 127: 软件工程 第四章  面向对象技术

软件工程 127

衍型 (Stereotype) 衍型的别名是构造型。如果发现需要一个模型构造,它不在 UML 中但又与 UML 的某一成分类似,可以将它看作 UML 构造的一个衍型。 例如, UML 接口是一个类,它只有一些不具有方法实现和属性的公用操作,它是一种特别的类,可以定义它为类的衍型。 当对节点或类建立衍型时,是通过创建类似于已有构造块的新构造块来扩展 UML 。 在 UML 表示法中可以用《…》表示衍型。

Page 128: 软件工程 第四章  面向对象技术

软件工程 128

衍型可用于分类和扩充关联、继承关系、类和构件。例如: 类的衍型:边界、控制、实体、实用程序、异常; 继承的衍型: uses 和 extends ; 构件的衍型:子系统。

EventQueue{ version = 3.2author = Yin }

add()remove()flush()

《 exception》Overflow {Ordered}

Tagged ValueTagged Value

ConstraintConstraint

StereotypeStereotype