什么是UML?

统一建模语言(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类图表示如下:

可以看到在接口名字上多了一个<>字符来表示这个为接口。接下来我们让Student和Policeman都实现这个接口,UML类图如下:

 

最后UML类图完成上面小学生捡钱的故事:

 再举一个例子:

时序图

 

例子

状态图

对象在生命周期内的动态行为就是状态机状态、事件、动作

协作图

可与时序图互相转化

组件图

软件组件之间的关系

部署图

表现用于部署软件应用的物理设备信息

 

 

 

类图部分参考自https://www.jianshu.com/p/2828874af134

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。