# 统一建模语言(Unified Modeling Language, UML)
uml 是一种绘制软件蓝图的标准语言
可以对软件密集型的系统进行可视化、详述、构造和文档化
## UML的模型概念
> @todo
### UML的构造块
#### 事物
##### 结构事物 (类、接口、协作、用况、主动类、构件、制品、节点)
``通常是模型的 *静态部分*(不参与逻辑 只作为工具), 描述概念元素或物理元素``
类: 具有相同属性、相同操作、相同关系、相同语义的对象的描述
接口:定义了一组操作规范(非操作实现) 描述了外部的可见行为。可定常量,不需要属性
协作:定义了一个交互。具有结构、行为、和维度。由一组共同工作提供协作行为的角色和其他元素构成的群体。一个类/对象可以参与几个协作
用况:用于构建模型中的行为事物,是一组动作序列都描述。通过协作实现。
主动类: 能够启动控制活动,对象元素行为和其他元素的行为并发 其余和类 一样
构件:系统设计的模块化部件,实现隐藏,对外只提供接口
制品: 系统中物理的可代替的部件;比如现成的动态库、源代码文件、脚本
节点:运行时存在的物理元素、表示计算机资源、有一些记忆/处理能力
``以上是基本结构事物 还有变体 参与者、信号、使用程序(一种类)、进程和线程(两种主动类)、应用、文档、文件、库、页和表(一种制品)等``
![类表示法](http://oosl511la.bkt.clouddn.com/1492833510%281%29.jpg "类表示:类名称、属性、操作")
![接口表示法](http://oosl511la.bkt.clouddn.com/1492836755%281%29.png "接口表示:Iwondow 是接口名称")
![接口、类关系表示法](http://oosl511la.bkt.clouddn.com/1492836954%281%29.png "接口 类关系表示法:圆=接口、方块=该类、半圆=其他类;该类向其他类请求")
![协作表示法](http://oosl511la.bkt.clouddn.com/1492837438%281%29.jpg "协作表示法:虚线的椭圆形。英文 责任链")
![用况表示法](http://oosl511la.bkt.clouddn.com/1492838383%281%29.png "用况表示法:椭圆形。英文 订购;下订单")
![主动类表示法](http://oosl511la.bkt.clouddn.com/1492839663%281%29.jpg "主动类表示法,左右边框双线 其余同 《类》")
![构件表示法](http://oosl511la.bkt.clouddn.com/1492839863.png "构件表示法:很像类 右上角有个图标")
![制品表示法](http://oosl511la.bkt.clouddn.com/1492840033%281%29.png "制品表示法:关键字 <artifact>")
![节点表示法](http://oosl511la.bkt.clouddn.com/1492840139%281%29.jpg "节点表示法:通常只写名称")
##### 行为事物 (交互、状态机、活动、)
``UML模型中的动态部分 代表了跨越时间和空间的行为``
交互(interaction):共同完成一定任务的一组对象/角色之间交换的信息组成。 一个对象的群体/单个操作可以用一个交互来描述。交互设计其他元素 包括消息、动作、连接件(对象之间的链接)。
状态机(state machine):描述一个对象/交互在生命期内响应事件所经历的状态序列以及对事件的响应。
活动(activity):计算过程执行的步骤序列。
``交互注重一系列相互起作用的对象、状态机注重一定之间内一个对象的生命周期、活动注重的是步骤之间的流而不关心那个对象执行那个步骤``
![交互表示法](http://oosl511la.bkt.clouddn.com/1492841265%281%29.png "交互表示法:直线+箭头+操作名")
![状态机表示法](http://oosl511la.bkt.clouddn.com/1492841701.png "状态机表示法:状态名字及子状态(若有)")
![活动表示](http://oosl511la.bkt.clouddn.com/1492841944%281%29.jpg "活动表示:和状态机表示相同 只能通过语境区分 英语:处理流程/顺序")
##### 分组事物 (包)
![包表示](http://oosl511la.bkt.clouddn.com/1492842255%281%29.jpg "包表示:仅有包名 或有其内容 英文:业务规则")
##### 注释事物 ()
![注释表示](http://oosl511la.bkt.clouddn.com/1492842584%281%29.jpg "文字/图形解释")
##### 关系 (依赖、关联、泛化、实现 )
``关系构造块可以写出结构良好的模型``
依赖:其中一个元素(独立元素)发生变化 影响另一个元素(依赖元素)
关联:类之间的结构关系。描述了一组链(是实例对象之间的连接)
《聚合》是一种特殊类型的关联 描述了整体与部分件的结构关系
泛化:一种特殊/一般的关系。特殊元素(子元素)基于一般元素(父元素)而建立 子继承了父的结构和行为
实现:类目之间的语义关系。一个类目指向由另一个类目保证执行的合约。
两种情景: 接口和实现它们的类/构件之间; 用况和实现 它们的协作之间
``以上是基本关系事物 可能有变体 精华、跟踪、包含、扩展``
![依赖](http://oosl511la.bkt.clouddn.com/1492845114%281%29.png "偶尔其上带标记")
![关联](http://oosl511la.bkt.clouddn.com/1492845264%281%29.png "偶尔其上带标记经常含有多重性/端名修饰 英文:雇主 雇员")
![泛化](http://oosl511la.bkt.clouddn.com/1492845501%281%29.png "指向父元素")
![实现](http://oosl511la.bkt.clouddn.com/1492845590%281%29.png "泛化和依赖关系两种图形的结合")
#### 图
``一组元素的图形表现 一般吧图化成定点(代表事物)和弧(代表关系的连通图)``
*类图*、*对象图*、*构件图*、*组合结构图*、*用况图*、*顺序图*、*通信图*、*状态图*、*活动图*、*部署图*、*包图*、*定时图*、*交互概览图*
类图:展示了一组类、接口、协作和他们之间的关系
对象图:展示了一组对象以及他们之间的关系
构造图:展示了一个封装的类和他的接口、端口、以及又内嵌的构件和连接件构成的内部结构
用况图 : 展示了一组用况、参与者(一种特殊的类)以及他们之间的关系
顺序图/通信图:都是交互图 展示了一种交互,有一组对象或角色以及他们之间可能发送的消息构成 。 交互图专注于系统的动态视图。顺序图强调消息的时间次序;通信图强调收发消息的对象或角色的结构组织
状态图: 由状态、转义、时间和活动组成。展示了一个状态机(对象的动态视图)
活动图 : 将进程或其他计算结构展示为计算机内部一步步的控制流和数据流;系统的动态视图;强调对象间的控制流程
部署图: 展示了对运行时的处理节点以及在其中生成的构件的配署 (静态部署视图)
制品图: 计算机中的一个系统的物理结构
包图: 模块本身分解而成的组织单元以及它们的依赖关系
定时图: 一种交互图,消息跨越不同对象/角色的实际时间,而不仅仅关心消息的相对顺序
交互概览图: 活动图和顺序图都而混合物
### UML规则
#### 语法和语义规则
* 命名 (为事物、关系、图起的名字
* 范围 (使名字具有特定含义的语境
* 可见性 (这些名字如何让其他成员看见和使用
* 完整性 (事物如何正确 一致的相互联系
* 执行 (运行或模拟动态模型的含义是什么
为了应对开发期间的变化 有时候也建造这样的模型
* 省略 ( 因此某些元素以简化视图
* 不完全 ( 可能遗漏了某些元素
* 不一致 ( 不保证模型的完整性
#### UML中的公共机制
* 详述 (提供了对构造块的语法和语义的文字叙述
* 修饰 (唯一和直接的图形表示符号 如 是否是抽象类 属性操作是否可见 +公共 # 受保护 -私有
* 通用划分(类和对象的划分 接口和实现的分离 类型和角色的分离。如 对象:名称有下划线
* 扩展机制(
衍型:扩展UML的词汇 用来构造新的构造块
标记值:扩展了UML衍型的特性
约束:扩展了UML构造块的语义
## 体系结构
``要求从多个角度去观察系统 最终 用户、分析人员、开发人员、测试人员。。。``
软件结构是一组有关下属内容的总要决策:
* 软件系统的组织
* 对组成系统的结构元素及其接口的选择
* 像元素间的协作锁描述的那样的行为
* 将这些结构元素和行为元素组合刀逐步增大的子系统中
* 知道这种组织的体系结构风格:静态、动态元素及其他们的接口 协作和组成
``软件体系结构不仅关心结构和行为 还关心 用法 功能 性能 弹性 复用 可理解 。。。``
**最好用5个互联的视图来描述软件的密集型系统的体系结构 设计、实现、用况、交互、部署视图**
用况视图: 被最终用户 分析人员 测试人员看到的系统行为的用况组成。(业务逻辑?)
设计视图: 包含类 接口 协作
交互视图:系统的不同部分之间的控制流,包括并发/同步机制。主要针对性能 可伸缩性 系统吞吐量
实现视图: 装配和发布物理系统的制品
部署视图:包含了形成系统硬件拓扑结构的节点
## 软件的开发周期
任务>业务模型>需求>分析和设计>实现>测试>部署