UML概述
什么是UML?
统一建模语言(UML)
维基百科给出如下定义:
统一建模语言(Unified Modeling Language)
,它是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。UML是一种图形化语言,支持模型化和软件系统开发
UML”4+1”视图
逻辑视图关注的静态元素是:层、子系统、类、接口,用类图来描述。关注的动态因素是协作关系,用时序图、协作图、状态图等来描述。是否需要在架构设计中体现类和类之间的关系?这取决于设计的层级。
开发视图(实现实体)关注的元素是程序包(SDK、解析器、中间件)、文件组织结构、编译依赖关系、目标单元(jar、exe、dll等)。它和逻辑视图的静态元素通常有映射关系。
运行视图(进程视图)关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。运行架构和开发架构的关系:开发架构一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程,运行架构比较关注的是这些运行时单元的交互问题。
部署视图关注“目标程序及其依赖的运行库和系统软件”最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。部署视图和运行视图的关系:运行视图特别关注目标程序的动态执行情况,而部署视图重视目标程序的静态位置问题;部署视图还要考虑软件系统和包括硬件在内的整个IT系统之间是如何相互影响的。
三个基本的部分
关系(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类图完成上面小学生捡钱的故事:
再举一个例子:
时序图
例子
状态图
对象在生命周期内的动态行为
就是状态机
状态、事件、动作
协作图
可与时序图互相转化
组件图
软件组件之间的关系
部署图
表现用于部署软件应用的物理设备信息