架构师系列 (一) UML 建模语言概览


文章的开头,我先给大家推荐一个网址 StartUML下载地址,它是一个可以快速构建UML项目的IDE工具,我写博客时的版本是3.1.0。 下面的很多图都是通过它来绘制的。

一、UML的概念

UML (Unified Modeling Language):中文词意就是 统一建模语言,是一种专门为面向对象编程语言提供统一的、标准的、可视化的建模语言(绘图语言),可以为开发出来的产品进行说明、解释或者文档化。它主要采用各种图形化符号作为语言,通过建立各种关系来表达出一种模型结构。

UML的定义包括UML语义和UML表示两个部分。
(1)UML语义:UML对语义的描述使开发者能在语义上取得一致认识,消除了因人而异的表示方法造成的影响。
(2)UML表示法:UML表示法其实主要指的是UML符号的表示法,它为开发者或开发工具使用这些图形符号和文本语法为程序建模提供了标准。

对象是现实世界的实体存在我们周围像抽象,封装,继承,多态的基本概念,都可以使用UML表示。因此,UML 是强大到足以代表所有的概念存在于面向对象的分析和设计。

所谓模型:就是对现实事物的抽象,帮助人们更好的理解事物的本质,在Think in Java 中有提到过“解决问题的复杂程度直接取决于抽象的质量”。比如售楼部中的楼盘模型。

二、为什么要有UML这门语言

在生活中,不管做任何事之前,都讲究一个“三思而后行”,而开发软件亦是要求如此,那么作为一个软件开发工程师,针对于程序的开发流程,一定要有一个大致的估算。做到“手中有粮,心中不慌”。所以在动手前一定要做到以下几点:

  • 想要做出一个怎样的项目?
  • 做成的项目包含怎样的功能?
  • 怎样去实现想要的功能?

上面三句话看起来很是简短,它虽能概括出大致的方向,但还是无法详细的表述出我们想要做的具体事物,毕竟软件设计本就是一个比较复杂的事情,这时单纯的想要用文字去把内部的各种情况都概述清楚,就是一件很困难的事情了,这时 UML建模语言 出现了,将要写的项目利用它绘制成一个完善且准确的模型,那么在接下来的编写过程中,你会发现什么叫做 “事半功倍”

三、UML语言的架构

了解了UML的概念和作用之后,我们就需要去更加深入的认识一下UML了,它既然被称为一种“绘图语言”,那么自然会存在很多的基本元素了,而在UML中我们会将各种元素统称为 “事务”。

1、UML的建模类型

UML建模语言可以将现实生活中的各种事物抽象出来,然后利用各种 事务 和关系构建成不同类型的模型,大致可以分为两种:

  • 结构模型 : 主要用来描述各种 事务 之间的静态关系或者状态。
  • 行为模型 : 主要用来描述各种 事务 之间的交互行为或者活动流程。

而在上面这两种模型结构中又都是有以下三个部分构成:

2、UML中的事务(Things)

事务是UML模型中最基本的构成元素,主要是用某些图形来表示有意义的,有代表性的实体的抽象,他们有些在语法中代表了动词,那么同样的有些就可以代表名词。下面我先简单描述一下大概具有哪些事务,然后再通过图例一个一个的去演示它。

  • 接口
  • 角色
  • 用例
  • 协作
  • 状态
  • 组件
  • 节点

上面是概述,下面是用UML中各自代表的图形。图比较多,请大家见谅!

  • : 用来表示对象,可以是任何事物的抽象
    在这里插入图片描述

类注释:
1、第一层 :ClassName 描述类的名字。
2、第二层:Attributes 描述类的属性,其中“+”为public、“#”为protected、“-”为pivate。
3、第三层:Operations 描述方法 ,其中“+”为public、“#”为protected、“-”为pivate。

  • 接口:用来规范功能,只是一个模板,定义不同的功能。
    在这里插入图片描述

  • 角色 :某些内部或外部与程序进行交互的实体,主要用于用例图中。
    在这里插入图片描述

  • 用例 :它描述了程序提供的一个功能单元,用例图的主要目的是帮助开发团队以一种可视化的方式去理解程序的功能需求。
    在这里插入图片描述

  • 协作 :它表示一个包含了很多责任的对象,主要用于用例图
    在这里插入图片描述

  • 初始状态 : 一个逻辑的初始化的状态,是用来显示一个过程的起点。

  • 最终状态 :一个逻辑的最终状态,代表一个过程的最后节点。

  • 节点 : 它用来表示一个物理的系统组件。可以是服务器,也可以是客户端等等。
    在这里插入图片描述

  • 注释:针对某个元素的解释说明。
    在这里插入图片描述

