维基百科给出如下定义:
统一建模语言(Unified Modeling Language)
,它是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。逻辑视图关注的静态元素是:层、子系统、类、接口,用类图来描述。关注的动态因素是协作关系,用时序图、协作图、状态图等来描述。是否需要在架构设计中体现类和类之间的关系?这取决于设计的层级。
开发视图(实现实体)关注的元素是程序包(SDK、解析器、中间件)、文件组织结构、编译依赖关系、目标单元(jar、exe、dll等)。它和逻辑视图的静态元素通常有映射关系。
运行视图(进程视图)关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。运行架构和开发架构的关系:开发架构一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程,运行架构比较关注的是这些运行时单元的交互问题。
部署视图关注“目标程序及其依赖的运行库和系统软件”最终如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。部署视图和运行视图的关系:运行视图特别关注目标程序的动态执行情况,而部署视图重视目标程序的静态位置问题;部署视图还要考虑软件系统和包括硬件在内的整个IT系统之间是如何相互影响的。
用例(use case):表示驱动的业务目标
参与者(Actor):整个建模的中心
业务工人(business worker):系统中的被动参与者
起始点(Initial node)
边(Edge)
选择(Decision)
合并(Merge)
分支(Fork)
汇合(Join)
活动终止点(Activity final node)
类图:展示软件模型的静态结构、类的内部结构(属性和操作)以及和其他类的关系
例: Clock类的完整表示
属性表示
[可见性] 属性名[重数][‘:’类型][‘ =’初始值][{约束特征}]
可见性(访问控制性)分为+(公有)、#(受保护)或 -(私有)
操作表示:[可见性] 操作名[‘(‘参数列表’)’][‘:’返回类型] ][{约束特征}]
Clock类的简洁表示
对象图表示一组对象及它们之间的联系。
对象图是系统的详细状态在某一时刻的快照,常用于表示复杂的类图的一个实例。对象图实质上是具有关联关系的类图的实例。
... uses a ...
图中的“类A”是源,“类B”是目标,表示“类A”使用了“类B”,或称“类A”依赖“类B”
驾驶员和汽车之间的关系就是依赖关系
举个例子
学生捡到钱交给警察叔叔,学生和警察叔叔就是一种依赖关系。因为学生捡到钱给警察是一种偶然的事情,交给警察后他们之间就没有关系了。我们在学生类中加入一个交钱的方法,在警察类中加入一个收钱的方法,当调用学生的交钱方法时,就调用警察的收钱方法。
聚合关系是一种特殊的关联关系,聚合关系强调的是整体和部分的关系,其中部分可以脱离整体而存在。比如雁群和一只大雁的关系,就是聚合关系,大雁离开雁群还是可以独立存在的。再比如警察与制服的关系,制服也是警察的一部分,制服可以脱离警察而存在。在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