什么是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类图表示如下:
可以看到在接口名字上多了一个<
最后UML类图完成上面小学生捡钱的故事:
再举一个例子:
时序图
例子
状态图
对象在生命周期内的动态行为就是状态机状态、事件、动作
协作图
可与时序图互相转化
组件图
软件组件之间的关系
部署图
表现用于部署软件应用的物理设备信息
类图部分参考自https://www.jianshu.com/p/2828874af134
推荐阅读
发表评论