好歹还上过一学期的UML课 整理一下笔记吧
UML:统一建模语言(Unified Modeling Language)
UML是非专利的第三代建模和规约语言 是用于说明 可视化 构建和编写一个正在开发的 面向对象的 软件密集系统的制品的开放方法
UML展现了一系列最佳工程实践 这些最佳实践在对大规模 复杂系统进行建模方面 特别是在软件架构层次已经被验证有效
从用户的角度描述系统功能 并指明各功能的操作者
描述了系统中类的静态结构
是包和类组成的 表示包与包之间的关系
包图描述系统的分层结构
是类图的实例
描述系统动态模型和对象组成的交换关系
描述了业务实现用例的工作流程
描述状态到状态控制流
常用于动态特性建模
活动图与状态图的异同:
共同点
都是对系统的动态行为建模
不同点
描述对象不同:
状态图:描述对象状态及状态之间的转移
活动图:描述从活动到活动的控制流
使用场合不同:
状态图:描述对象在其生命期中的行为状态变化
活动图:描述过程的流程变化
描述对象之间的交互关系
对象之间的动态合作关系 强调对象发送消息的顺序 同时显示对象之间的交互
描述对象之间的协助关系
定义系统中软硬件的物理体系结构
类(Class)封装了数据和行为 是面向对象的重要组成部分
它是具有相同属性 操作 关系的对象集合的总称
类名(Class)
每个类都必须有一个名字 类名是一个字符串
属性(Attributes)
属性是指类的性质 即类的成员变量
类可以有任意多个属性 也可以没有属性
操作(Operations)
操作是类的任意一个实例对象都可以使用的行为 操作是类的成员方法
通常用来实现连接有关联的对象所对应的类
即 将一个类的对象作为另一个类的属性
关联关系可以是单向的也可以是双向的 双向的符号是没有方向标的 只是一条直线
表示整体与部分的关系
考虑到一个整体类的组成结构 需要找出成员类
即成员对象是整体对象的一部分 但是成员对象可以队里整体对象独立存在
表示整体与部分的关系
但是与聚合不同此关系是整体与部分是同生共死关系
即 整体对象若销毁了 则部分也会被销毁
是一个使用关系
特定事物的改变有可能会影响到使用该事物的其他事物
即 在一个类中通过另外一个类来调用其方法的表示
即类实现(implements)了接口的关系
当多个类有类似的行为方式的时候通常会使用接口
描述角色以及角色与用例之间的连接关系
说明的是谁要使用系统 以及他们使用该系统可以做些什么
一个用例图包含了多个模型元素 如系统 参与者和用例
并且显示这些元素之间的各种关系 如泛化 关联和依赖
展示了一个外部用户能够观察到的系统功能模型图
1、参与者(Actor)
与应用程序或系统进行交互的用户 组织或外部系统
用一个小人表示
2、用例(Use Case)
外部可见的系统功能 对系统提供的服务进行描述
用椭圆表示
3、子系统(Subsystem)
用来展示系统的一部分功能 这部分功能联系紧密
1、关联(Association)
表示参与者与用例之间的通信 任何一方都可发送或接受消息
【箭头指向】:无箭头 将参与者与用例相连接 指向消息接收方
2、泛化(Inheritance)
继承关系
子用例和父用例相似 但表现出更特别的行为
子用例将继承父用例的所有结构 行为和关系
子用例可以使用父用例的一段行为 也可以重载它
父用例通常是抽象的
【箭头指向】:用带空心箭头的实线表示 指向父用例
3、包含(Include)
用于将一个较复杂用例所表示的功能分解成较小的步骤
有时当某用例的事件流过于复杂时 为了简化用例的描述 可以把某一段事件流抽象成为一个被包含的用例
相反 用例划分太细时 也可以抽象出一个基用例 来包含这些细颗粒的用例
类似于在过程设计语言中将程序的某一段算法封装成一个子过程 然后再从主程序中调用这一子过程
【箭头指向】:用带实心箭头的虚线表示 指向分解出来的功能用例
4、扩展(Extend)
扩展关系指用例功能的延伸 相当于为基础用例提供一个附加功能
将基用例中一段相对独立并且可选的动作用扩展(Extension)用例加以封装 再让它从基用例中声明的扩展点(Extension Point)上进行扩展
从而使基用例行为更简练 目标更集中
扩展用例为基用例添加新的行为
扩展用例可以访问基用例的属性 因此它能根据基用例中扩展点的当前状态来判断是否执行自己 但是扩展用例对基用例不可见。
【箭头指向】:用带实心箭头的虚线表示 指向基础用例
5、依赖(Dependency)
表示源用例依赖于目标用例
【箭头指向】:用带空心箭头的虚线表示 指向被依赖项
活动图 是UML的动态视图之一 用来描述事物或对象的活动变化流程
活动图可看作状态图的特殊形式 特殊性在于活动图中的一个活动结束后将立即进入下一个活动 而不需要事件触发活动的转移
活动图用于描述系统的工作流程和并发行为
活动图被设计用于简化描述一个过程或操作的工作步骤
1、活动(Activity)
活动 表示的是某流程中的任务的执行
它可以表示某算法过程中语句的执行 活动在活动图中表现为一个由一系列动作组成的非原子的执行过程
动作状态(Action State)
动作状态 是指执行原子的 不可中断的动作 并在此动作完成后通过完成转换转向另一个状态的状态
动作状态使用平滑的圆角矩形表示
动作状态所表示的动作写在圆角矩形内部
活动状态(Activity State)
活动状态 是可分解的 不是原子的 其工作的完成需要一定的时间
可把动作状态看作活动状态的特例
活动状态的表示图标也是平滑的圆角矩形 并可以在图标中给出入口动作和出口动作等信息
2、动作流(Action Flow)
所有动作状态之间的转换流称之为 动作流
活动图的转换不需要特定事件的激发 一个动作状态执行完后会自动转换到另外一个状态
活动图的转换用带箭头的直线表示
可用条件限制转换
3、分支(Branch)与合并(Merge)
分支 一般用于表示对象类所具有的条件行为
条件行为用分支和合并表达
一个分支有【一个入转换】和【两个带条件的出转换】 出转换的条件应当是互斥的。
一个合并有【两个带条件的入转换】和【一个出转换】 合并表示从对应的分支开始的条件行为的结束
4、分叉(Fork)和汇合(Join)
分叉 用于将动作流分为两个或者多个并发运行的分支 可用于描述并发线程
汇合 则用于同步这些并发分支 以达到共同完成一项事务的目的
汇合代表两个或多个并发控制流同步发生 当所有的控制流都达到汇合点后 控制才能继续往下进行
5、泳道(Swimlane)
泳道 将活动图中的活动划分为若干组 并将每一组指定给负责这组活动的业务组织 通常为对象
泳道区分了负责活动的对象 明确地表示了哪些活动是由哪些对象进行的
每个活动只能明确地属于一个泳道
泳道用垂直实线绘出 垂直线分隔的区域就是泳道
在泳道上方可以给出泳道的名字或对象/对象类的名字 该对象/对象类负责泳道内的全部活动。
泳道没有顺序 不同泳道中的活动既可以顺序进行也可以并发进行 动作流和对象流允许穿越分隔线
一个活动可以分为若干个动作或子活动 这些动作和子活动本身可以组成一个活动图
一个不含内嵌活动或动作的活动称之为 简单活动
一个嵌套了若干活动或动作的活动称之为 组合活动
组合活动有自己的名字和相应的子活动图
对系统工作流程建模
工作流是一个良好定义的动作序列
执行时将产生一个可观察的值 或者产生一个个体或实体的对象
对工程组织过程建模
对算法流程建模
状态(state) 是指在对象的生命期中的某个条件或状况
在此期间对象将满足某些条件 执行某些活动或等待某些事件
所有对象都具有状态 状态是对象执行了一系列活动的结果
当某个事件发生后 对象的状态发生变化
状态图 用来描述一个特定的对象所有可能的状态 以及由于各种事件的发生而引起的状态之间的转移和变化
并不是所有的类都需要画状态图 只有有明确意义的状态 且在不同状态下行为有所不同的类才需要画状态图
状态名(name)
进入/退出动作(entry/exit action)
内部转移(internal transttion)
子状态(substate)
延迟事件(dferred event)
一个状态图只能有一个初态 但终态可以有一个或多个 也可以没有终态
椭圆或圆角矩形:表示对象的一种状态 椭圆内部填写状态名
箭头:表示从箭头出发的状态可以转换到箭头指向的状态
事件:引起状态转换的原因 事件名可在箭头线上方标出
条件:事件名后加方括号 括号内写状态转换条件
实心圆:初始状态
内部实心的同心圆:最终状态
1、顺序子状态
一个组成状态的子状态对应的对象在其生命期内的任何时刻都只能处于一个子状态
即多个子状态之间是互斥的 不能同时存在
3、历史状态
浅历史状态(shallow)
深历史状态(deep)
4、转移(Transition)
转移是两个状态间的一种关系 表示对象将在当前状态中执行动作
并在某个特定事件发生或某个特定的条件满足时进入后继状态
每个转移只允许有一个事件触发 一个事件只允许有一个动作
要素:
1、源状态
2、目标状态
3、触发事件
若箭头上不带任何事件名 则表示是一个自动转换
即当与源状态相关的活动完成时就会自动触发
4、监护条件
5、动作
转移的类型:
1、内部转移
即不导致状态改变的转移 不会执行entry和exit动作
2、外部转移(自转移)
5、事件
信号事件(signer)
对象之间通过发送信号和接收信号实现通信
信号是一种异步机制 在计算机中 鼠标和键盘的操作均属于此类事件
对于一个信号而言 对象一般都有相应的事件处理器 如onMouseClick()等
调用事件(call)
表示一个操作的调度 即一个对象请求调用另一个对象的操作
信号是一个异步事件 而调用事件一般是同步的
也就是说当对象调用另一对象的操作时 控制就从发送者传送到接收者 该事件触发转换
完成操作后接收者转换到一个新的状态 控制返还给发送者
变化事件(change)
用关键字When 后面跟布尔表达式
例:
When(temperature>120)/alerm()
变化事件的意图是要频繁测试表达式 只要表达式由假变为真 事件就会发生
时间事件(time)
时间事件是指在绝对时间或在某个时间间隔内发生的事情所引起的事件
例如到达某一时间或经过了某一时间段
用关键字When或After表示
顺序图是一种用来显示对象之间的关系 并强调对象之间消息的顺序 同时显示对象之间的关系的动态模型图
顺序图将交互关系表现为一个二维图
纵向是时间轴 时间沿竖线向下延伸
横向轴代表了在协作中各独立对象的类元角色 类元角色的活动用生命线表示
1、对象
对象即类的实例
是具体个体
对象表示为一个矩形 其中对象名称标有下划线
用法:对象名 : 类名
2、激活
激活是过程的执行 包括等待过程执行的时间
在顺序图中激活部分替换生命线 使用长条的矩形表示
3、生命线
生命线用一条纵向虚线表示
4、消息
消息是对象之间的通信 是两个对象之间的单路通信 是从发送者到接收者之间的控制信息流
消息在顺序图中由有标记的箭头表示 箭头从一个对象的生命线指向另一个对象的生命线
消息按时间顺序在图中从上到下排列 代表被调用的次序
1、从边界类(form)触发
2、控制类(control)和边界类交互
3、任务由控制类control)向业务类发出要求
由实体类完成相关功能
4、实体类完成任务 将结果返回给控制类(control)
5、控制类(control)将结果返回给边界类(form)
用长方形表示
1、普通对象
用长方形表示
2、边界类boundary
接收或显示数据
用于程序与外部进行交互
通常用于页面
3、控制类control
等待接收指令
相当于一个管家
通常用于控制器
4、实体类entity
业务对象类