UML系统建模专题---1、UML概述和理论

概述

什么是uml

Unified Modeling Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言,
语言,也就是一个表达思想的符号约定。

uml的发展与版本

  • 建模语言出现在二十世纪70年代,80年代末开始迅速发展,建模语言达到了50多种,百家争鸣
  • 后来,Rumbaugh于1994年加入Booch所在的Rational公司,他们一起研究一种统一的方法
  • 一年后,Unified Method 0.8诞生
  • 经过他们三年的共同努力,UML0.9和UML0.91于1996年相继面世。
  • 此后UML创始人Booch等人,邀请计算机界的知名人士与企业IBM,HP,Microsoft,Oracle等对 UML进行评论,听取意见。
  • 1997年1月,Rational公司向OMG(对象管理组织)提交了UML1.0
  • 1997年11月,OMG宣布接受UML,认定为标准的建模语言
  • 1998年发布了UML 1.2
  • 1999年发布了UML 1.3
  • 2003年3月发布了UML 1.5
  • 2004年推出UML2.0

uml可以做什么

从命名上分析:统一、建模、语言

统一:没有规矩不成方圆,它指定了一种标准,一种约束,使得大家的表达变得一致。它被OMG(Object Management Group)所认可。

OMG是一个国际化的、开放成员的、非盈利性的计算机行业标准协会,该协会成立于1989年,他是软件行业中一个标准的认可。包括客户、领域专家、分析师、设计师、程序员、测试工程师及培训人员等。uml成为他们工作中统一的沟通工具,用于充分理解和表达自己所关注的内容

建模:复杂业务系统建模,即建立软件系统模型。uml的创始人之一Booch,曾用建一座摩天大楼来比喻uml的必要性。简单系统下,可有可无,系统复杂或大到一定程度,建模和文档成为系统周期里非常重要的一环。

语言:面向对象思想的表达。互相之间的沟通工具。一种按照特定规则和模式组成的符号系统。

关于uml的争议

观点一:uml是鸡肋,离程序员真正需要的设计工具还差得很远。只有为数不多的程序员使用这个工具交流想法,而没有用在具体工作中。

观点二:uml设计相当的严谨与全面,在面向对象的系统架构上,可以便捷的表达你想要表达的一切想法,优美切无可替代。

个人观点:一项技能和工具,学会并不难,需要的时候能拿来用就好,艺不压身。

切忌形式化

  • 不要把uml过度神化
  • 一个表达想法的工具而已
  • 当用则用,不要刻意去套

理论

关系

关系是现实世界中事物与事物之间相互关系的符号表达,抽象到面向对象理念上,大致分为6种。

泛化(Generalization)

定义:

  • java里的extends,可用于接口与接口之间,或父子类之间
  • 单向,箭头指向父类,如Tiger指向Anima

代码:

//类
public class Animal {
}
public class Cat extends Animal {
}
//接口
public interface Action {
}
public interface Jump extends Action {
}

实现(Realization)

定义:

  • java里的implements,箭头指向接口
  • 单向,如Tiger扩展了Sleep接口,那么箭头指向Sleep

代码:

public interface Jump {
}
public class Tiger implements Jump {
}

依赖(Dependency)

定义:

  • 某个类或对象实例,依赖于另一个而存在,在其关键方法中用到了对方
  • 如果一方属性发生变动,另一方可能会收到影响
  • 一般为单向,例如动物依赖于食物,eat(Food food)
  • 类比在表结构上,更像是外键

代码:方法参数,局部变量

关联(Association)

定义:

  • 是一种拥有的关系,双方不一定属于同一类事物,箭头指向被拥有者
  • 可以单向,也可以双向,例如Tiger与Zookeeper
  • 类比在表结构上,更像是存在中间表关系

代码:成员变量

聚合(Aggregation)

定义:

  • 单向,空心菱形起始的箭头,箭头指向被拥有者
  • 一种很弱的拥有关系,A可以拥有B,但是不是离了B就无法生存
  • 群体与个体的关系,如小组包含组员

