《uml设计核心技术》看书笔记
第 1 章 UML 简介
UML
统一建模语言 Unified Modeling Language 是一种建模语言 是第三代用来为面向对象开发系统的产品进行说明 、
可视化和编制文档的方法。
1.2 什么是 UML
UML 是一种标准的图形化建模语言, 它是面向对象分析与设计的一种标准表示 它:
z 不是一种可视化的程序设计语言, 而是一种可视化的建模语言;
z 不是工具或知识库的规格说明, 而是一种建模语言规格说明 ,是一种表示的标准;
z 不是过程, 也不是方法, 但允许任何一种过程和方法使用它;
UML 的目标是:
z 易于使用, 表达能力强 ,进行可视化建模;
z 与具体的实现无关, 可应用于任何语言平台和工具平台;
z 与具体的过程无关, 可应用于任何软件开发的过程;
z 简单并且可扩展, 具有扩展和专有化机制, 便于扩展, 无需对核心概念进行修改;
z 为面向对象的设计与开发中涌现出的高级概念 (例如协作 、框架 、模式和组件)提供支持, 强调在软件开发中 对架构、 框架、 模式和组件的重用;
z 与最好的软件工程实践经验集成;
z 可升级, 具有广阔的适用性和可用性;
z 有利于面对对象工具的市场成长;
每一种 UML 的视图都是由一个或多个图 diagram 组成的 。一个图就是系统架构在 某个侧面的表示, 它与其它图是一致的, 所有的图一起组成了系统的完整视图 。UML 提 供了九种不同的图 ,可以分成两大类: 一类是静态图, 包括用例图 、类图 、对象图、 组件 图、 配置图; 另一类是动态图 ,包括序列图、 协作图、 状态图和活动图 。
1.3 UML 与面向对象的软件分析与设计 OOA&D
1.3.1 标准的表示方法
UML 是一种建模语言, 是一种标准的表示 ,而不是一种方法( 或方法学)。 方法是一 种把人的思考和行动结构化的明确方式 ,方法需要定义软件开发的步骤, 告诉人们做什么、 如何做、 什么时候做, 以及为什么要这么做 。而 UML 只定义了一些图以及它们的意义 它的思想是与方法无关 。
1.3.2 与软件开发的成功经验集成
在众多成功的软件设计与实现的经验中, 最突出的两条: 一是注重系统架构的开发, 一是注重过程的迭代和递增性 。
第 2 章 UML 语言概述
2.2 图
图 (diagram )由图片 (graph) 组成 ,图片是模型元素的符号化。 把这些符号有机地 组织起来形成的图表示了系统的一个特殊部分或某个方面。 一个典型的系统模型应有多个 各种类型的图。 图是一个具体视图的组成部分, 在画一个图时, 就相当于把这个图分配给 某个视图了 。依据图本身的内容, 有些图可能是多个视图的一部分。
UML 中包含用例图 、类图、 对象图、 状态图、 序列图、 协作图、 活动图、 组件图、 展开图共九种 。
2.2.2 类图
类图 class diagram 用来表示系统中的类和类与类之间的关系, 它是对系统静态结 构的描述,如图 2-2 所示。
类用来表示系统中需要处理的事物。 类与类之间有多种连接方式( 关系) 比如: 关 联 (彼此间的连接) ,依赖( 一个类使用另一个类), 通用化( 一个类是另一个类的特殊化) 或打包 packaged (多个类聚合成一个基本元素 )。
2.3 模 型 元 素
可以在图中使用的概念统称为模型元素。 模型元素用语义 、元素的正式定义或确定的 语句所代表的准确含义来定义。 模型元素在图中用其相应的视图元素( 符号) 表示。 利用 视图元素可以把图形象直观地表示出来。 一个元素 符号 可以存在于多个不同类型的图 中 ,但是具体以怎样的方式出现在哪种类型的图中要符合 (依据) 一定的规则。 图 2-10 给出了类、 对象、 状态、 结点、 包 package 和组件等模型元素的符号图例。
模型元素与模型元素之间的连接关系也是模型元素。 常见的关系有关联 association、 通用化 generalization、 依赖 dependency 和聚合 aggregation, 其中聚合是关联的 一种特殊形式 。
第4 章 静态建模: 类图和对象图
用面向对象的方法处理实际问题时, 需要建立面向对象的模型。 构成面向对象模型的 基本元素有类 class、 对象 objects 、类与类之间的关系等等 。用面向对象的思想描述 问题, 能够把复杂的系统简单化、 直观化, 而且易于用面向对象语言编程实现, 还方便日 后对系统的维护工作。 本章主要讨论类、 类图、 对象、 对象图、 类与类之间的关系等基本 概念。
4.3 关 系
前文已述 ,类图由类和它们之间的关系组成。 类与类之间通常有关联、 通用化、 继承、 依赖和精化等四种关系。 本节详细介绍这四种关系的含义和图示方法。
4.3.1 关联关系
关联用于描述类与类之间的连接。 由于对象是类的实例, 因此 类与类之间的关联也 就是其对象之间的关联。 类与类之间有多种连接方式 ,每种连接的含义各不相同( 语义上 的连接), 但外部表示形式相似, 故统称为关联。 关联关系一般都是双向的 即关联的对象双方彼此都能与对方通信, 反过来说, 如果某两个类的对象之间存在可以互相通信的关 系, 或者说对象双方能够感知另一方, 那么这两个类之间就存在关联关系 。
根据不同的含义 关联可分为普通关联、 递归关联、 限定关联、 或关联、 有序关联、 三元关联和聚合等七种 。
4.3.1.1 普通关联
普通关联是最常见的一种关联, 只要类与类之间存在连接关系就可以用普通关联表 示 。
由于关联是双向的 ,可以在关联的一个方向上为关联起一个名字, 而在另一个方向上 起另一个名字( 也可不起名字), 名字通常紧挨着直线书写 。
如果类与类之间的关联是单向的, 则称为导航关联。 导航关联采用实线箭头连接两个 类 。只有箭头所指的方向上才有这种关联关系 。
4.3.1.10 聚合 aggregation
聚合是关联的特例, 如果类与类之间的关系具有 整体与部分 的特点 ,则把这样的 关联称为聚合 。
聚合的图示方式为 在表示关联关系的直线末端加一个空心的小菱形, 空心菱形紧挨 着具有整体性质的类 。
如果构成整体类的部分类 完全隶属于整体类, 则这样的聚合称为复合聚合。 换句话 说 ,如果没有整体类则部分类也没有存在的价值, 部分类的存在是因为有整体类的存在。复合聚合是一个树状结构的关联关系。 复合聚合图示为一个 带实心菱形的直线, 实心菱形紧挨着表示整体方的类 。
4.3.2 通用化
一个类 (通用元素) 的所有信息( 属性或操作) 能被另一个类 (具体元素) 继承, 继 承某个类的类中不仅可以有属于自己的信息, 而且还拥有了被继承类中的信息, 这种机制, 就是通用化。 通用化又称继承。 UML 中的通用化是通用元素和具体元素之间的一种分类关系, 具 体元素完全拥有通用元素的信息 ,并且还可附加一些其它信息 。
通用化分为普通通用化和受限通用化。
4.3.2.1 普通通用化
具有通用化关系的两个类之间, 继承通用类所有信息的具体类, 称为子类, 被继承类 称为父类。 可以从父类中继承的信息有属性、 操作和所有的关联关系。 父类与子类的通用化关系图示为一个带空心三角形的直线, 空心三角形紧挨着父类。
第5章 动态建模
所有系统均可表示为两个方面 :静态结构和动态行为。 UML 提供图来描述系统的结构和行为。
类图(class diagram)最适合于描述系统的静态结构: 类 、对象以及它们之间的关 系。 而状态、 序列 、协作和活动图则适合于描述系统的动态行为, 即描述系统中的对象在 执行期间不同的时间点是如何动态交互的 。
类图将现实生活中的各种对象以及它们之间的关系抽象成模型。 描述系统的静态结构 能够说明系统包含些什么以及它们之间的关系, 但它并不解释系统中的各个对象是如何协 作来实现系统的功能。
系统中的对象需要相互通信: 它们相互发送消息。 例如, 客户对象张三发送一个消息“ 买” 给售货员对象李四。 通常情况下, 一个消息就是一个对象激活另一个对象中的操作调用 。对象是如何进行通信以及通信的结果如何则是系统的动态行为, 也就是说 ,对象通 过通信来协作的方式以及系统中的对象在系统的生命期中改变状态的方式是系统的动态行 为。 一组对象为了实现一些功能而进行通信称之为交互 。可以通过三类图来描述交互: 序 列图、 协作图和活动图。
5.1 对象之间的交互 :消息
在面向对象的编程中 ,两个对象之间的交互表现为一个对象发送一个消息给另一个对象 。
通常情况下, 当一个对象调用另一个对象中的操作时, 消息是通过一个简单的操作调用来实现 ;
当操作执行完成时, 控制和执行结果返回给调用者 。消息也可能是通过一些通信机制在网络上或一台计算机内部发送的真正的报文 。
在所有动态图(序列图 、协作图 、状态图 、活动图)中, 消息是作为对象间的一种通信方式来表示的 。具体来
说 ,消息是连接发送者和接收者的一根箭头线, 箭头的类型表示消息的类型。
UML 中的消息类型。 它们是:
z 简单消息 :表示普通的控制流 。
它只是表示控制是如何从一个对象传给另一个对象, 而没有描述通信的任何细节 。
这种消息类型主要用于通信细节未知或不需要考虑通信细节的场合 。
它也可以用于表示一个同步消息的返回 ,
也就是说 ,箭头从处理消息的对象指向调用者表示控制返回给调用者。
z 同步消息 :
一个嵌套控制流 ,典型情况下表示一个操作调用 。
处理消息的操作在调用者恢复执行之前完成(包括任何在本次处理中发送的其它消息) 。返回可以用
一个简单消息来表示, 或当消息被处理完毕隐含地表示。
z 异步消息 :异步控制流中 ,没有直接的返回给调用者 ,发送者发送完消息后不需要等待消息处理完成而是继续执行。
在实时系统中 ,当对象并行执行时 ,常采用这类消息。
5.4 序 列 图
序列图描述对象是如何交互的, 并且将重点放在消息序列上 ,
也就是说, 描述消息是如何在对象间发送和接收的。 序列图有两个坐标轴:
纵坐标轴显示时间 ,横坐标轴显示对象。
序列图也显示特殊情况下的对象交互 :
在系统执行期间的某一时间点发生在对象间的特殊交互(如 当用到一个特殊功能时)。
在序列图的横坐标轴上是与序列有关的对象。 每一个对象的表示方法是 :矩形框中写
有对象和/或类名, 且名字下面有下划线。 同时, 有一条纵向的虚线表示对象在序列中的
执行情况(即 发送和接收的消息 对象的活动) ,这条虚线称为对象的 生命线 。
对象间的通信用对象的生命线之间的水平的消息线来表示 。
消息线的箭头说明消息的类型 ,如同步 ,异步 或简单(本章前面定义的)。 浏览序列图的方法是: 从上到下查看对象间交换
的消息。
5.4.1 一般和实例格式
有两种使用序列图的方式 :一般格式和实例格式 。
实例格式详细描述一次可能的交互 。
实例格式没有任何条件、 分枝或循环 ,它仅仅显示选定的情节的交互 。
而一般格式则描述所有的情节 。
因此 ,包括了分枝、 条件和循环。
一条消息是一次对象间的通信, 通信所传递的信息是期望某种动作发生。 通常情况 下, 接收到一条消息被认为是一个事件。 消息可以是信号、 操作调用或其它类似的东西 (如 C++中的 RPC(Remote Procedure Calls)或 Java 中的 RMI(Remote Method Invocation)) 。当对象收到一条消息时, 活动就开始, 称之为 激活(activation)。 激活显示控制的焦 点, 对象及时地在某一点执行, 一个被激活的对象要么执行自己的代码或等待另一个对象 返回结果。 激活 用对象的生命线上的窄的矩形来表示。 生命线表示一个对象在一个特 定时间内的存在 ,它是一条从上到下的虚线。 消息用对象的生命线间的箭头线(同步、 异 步、 简单)表示。 每一条消息可以有一个说明, 内容包括名称和参数 ,例如:
print (file : File)
消息也可以有序列号, 虽然序列号不常用(因为消息序列是在图中直接表示的) 。
5.7 小 结
所有的系统均有静态结构和动态行为。 结构可以用静态模型元素来描述, 如类、 关 系、 节点和构件。 行为描述结构内的元素如何交互 。通常情况下, 这些交互是确定的且可 以建立模型。 抽象系统的动态行为也称为动态建模, UML 支持动态建模 。在 UML 中有四 类图 ,每一类用于不同的目的: 状态、 序列、 协作和活动。
状态图被用来描述类(也可以用于子系统或整个系统)中的行为和内部状态 。它着眼于 描述随着时间的改变, 对象如何改变其状态。 状态的改变起决于出现的事件, 状态中执行 的行为和动作, 状态转移等。 事件可能是条件成真, 接收一个信号或一个操作调用或经过指定时间。
序列图主要用来描述在指定情节中一组对象是如何交互的。 它着眼于消息序列, 也就 是说, 在对象间如何发送和接收消息。 序列图有两个坐标轴 :纵坐标轴显示时间, 横坐标 轴显示有关的对象。 序列图中最基本的东西是时间。
协作图主要用来描述对象在空间中的交互, 即除了动态交互, 它也直接描述对象是如 何链接在一起的。 在协作图中没有时间轴, 因而将消息按序编号。

浙公网安备 33010602011771号