统一建模语言(UML)
维基百科给出如下定义:
UML 即
统一建模语言(Unified Modeling Language)
, 它是一种开放的方法, 用于说明, 可视化, 构建和编写一个正在开发的, 面向对象的, 软件密集系统的制品的开放方法. UML 展现了一系列最佳工程实践, 这些最佳实践在对大规模, 复杂系统进行建模方面, 特别是在软件架构层次已经被验证有效.
UML 是一种图形化语言, 支持模型化和软件系统开发
UML"4+1" 视图
逻辑视图关注的静态元素是: 层, 子系统, 类, 接口, 用类图来描述. 关注的动态因素是协作关系, 用时序图, 协作图, 状态图等来描述. 是否需要在架构设计中体现类和类之间的关系? 这取决于设计的层级.
开发视图 (实现实体) 关注的元素是程序包(SDK, 解析器, 中间件), 文件组织结构, 编译依赖关系, 目标单元(jar,exe,dll 等). 它和逻辑视图的静态元素通常有映射关系.
运行视图 (进程视图) 关注进程, 线程, 对象等运行时概念, 以及相关的并发, 同步, 通信等问题. 运行架构和开发架构的关系: 开发架构一般偏重程序包在编译时期的静态依赖关系, 而这些程序运行起来之后会表现为对象, 线程, 进程, 运行架构比较关注的是这些运行时单元的交互问题.
部署视图关注 "目标程序及其依赖的运行库和系统软件" 最终如何安装或部署到物理机器, 以及如何部署机器和网络来配合软件系统的可靠性, 可伸缩性等要求. 部署视图和运行视图的关系: 运行视图特别关注目标程序的动态执行情况, 而部署视图重视目标程序的静态位置问题; 部署视图还要考虑软件系统和包括硬件在内的整个 IT 系统之间是如何相互影响的.
UML 语言是一种可视化的的面向对象建模语言, 描述软件模型的静态结构, 动态行为及模块组织与管理.
三个基本的部分
事物(Things)UML 中重要的组成部分, 在模型中属于最静态的部分, 代表概念上的或物理上的元素
关系(Relationships)关系把事物紧密联系在一起
图(Diagrams)图是很多有相互相关的事物的组
4 种类型的事物
结构事物(Structural things)
动作事物(Behavioral things)
分组事物(Grouping things)
注释事物(Annotational things)
UML 中的关系
依赖(Dependencies)
关联(Association)
泛化(Generalization)
实现(Realization)
UML 中的 9 种图
类图(Class diagram)
对象图(Object diagram)
用例图(Use case diagram)
时序图(Sequence diagram)
协作图(Collaboration diagram)
状态图(Statechart diagram)
活动图(Activity diagram)
组件图(Component diagram)
部署图(Deployment diagram)
用例图
用例图的组成
用例(use case): 表示驱动的业务目标
参与者(Actor): 整个建模的中心
业务工人(business worker): 系统中的被动参与者
活动图
活动图组成
起始点(Initial node)
边(Edge)
选择(Decision)
合并(Merge)
分支(Fork)
汇合(Join)
活动终止点(Activity final node)
类图
类图: 展示软件模型的静态结构, 类的内部结构 (属性和操作) 以及和其他类的关系
例: Clock 类的完整表示
属性表示
[可见性] 属性名[重数][':'类型]['='初始值][{约束特征}]
可见性 (访问控制性) 分为 +(公有),#(受保护)或 -(私有)
操作表示:[可见性] 操作名['('参数列表')'][':'返回类型] ][{约束特征}]
Clock 类的简洁表示
对象图
对象图表示一组对象及它们之间的联系.
对象图是系统的详细状态在某一时刻的快照, 常用于表示复杂的类图的一个实例. 对象图实质上是具有关联关系的类图的实例.
类与对象之间关系图
类之间关系的强弱
依赖关系 dependency
... uses a ...
图中的 "类 A" 是源,"类 B" 是目标, 表示 "类 A" 使用了 "类 B", 或称 "类 A" 依赖 "类 B"
驾驶员和汽车之间的关系就是依赖关系
举个例子
学生捡到钱交给警察叔叔, 学生和警察叔叔就是一种依赖关系. 因为学生捡到钱给警察是一种偶然的事情, 交给警察后他们之间就没有关系了. 我们在学生类中加入一个交钱的方法, 在警察类中加入一个收钱的方法, 当调用学生的交钱方法时, 就调用警察的收钱方法.
作用关系 -- 关联 Association
关联关系是一种比较强的关系, 他们的关系是比较持久的, 稳定的. 比如学生从家里出来, 学生和家就是一种关联关系. 这种关系是比较稳定的. 关联分单向关联和双向关联, 如果一个类知道或者引用了另一个类, 而另一个类不知道或者没有引用这个类, 则这两个类是单向关联的. 比如这里学生与家的关系就是单向关联的, 因为每个学生都是有个家的, 但不能说每个家里都有学生. 单向关联我们用带箭头的实线表示, 箭头指向被引用或者被包含的类, 这里也就是家这个类. 示例如下:
双向关联是两个类彼此都知道对方的存在, 比如老师与学生的关系就是双向的. 小明的语文老师是张老师, 张老师的学生有小明. 双向关联用不带箭头的实线来连接两个类. 示例如下:
包含 (inclusion) 关系
包含关系有两种: 聚合 (aggregation) 和组合(composition)
聚合关系是一种特殊的关联关系, 聚合关系强调的是整体和部分的关系, 其中部分可以脱离整体而存在. 比如雁群和一只大雁的关系, 就是聚合关系, 大雁离开雁群还是可以独立存在的. 再比如警察与制服的关系, 制服也是警察的一部分, 制服可以脱离警察而存在. 在 UML 类图中聚合用带空心菱形的直线表示, 其中菱形指向整体:
组合关系也是一种特殊的关联关系, 它与聚合关系很像, 也是强调整体与部分的关系, 不同的是部分无法脱离整体存在. 比如学生用手捡钱, 其中手就是学生的一部分, 但是手不能脱离学生而单独存在. 要是手能独立存在想想就可怕... 这里我们称学生与手为组合关系, 用带实心的菱形直线表示, 其中菱形指向整体:
泛化关系
泛化关系在中也叫作继承关系, 在 UML 中我们用带空心三角形的直线来表示, 我们增加两个类, 一个 Studen 类, 一个警察 Policemen 类, 两个类均继承自 Person 类, 那么他们的类关系图表示如下:
实现关系
这里的实现关系就是类与接口的实现关系, 在 UML 中我们用带空心三角形的虚线表示. 由于 Student 和 Policeman 都职业, 学生的职业就是学习, 而警察的职业为保护人民. 所有这里我们定义一个接口, 里面有一个职业的方法:
这个接口用 UML 类图表示如下:
可以看到在接口名字上多了一个 <<interfac>> 字符来表示这个为接口. 接下来我们让 Student 和 Policeman 都实现这个接口, UML 类图如下:
最后 UML 类图完成上面小学生捡钱的故事:
再举一个例子:
时序图
例子
状态图
对象在生命周期内的动态行为
就是状态机
状态, 事件, 动作
协作图
可与时序图互相转化
组件图
软件组件之间的关系
部署图
表现用于部署软件应用的物理设备信息
类图部分参考自 https://www.jianshu.com/p/2828874af134
来源: https://www.cnblogs.com/wkfvawl/p/11074334.html