代码:成员变量,多为集合

组合(Composition)

定义:

  • 单向,实心菱形为起始,箭头指向子模块
  • 一种整体与部分的关系,A是由B组成的,离开B则不完整。
  • 单向,如人和四肢的关系

代码:成员变量,多为集合

实例

一张图涵盖所有的关系:

在这里插入图片描述

总结

  • 继承和实现几乎不会搞混,一个上下父子关系,一个是类与接口
  • 组合与聚合要注意,聚合为聚集,群体与个体。组合为组成,整体与部分
  • 关联和依赖要注意,关联一般为同级别有相关性,这种相关性是长期存在的。依赖为需求关系,一
  • 方需要依赖另一方,可能会因另一方的改变而改变。
  • 关系的强弱顺序:继承=实现>组合>聚合>关联>依赖

概述

在这里插入图片描述
uml中的图形非常多,按类型分为结构图和行为图,其中,最常用,最典型的为9种,下面分开来介绍。

  • 用例图:从用户角度描述系统功能。
  • 类图:描述系统中类的静态结构。
  • 对象图:系统中的多个对象在某一时刻的状态。
  • 状态图:是描述状态到状态控制流,用于表达系统状态的变化
  • 活动图:描述了业务实现用例的工作流程,强调的是动作之间的衔接
  • 序列图:对象之间的动态合作关系,强调对象发送消息的顺序
  • 协作图:描述对象之间的协助关系,强调对象之间的合作关系
  • 组件图:描述系统各个组件及其相关关系的静态视图
  • 部署图:定义系统中软硬件的物理体系结构

类图

  1. 说明
  • 面向对象系统建模中最常用和最重要的图,是定义其它图的基础
  • 主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型
  • 描述细化相关的属性和操作,是一个对业务模型面向对象化的过程,也是对系统的约束
  • 可以直接构建可执行代码,但真正使用的场景相对较少
  1. 可用元素
    在这里插入图片描述
  • 类:
  • 在这里插入图片描述
  • 接口:
    在这里插入图片描述
  • 关系:可以使用上述中的6大关系。
  1. 实例
    在这里插入图片描述

对象图

  1. 说明
  • 对象图和类图一样反映系统的静态过程,但它表达的是一个实际场景。
  • 对象图显示某时刻对象和对象之间的关系。可看成一个类图的快照。
  • 对象图是类图的实例,所以几乎使用与类图完全相同的标识
  1. 可用元素
    对象:
    在这里插入图片描述
  2. 关系
    对象图因为是运行在某个时间节点的对象镜像,所以关系比较单一,描述的是类与类的实例之间。不涉 及接口
  • 关联:对象之间存在关联关系,如用户和订单
  • 依赖:对象实例之间的依赖关系,如商品对象依赖店铺
  1. 图例
    在这里插入图片描述

组件图

  1. 说明
  • UML1.1中,组件图是用来描述一个系统的物理构件。包括文件,可执行文件,库等
  • UML2 中,关注组件间的关联(使用什么接口,通过什么端口通讯),强调通过接口来描述组件行 为
  • 对于后端来说,组件图比较适用于 SOA 架构、微服务架构,描述整个系统的结构以及子系统间的 通讯方式
  • 对于前端来说,组件图适合在使用类似 react、vue 这样组件化的前端技术框架时,表达对组件的 设计,比如一个页面会有个骨架组件,骨架组件包含了导航组件,列表组件等等
  1. 可用元素
    在这里插入图片描述
    在这里插入图片描述
  • 组件:描述的是系统的其中一个组成部分,一个完整的可独立服务的模块或单元,比如订单服务, k8s里的一个pod
  • 部件:组件内可能细化为多个子模块
  • 端口:组件对外提供服务就必须暴露对应的端口。如http rest服务默认的80
  • 接口:部件/组件之间的一种约定,分提供者和需求者同时展示了某个部件提供出的功能
  1. 关系
  • 泛化:用于接口与接口之间存在的父子关系,组件之间也可能存在,但相对用的较少
  • 实现:接口和其实现者(提供服务的组件)之间
  • 关联:Require link / Connector ,接口与调用者(需要接口的组件)之间
  1. 图例
    在这里插入图片描述