3、UML的关系(Relationships)

没有关系的事务单独存在是无法构建模型的,只有当各个事务之间存在了与之对应的关系之后,它才能用来表示一个完整的模型,关系把事务紧密的联系在一起。在UML通常使用的关系有:

  • 泛化关系(Generalization)
  • 实现关系(Realization)
  • 依赖关系(Dependency)
  • 关联关系(Association)
  • 聚合关系(Aggregation)
  • 组合关系(Composition)

上面是概述,下面是用UML中各自代表的图形。

  • 泛化关系(Generalization):泛化就是通常所说的继承,比如:孩子继承与父亲。
    在这里插入图片描述

  • 实现关系(Realization):就是借口的实现,比如:人可以实现技能借口,具备能力。
    在这里插入图片描述

  • 依赖关系(Dependency):表示了相关元素之间有方向的依赖,其中一个类的变化将影响被依赖的元素。比如:人类依赖水。
    在这里插入图片描述

  • 关联关系(Association):关联可以是单向的也可以是双向的,关联可以理解为,一个类持有另外一个类的引用。比如:男女朋友间相互思念着彼此(双向关联)。
    在这里插入图片描述

  • 聚合关系(Aggregation):它是关联关系的一种特殊表现,强调的是一种总体与局部的关系。比如:汽车 和 发动机。
    在这里插入图片描述

  • 组合关系(Composition):组合也可以被称为合成,它是一种更强的关联,虽然同样形容的是总体和局部的关系,但是这里的局部销毁了意味着总体也需要销毁。比如:人和心脏的关系。

在这里插入图片描述

4、UML的图形(Diagrams)

从一开始我就有提到UML其实是一种图形化语言,那么归根结底最后都需要以一种图表的形式呈现出来,而我们上面认识到的各种事物和关系就是组建成图的元素,它们可以根据不同的形式组建成功能不同的UML图形。其中根据作用的不同可以分为两大类,九小类。

  • 结构图:它表示了程序的静态方面。
    1、类图
    2、对象图
    3、组建图
    4、部署图
  • 行为图:它表示了程序的动态方面。
    5、用例图
    6、序列图
    7、协作图
    8、状态图
    9、活动图

上面是概述,下面是用UML中各自代表的图形。

  • 类图:类图是建模时最常用的图形,也是定义其他图的基础,主要用来表示项目中的类、接口以及它们之间的静态结构和关系。
    画类图时需要注意一些规则:

    • 类图中的名称应该是有意义的描述,并且是面向对象的。
    • 画类图前应先确定每个事务之间的关系。
    • 类图中的每个类职责(属性和方法)应该清晰标明。

在这里插入图片描述

  • 对象图 :对象图和类图一样都是映射项目的静态过程,不同的是类图可以用于描述类和类之间的关系,它是一直存在的,但是对象图是能是程序中某一个时间段内存在,目的是在表述特定的时刻程序的静态视图。
    在这里插入图片描述

  • 组件图 :又称为构件图,它描述的是软件程序中遵从并实现的一组软件模块,它是一种特殊的UML图,跟我们说的都不一样,它不去表述程序的功能,只是单独的去形容其中的某些组件,可以把它想象成程序中所有库的引用关系。

在这里插入图片描述

  • 部署图:部署图主要由节点以及节点组成,它描述的是程序运行时的结构,展示了硬件及软件如何部署到网络结构中,一个项目中只能拥有一个通常用来解释分布式项目。
    在这里插入图片描述

  • 用例图:它描述了程序的动态行为,并且描述了各个事务之间的交互关系。
    在这里插入图片描述

  • 交互图:描述的是对象之间的动态合作关系已经合作过程的行为次序,即一个用例的实现过程。其中又可以分为 序列图 和 协作图。两者相差不大。
    在这里插入图片描述

  • 状态图 :状态图是图标本身的名称,主要用于描述对象具有的各种状态或者是状态之间的转换过程。我们可以把它定义为一台机器,内部有不同的状态和控制机器。
    在这里插入图片描述
    截图自w3cschool,如有侵权,请联系我,马上删除(不行了,实在画不动了,太多了)

  • 活动图 :它跟状态的表现形式几乎一致,因为它是一种特殊的状态图。述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。

在这里插入图片描述
截图自w3cschool,如有侵权,请联系我,马上删除(不行了,实在画不动了,太多了)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值