热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UML常用的基本图形简介

UML概述统一建模语言UML是说明、可视化、构造和文档软件系统语言,也是一种定义良好的、易于表达、功能强大的通用建模语言,它提供了一种机制使得不同的开发人员之间可以有效地共享和交流。U

UML概述

统一建模语言UML是说明、可视化、构造和文档软件系统语言,也是一种定义良好的、易于表达、
功能强大的通用建模语言,它提供了一种机制使得不同的开发人员之间可以有效地共享和交流。

UML提供了多种图。一个图就是系统架构在某一方面的表示,每一种UML的视图就是由一个或多个图组成,
所有的图共同组成系统的一组完整视图,这组视图被称为一个模型(Model)。模型是对现实系统的一种抽象,
反映了现实系统中最主要的方面,是理解、分析、开发现实系统的一种最常用方式。

UML提供的基本的图形:

类型 包含的图
静态图 类图、对象图、包图
行为图 状态图、活动图
用例图 用例图
交互图 序列图、合作图
实现图 组件图、部署图

UML的常用图

类图(Class Diagrams)

类图是UML中最基本的图。它既可以描述类和接口,也可以表示类之间关系。
img
图1 描述类和接口的类图表示

图一左边的图用UML表示一个类Person。矩形方框代表类的图标。它被分为3个区域:
最上面的区域是类名,中间区域是类的属性,最下面的区域是类的操作。右边的图表示
接口,区别仅仅是类名上要加interface

类名如果是正体字,表明类是具体的(Concrete),即可以实例化的类;如果类是斜体,
表明类是抽象的,并且类名是不可省略的。

在属性层,一个属性可以是private,public,protected。类的属性左边如果是 + ,表示
该属性是public;如果是 - ,表示它是private;如果是 # ,表示它是protected。如果
是 ~ ,表示它是implementation。
第三个区域方法名的左边的符号与属性相同,括号里是方法参数,冒号后面是方法的返回值。

如果方法或者属性是static,下面就会有下划线。如果方法是抽象的,则用的斜体描述。

类之间的关系也可以用UML表示。
泛化关系是类于类之间的继承关系。图2展示这种关系。
img

图2 Point、Line和Square类继承Shape

关联关系是类与类之间的连接,它使得一个类知道另一个类的属性和方法。关联既可以是双向的,
也可以是单向的。单向的关联使用一个箭头表示关联的方向。每一个关联都有两个端点,端点
可以有一个角色名,显出关联的对象。在每一个关联的端点还可以有基数(Cardinality),
表明这一端的类有几个实例,常见基数如下表:

基数 含义
0..1 0个或一个实例
0..\*或\* 对实例的数目没有限制
1 只有一个实例
1..\* 至少一个实例
m..n m~n个实例

img

图3 聚合关系的实例

图3展示了聚合的关系:飞机场跟飞机关联,飞机场拥有飞机,飞机场是整体,飞机是个体;
图中的基数表示当有了一个飞机场,机场可以有任意架飞机,一架飞机既可以属于机场,
也可以不在机场。

img

图4 合成关系实例

图4表示合成关系:汽车拥有轮胎,且轮胎是汽车的必要部分,轮胎与汽车的生命周期相同;
图中的基数表示一辆车拥有4个或5个轮胎,而轮胎必须属于这辆车。在图4中,汽车与加油站
存在依赖关系,汽车会使用加油站。

对象图(Object Diagrams)

对象的表示也是一个矩形,但与类表示的不同之处在于对象名下面要带下划线。

img

图5 对象图的表示形式

在图5的左边的表示中,具体实例的名字位于冒号的左边,右边为所属的类。右边表示一个
匿名对象。

序列图(Sequence Diagrams)

可以用来表示对象之间如何交互的UML图称为交互图(Interaction Diagrams),交互图中最常见
的就是序列图。

img

图6 用户在ATM上查询账号信息的序列图

在图6的序列图中,最上面的每个矩形代表一个特定的对象;垂直的虚线代表对象的生命跨度;
对象彼此之间发送消息通过垂直线之间的水平线。

用例图(Use Case Diagrams)

用例是从用户的观点对系统行为的一个描述。用例图从用户的角度出发描述系统的功能、需求,
展示系统外部的各类角色与系统内部各种用例之间的关系。用例图包含多个模型元素,这些模型
包括系统,参与者和用例,并且用例图也显示这些元素之间存在的各种关系。

img

图7 自动售货机的一个用例模型

图7展示了一个自动售货机系统的一个用例模型,参与者有客户和售货员;椭圆代表用例,
有买饮料、放置饮料和收款。

状态图(Statechart Diagrams)

状态图是对类的描述的补充。它用于显示类的对象在一个生命周期实例期间能够具备的所有可能状态,
以及那些引起状态改变的事件。状态的变化称为转换,转换也可以有一个与之相连的动作,后者用于
指定完成这个状态转换系统应该执行的操作。

img

图8 电梯运行状态图

图8所示的是电梯运行状态图,其中包括初始状态(实心圆)、各种状态以及触发事件。

合作图(Collaboration Diagrams)

合作图描述对象之间的协作关系,也是交互图的一种。除了显示消息的交互外,合作图也显示
对象及他们之间的关系。在实际建模中,如果重点强调对象之间的关系,那就选择合作图。

img

图9 打印服务器的合作图

部署图(Deloyment Diagrams)

UML部署图显示了基于计算机系统的物理体系结构,他可以描述计算机,展示他们之间的连接,
以及驻留在计算机中的软件。每台计算机用一个立方体表示,立方体之间的连线表示计算机
之间的通信关系。

img

图10 部署图实例

图10表示的是一些人事软件和一些应用软件分别部署在客户端和数据库服务器上,客户端
与数据服务器之间可以通信。

活动图(Avtivity Diagrams)

活动图是状态图的一种特殊情况,它用于显示一系列的顺序的活动,可以捕获动作及他们的结果。
活动图可以用于不同的目的,包括:显示一组相关的动作将如何执行,以及他们怎样影响周围的对象;
显示一个用例的实例在动作和对象状态方面如何执行的;显示一个业务在参与者、工作流程、组织
和对象方面是如何运转的。图11是一个工程管理系统的文件打印的活动图。

img

图11 活动图的例子

组件图(Component Diagrams)

组件图是根据系统的代码组件来显示系统代码的物理结构。其中组件可以是源代码组件,
二进制组件或可执行组件。组件包含了它所实现的一个或多个逻辑类的相关信息,因此
也就创建了一个从逻辑视图的映射。根据组件图中显示的组件之间的依赖关系,可以很
容易的分析出其中某个组件的变化将会对其他组件产生什么样的影响。图12 给出了组件
图的表示方式。

img

图12 组件图的表示

包图(Package Diagrams)

包提供一种用于组织各种UML元素的分组机制。在UML中,包用来给元素进行分组,并为
这些元素提供一个命名空间。包所拥有的或引用的所有模型元素称为包的内容。如果从模型
中删除一个包,那么这个包所拥有的元素也将被删除。图13显示了包的图形表示

img

图13 包的图形表示

永久更新地址:http://www.xhcoding.cn/archives/154.html

参考链接:
维基百科
UML官方网站


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
花甲墨者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有