部署图

  1. 说明
  • 一种展示运行时进行处理的节点和在节点上存在的组件配置的图。
  • 阐述了在实际应用中软件和它的运行环境的关系,并且描述了软件部署在硬件上的具体方式。
  1. 可用元素
    在这里插入图片描述
  • 节点
    早先单实例MVC架构下,节点可以认为是某台物理服务器,微服务及容器化下,物理服务器大多纳 入编排管理,docker实例由系统在物理节点见自由调度,组件无法锁定在某个固定物理节点上,这 种环境下的node可以理解为一个容器,或k8s中的pod。

  • 组件实例
    相当于组件里的实例化,类比于类和对象

  1. 关系
  • 依赖:发生于组件之间,如用户组件依赖于订单组件
  • 关联:node association,发生于节点之间,例如应用服务器需要关联mysql数据库
  1. 图例
    在这里插入图片描述

用例图

  1. 说明
  • 用例图是用来描述系统功能的技术,表示一个系统中用例与参与者及其关系的图
  • 主要用于需求分析阶段,和产品文档比较贴近
  • 用例图相当于从用户的视角来描述和建模整个系统,分析系统的功能与行为。
  1. 可用元素
  • 参与者:使用系统的人,有多少种角色就有多少参与者。
  • 用例:参与者可用做的事情
  1. 关系
  • 泛化:参与者之间可用泛化,例如用户与普通会员;用例也可用泛化,如用户管理与修改密码
  • 关联:发生于参与者和用例之间,表示该角色可用有哪些用例(行为)
  • 依赖:发生与用例之间,例如登录依赖于注册
  1. 图例
    在这里插入图片描述

交互图

交互图分为序列图和协作图,两者既可以相互转换而不丢失信息,又存在一定差异。下面分开讲再类比

序列图
  1. 说明
  • 序列图主要用于按照交互发生的一系列顺序,显示对象之间的消息或行为传递。
  • 序列图可以形象表达整个流程,和流程图有相似之处,但是流程图偏业务逻辑,序列图则是系统面 向对象化建模后,对应到对象上的交互过程。趋向于开发者角度。
  1. 可用元素
    在这里插入图片描述
  • 对象:提供功能和交互的类的实例
  • 参与者:同用例种的参与人,多为一段流程的发起点
  • 时间线:对象在整个交互流程中的生命周期
  • 消息:对象间需要发送和返回的消息,可以自己发给自己
  • 外部参考:序列图可以引入外部的一段作为参考,或参与序列中与当前图的元素交互
  • 片段:将某一段序列纳入片段管理,该片段像原子一样,发生某些整体的行为,例如循环
  1. 关系
  • 不会用到6大关系,相互之间使用message交互。代表的是信息流动。
  1. 图例
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283554.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【unity小技巧】使用三种方式实现瞄准瞄具放大变焦效果

最终效果对比 文章目录 最终效果对比前言第一种办法方法二1. 创建URP环境2. 配置 Universal Render Pipeline Asset3. 这里向我们新建一个无光的ShaderGraph4. 主图配置4. 新建材质,挂载5. 下面是shaderGraph 的连线图6. 新增脚本控制ObjectScreenPosition随着瞄准镜…

C语言之文件操作(下)

C语言之文件操作(下) 文章目录 C语言之文件操作(下)1. 文件的顺序读写1.1 文件的顺序读写函数1.1.1 字符输入/输出函数(fgetc/fputc)1.1.2 ⽂本⾏输⼊/输出函数(fgets/fputs)1.1.3 格…

