UML科普⽂,⼀篇⽂章掌握14种UML图
前⾔
上⼀篇⽂章写了⼀篇建造者模式,其中有⼏个UML类图,有的读者反馈看不懂了,我们今天就来解决⼀哈。
什么是UML?
UML是Unified Model Language的缩写,中⽂是统⼀建模语⾔,是由⼀整套图表组成的标准化建模语⾔。
为什么要⽤UML?
通过使⽤UML使得在软件开发之前,
对整个软件设计有更好的可读性,可理解性,从⽽降低开发风险。同时,也能⽅便各个开发⼈员之间的交流。
UML提供了极富表达能⼒的建模语⾔,可以让软件开发过程中的不同⼈员分别得到⾃⼰感兴趣的信息。
Page-Jones 在《Fundamental Object-Oriented Design in UML》⼀书中总结了UML的主要⽬的,如下:
1. 为⽤户提供现成的、有表现⼒的可视化建模语⾔,以便他们开发和交换有意义的模型。
2. 为核⼼概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。
3. 独⽴于特定的编程语⾔和开发过程。
4. 为了解建模语⾔提供⼀个正式的基础。
5. ⿎励⾯向对象⼯具市场的发展。
6. ⽀持更⾼层次的开发概念,如协作,框架,模式和组件。
7. 整合最佳的⼯作⽅法 (Best Practices)。
UML图有哪些?
UML图分为结构图和⾏为图。
结构图分为类图、轮廓图、组件图、组合结构图、对象图、部署图、包图。
⾏为图⼜分活动图、⽤例图、状态机图和交互图。
交互图⼜分为序列图、时序图、通讯图、交互概览图。
UML图概览
什么是类图?
【概念】
类图是⼀切⾯向对象⽅法的核⼼建模⼯具。类图描述了系统中对象的类型以及它们之间存在的各种静态关系。
【⽬的】⽤来表⽰类、接⼝以及它们之间的静态结构和关系。
在类图中,常见的有以下⼏种关系。
泛化(Generalization)
【泛化关系】是⼀种继承关系,表⽰⼦类继承⽗类的所有特征和⾏为。
【箭头指向】带三⾓箭头的实线,箭头指向⽗类。
实现(Realization)
【实现关系】是⼀种类与接⼝的关系,表⽰类是接⼝所有特征和⾏为的实现。
【箭头指向】带三⾓箭头的虚线,箭头指向接⼝。
关联(Association)
【关联关系】是⼀种拥有关系,它使得⼀个类知道另⼀个类的属性和⽅法。
【代码体现】成员变量
【箭头指向】带普通箭头的实线,指向被拥有者。双向的关联可以有两个箭头,或者没有箭头。单向的关联有⼀个箭头。
⾃⼰买的车,想什么时候开就开。但是车是车,⼈是⼈,没有整体与部分的关系。
聚合(Aggregation)
【聚合关系】是⼀种整体与部分的关系。且部分可以离开整体⽽单独存在。聚合关系是关联关系的⼀种,是强的关联关系;关联和聚合在语法上⽆法区分,必须考察具体的逻辑关系。
【代码体现】成员变量
【箭头指向】带空⼼菱形的实线,空⼼菱形指向整体。
电脑有键盘才能输⼊信息,电脑是整体,键盘是部分,键盘也可以离开电脑,单纯的拿去敲。所以是聚合。
组合(Composition)
【组合关系】是⼀种整体与部分的关系。但部分不能离开整体⽽单独存在,组合关系是关联关系的⼀种,是⽐聚合关系还要强的关系。
【代码体现】成员变量
【箭头指向】带实⼼菱形和普通箭头的实线,实⼼菱形指向整体。
鸟是整体,翅膀是部分。鸟死了,翅膀也就不能飞了。所以是组合。我们再看⼀下,下⾯的⼀组经典的聚合组合关系的例⼦。
⼀个公司拥有多个部门,公司和部门之间是组合关系,公司破产了,部门就不复存在了。部门和员⼯是聚合关系,部门被裁掉,员⼯就换下家了。
依赖(Dependency)
【依赖关系】是⼀种使⽤关系,即⼀个类的实现需要另⼀个类的协助。
【箭头指向】带普通箭头的虚线,普通箭头指向被使⽤者。
⽼司机只管开车,车是谁的不重要,给什么车开什么车。
什么是组件图?
【概念】描绘了系统中组件提供的、需要的接⼝、端⼝等,以及它们之间的关系。
【⽬的】⽤来展⽰各个组件之间的依赖关系。
订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表⽰依赖关系。另外两个符号,表⽰组件连接器,⼀个提供接⼝,⼀个需要接⼝。
什么是部署图?
【概念】描述了系统内部的软件如何分布在不同的节点上。
【⽬的】⽤来表⽰软件和硬件的映射关系。
图中简单的表⽰,不同机器上⾯部署的不同软件。
什么是对象图?
【概念】对象图是类图的⼀个实例,是系统在某个时间点的详细状态的快照。
【⽬的】⽤来表⽰两个或者多个对象之间在某⼀时刻之间的关系。
图中就是描述的,某时间点bat这个公司有⼀个研发部,⼀个销售部,两个部门只有⼀个⼈iisheng。
什么是包图?
【概念】描绘了系统在包层⾯上的结构设计。
【⽬的】⽤来表⽰包和包之间的依赖关系。
《Use》关系表⽰使⽤依赖,Web Shopping依赖Payment
《Merge》关系表⽰合并,Web Shopping合并了Shopping Cart就拥有了Shopping Cart的功能
《Access》关系表⽰私有引⼊,⽐如代码中的指定包名类名
《Import》关系表⽰公共引⼊,⽐如Java中的import之后,就可以直接使⽤import包中的类了。
什么是组合结构图?
【概念】描述了⼀个"组合结构"的内部结构,以及他们之间的关系。这个"组合结构"可以是系统的⼀部分,或者⼀个整体。
【⽬的】⽤来表⽰系统中逻辑上的"组合结构"。
图中描述了Car是由车轴连接着的两个前⾯轮⼦、两个后⾯轮⼦,和引擎组合的。
什么是轮廓图?
【概念】轮廓图提供了⼀种通⽤的扩展机制,⽤于为特定域和平台定制UML模型。
【⽬的】⽤于在特定领域中构建UML模型。
图中我们定义了⼀个简易的EJB的概要图。Bean是从Component扩展来的。Entity Bean和Session Bean继承了Bean。EJB拥有Remote和Home接⼝,和JAR包。什么是⽤例图?
uml图用什么软件画
【概念】⽤例图是指由参与者、⽤例,边界以及它们之间的关系构成的⽤于描述系统功能的视图。
【⽬的】⽤来描述整个系统的功能。
⽤例图中包含以下三种关系:
包含关系使⽤符号《include》,想要查看订单列表,前提是需要先登录。
扩展关系使⽤符号《extend》,基于查询订单列表的功能,可以增加⼀个导出数据的功能
泛化关系,⼦⽤例继承⽗⽤例所有结构、⾏为和关系。
什么是活动图?
【概念】描述了具体业务⽤例的实现流程。
【⽬的】⽤来表⽰⽤例实现的⼯作流程。
图中简单描述了,从开始到登录到查看订单列表,或者登录失败直接结束。
什么是状态机图?
【概念】状态机图对⼀个单独对象的⾏为建模,指明对象在它的整个⽣命周期⾥,响应不同事件时,执⾏相关事件的顺序。
【⽬的】⽤来表⽰指定对象,在整个⽣命周期,响应不同事件的不同状态。
图中描述了,门在其⽣命周期内所经历的状态。
什么是序列图?
【概念】序列图根据时间序列展⽰对象如何进⾏协作。它展⽰了在⽤例的特定场景中,对象如何与其他对象交互。
【⽬的】通过描述对象之间发送消息的时间顺序显⽰多个对象之间的动态协作。
图中展⽰的是⽀付宝条码⽀付场景的序列图。其中,loop是循环,alt是选择,序列图的其他关系这⾥就不介绍了。
什么是通讯图?
【概念】描述了收发消息的对象的组织关系,强调对象之间的合作关系⽽不是时间顺序。
【⽬的】⽤来显⽰不同对象的关系。
图中展⽰了⼀个线上书店的通讯图,⽅框和⼩⼈表⽰⽣命线,不同⽣命线之间可以传递消息,消息前⾯的数字可以表达序列顺序。
什么是交互概览图?
【概念】交互概览图与活动图类似,但是它的节点是交互图。
【⽬的】提供了控制流的概述。
图中表⽰⼀个调度系统的交互概览图,跟活动图很像。其中sd的框代表具体的交互流程,ref框代表使⽤交互。
什么是时序图?
【概念】时序图被⽤来显⽰随时间变化,⼀个或多个元素的值或状态的更改。也显⽰时控事件之间的交互和管理它们的时间和期限约束。
【⽬的】⽤来表⽰元素状态或者值随时间的变化⽽变化的视图。
图中展⽰了⽼年痴呆病⼈随着时间的变化病情的变化。
总结
学习UML,我们没必要纠结⽐如像聚合关系是带箭头还是不带箭头,这样的问题。更重要的是UML图所
给我们带来的画图思想,让我们画UML图或者其他图能让其他⼈更好的理解我们的设计思想。
当然,你要是明确知道带箭头或者不带箭头哪个是错误的,欢迎留⾔告诉我。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。