MySQL 报错 You can‘t specify target table for update in FROM clause解决办法

You can’t specify target table for update in FROM clause 其含义是:不能在同一表中查询的数据作为同一表的更新数 单独执行复合查询是正常的,如下: 但是当执行子查询删除命令时,报如下错误 DELETE FROM abpusers WHERE Id I…

【Gradle】运行时一直要下载 gradle-8.5-bin.zip

如何解决 Downloading https://services.gradle.org/distributions/gradle-8.5-bin.zip 的问题 文章目录 1. 问题描述2. 解决方法1)找到 gradle-wrapper.properties2)修改 distributionUrl 对应的值 3. 验证 1. 问题描述 在执行 gradlew 命令的时候&…

频谱论文:面向频谱地图构建的频谱态势生成技术研究

#频谱# [1]李竟铭.面向频谱地图构建的频谱态势生成技术研究.2019.南京航空航天大学,MA thesis.doi:10.27239/d.cnki.gnhhu.2019.000556. (南京航空航天大学) 频谱地图是对无线电环境的抽象表达,它可以直观、多维度地展现频谱态势信息&…

基于Python实现的一个书法字体风格识别器源码,通过输入图片,识别出图片中的书法字体风格,采用Tkinter实现GUI界面

项目描述 本项目是一个书法字体风格识别器,通过输入图片,识别出图片中的书法字体风格。项目包含以下文件: 0_setting.yaml:配置文件,包含书法字体风格列表、图片调整大小的目标尺寸等设置。1_Xy.py:预处理…

【最新版】在WSL上运行 Linux GUI (图形用户界面)应用(Gnome 文本编辑器、GIMP、Nautilus、VLC、X11 应用)

文章目录 一、 安装WSL0. 先决条件1. 全新安装2. 现有 WSL 安装3. 注意事项 二、运行 Linux GUI 应用1. 更新发行版中的包2. 安装 Gnome 文本编辑器启动 3. 安装 GIMP启动 4. 安装 Nautilus启动 5. 安装 VLC启动 6. 安装 X11 应用 适用于 Linux 的 Windows 子系统 (WSL) 现在支…

深入理解强化学习——马尔可夫决策过程:价值迭代-[价值迭代算法]

分类目录:《深入理解强化学习》总目录 文章《深入理解强化学习——马尔可夫决策过程:价值迭代-[最优性原理]》和文章《深入理解强化学习——马尔可夫决策过程:价值迭代-[确认性价值迭代]》介绍了价值迭代的基础知识,本文将介绍价值…

在公司内网开发的时候如何和互联网第三方平台环境联调之内网穿透

一、背景 一般情况下,不会出现所处不在同一网段进行后端服务联调,但是当遇到和第三方平台对接之时,这个时候如果你自身处在公司内部局域网的范畴下,那么一般都是会被保护的,也就是说外网无法访问你的ip。这个时候就需…

【赠书第11期】Unity 3D游戏开发

文章目录 前言 1 Unity 3D简介 2 Unity 3D基本概念 2.1 场景(Scene) 2.2 游戏对象(Game Object) 2.3 组件(Component) 2.4 资源(Asset) 3 Unity 3D重要组件 3.1 物理引擎 …

百分比组件 - elementui改动

<el-slider v-model"value2" style"width: 87%;position: absolute;bottom: 9px;" disabled :show-tooltip"false"></el-slider>value2: 0,// 百分比条 ::v-deep .el-slider__runway.disabled .el-slider__bar {background-color: #…

Go标准包之flag命令行参数解析

1.介绍 在 Go中&#xff0c;如果要接收命令行参数&#xff0c;需要使用 flag 包进行解析。不同的参数类型可以通过不同的方法接收。 2.参数接受 2.1 接受方式 使用flag接收参数&#xff0c;可以由以下三种方式接受&#xff1a; 方式一: flag.Type(name,defaultVal,desc)方…