设计模式中的UML基础

设计模式中的UML基础

目录

1、UML概述

2、UML的用途

3、UML的构成

4、UML图

5、UML类图

5.1、类的构成

5.2、类与类之间的关系

6、绘制UML图的软件工具

在讲解设计模式时,会使用到UML建模中的类图去讲解类与类之间的关系,所以这里需要给大家普及一下UML的相关知识。此外,我们在编写软件设计文档时需要绘制类图、时序图等;我们在学习源码时,可能也需要借助类图去查看分析。

1、UML概述

   UML的全称为United Modeling Language,是一种面向对象的可视化建模语言,通过图形符号描述现实系统的组成,通过建立图形之间图的关系来描述整个系统模型。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

   在软件开发的流程中,一般先要对软件系统进行规划和建模,把要做的功能、实现的方法、系统内部的业务流程与运行交互机制、要做到什么程度等这些基本问题分析清楚,才去写代码实现。建模是对现实问题按照一定的规则进行抽象与简化,通过建模把现实世界中的问题转化到计算机领域中进行分析和实现,软件建模的过程就是需求-建模-设计的一个过程。

我们在日常工作中会使用UML工具去绘制表示类与类之间关系图的类图、绘制业务实体关系的用例图、绘制业务状态相关的状态图以及绘制与业务流程相关的业务交互时序图等。

2、UML的用途
UML主要用于对软件系统业务流程和内部交互机制进行描述、可视化表述,用来构造和建立软件系统的文档,以方便对系统的理解、设计、浏览、配置、维护和信息控制。通过UML,参与软件的各个生命周期的人员可以方便的沟通交流。

3、UML的构成
UML由模型元素(Model Element)、图(Diagram)、视图(View)和通用机制(General Mechanism)等几个部分组成。

模型元素:代表面向对象中的类、对象、消息和关系等概念,是构成图的最基本的常面向对象系统分析与设计方法用概念。
图:是模型元素集的图形表示,通常是由弧(关系)和顶点(其他模型元素)相互连接构成的。
视图:表达系统的某一方面的特征的UMI,建模元素的子集,由多个图构成,是在某一个抽象层上,对系统的抽象表示。
通用机制:用于表示其他信息,比如注释、模型元素的语义等。另外,UML还提供扩展机制,使UML语言能够适应一个特殊的方法(或过程),或扩充至一个组织或用户。
4、UML图
UML图是对软件系统中面向对象的类、对象、消息和关系等图形化表示,是认识和理解软件系统的关键组成部分。UML图包括用例图、协作图、活动图、时序图、部署图、构件图、类图、状态图。其中,类图和时序图在日常工作中使用的比较多,在介绍设计模式时主要使用类图,所以下面重点介绍一下UML中的类图。

5、UML类图

在这里插入图片描述

   一个典型的类图如上所示(IM截图模块的类图)。类图是面向对象系统建模中最常用的一种UML图,主要用来表示类与
   类之间的关系,包括泛化关系、关联关系、依赖关系和实现关系。通过查看类图,我们能快速地搞清楚各个类的关系。
   我们在阅读软件设计文档或者开源代码时,可能会看到相关的类图,我们要看懂类图,就必须要搞清楚表示类与类的关
   系连接线类型。

5.1、类的构成
类元素主要由类名、属性和方法三部分构成,如下所示:

  • 表示private
  • 表示public

表示protected

其中,属性表示为:

属性名:类型
方法表示为:
方法名(参数类型):返回值类型

5.2、类与类之间的关系
1)泛化关系(Generalization)

    泛化关系用来表示类与类之间的继承关系,也叫做is a kind of关系,用三角形的箭头从子类指向父类。
    类图表示如下:

在这里插入图片描述

2)实现关系(Realization)

   实现关系就是类或接口的实现,由三角箭头虚线从实现类指向接口类,(比如C++中纯虚函数的实现)。
   类图表示如下:

在这里插入图片描述

3)依赖关系(Dependency)

   依赖关系是指在一个类中要用到另一个类的实例的一种关系,主要表现为一个类是另一个类的函数参数,或者一个类
   是另一个类的函数返回值的情况。在类图中的表现形式为一个虚线箭头从一个类指向被依赖的类。类图表示如下:

在这里插入图片描述

4)关联关系(Association)

   关联关系是类和类之间对应的一种连结,是指两个独立的对象,一个对象的实例与另一个对象的一些特定实例存在固定的对应关
   系。关联关系可以是单向的也可以是双向的,通过关联使得一个类可以使用另一个类的属性和方法,在C++中具体的表现形式
   为,一个类的对象是另一个类的成员属性。在类图中,单向的是带箭头的实线,双向的是不带箭头的实线:

在这里插入图片描述

5)聚合关系(Aggregation)

    聚合关系表示整体和部分的关系,它是一种has-a的包含关系,而且整体和部分是可以分离的,即离开整体,
部分也能存在。聚合关系是关联关系的一种,它是一种更强的关联关系。聚合关系在C++中的表现也是成员
变量的方式,但是和   关联关系不同的是,关联关系中的两个类是相互独立的,而聚合关系中的两个类是整体
与部分的关系,一个类是另一个类的一部分。在类图中,空心菱形在代表整体的类那侧,另一侧为代表部分的类。

   聚合关系的简单理解,比如手机和充电线,充电线是手机的一部分,手机就是整体,充电线是部分,但是没有手机了,
充电线也可以单独存在,如下:

在这里插入图片描述

6)组合关系(Composite)

   组合关系也是关联关系的一种,是一种比聚合关系更强的关联关系。如果两个类是聚合关系(A是B的一部分),那么离开B之后,A就失去了存在的意义。组合关系是一种不可分离的关系。在类图中用实心菱形指在代表整体的类,另一侧为代表部分的类。

在这里插入图片描述

7)小结

    对上述6种类关系的总结:

泛化关系和实现关系的区别:泛化关系是指C++中的继承关系;而实现关系是指虚基类的继承,在子类中实现虚基类的纯虚函数。
泛化关系和实现关系可以看成依赖关系的一种,因为它们离开依赖的类都无法编译通过。
聚合关系和组合关系是关联强度逐渐增强的关联关系;关联关系双方是平等的,聚合关系和组合关系的双方是整体和部分的关系。
聚合关系的双方整体和部分可以分离单独存在,没有生命周期的强相关;组合关系双方,部分离开整体将失去意义,整体的生命周期代表了部分的生命周期。
6、绘制UML图的软件工具
绘制UML图的软件工具比较多,有专业的EA(Enterprise Archtecture)绘制工具,有微软的Visio工具,有韩国的StarUML,还有一些比较新的绘图工具也支持UML绘图,比如亿图软件的图示工具、在线绘图工具drawio等。其中,EA是老牌专业的UML图绘制工具,我比较喜欢用EA。大家可以根据自己的需要和喜好去选择想要的UML工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt5.9.6+VS2015 部署PCL1.8.1

本文系转载,如侵权请告知删除。原博文链接:https://blog.csdn.net/jepco1/article/details/80752954 0 编译环境 所需软件包及其版本 Qt5.9.6 msvc2015_64 VS2015 VTK 8.0.0 https://gitlab.kitware.com/vtk/vtk/tree/v8.0.0 PCL1.8.1 https://github.c…

综合知识篇12-软件开发方法考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例…

原生html vue3使用element plus 的树tree上移下移案例源码

上效果 html源码 <!DOCTYPE html> <html lang"en"> <!-- * Name: mallSalesReports.html * Description: * Author Lani * date 2024-02-28 18:32:36 --> <head><meta charset"UTF-8"><meta name"viewport" …

【蓝桥杯选拔赛真题41】C++操作字符串 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C操作字符 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C操作字符 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 给定两个字符串S1和S2(1<S1长度&…

JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、转换成整数计算后再转换成小数二、toFixed三、math.js四、bignumber.js五、big.js总结 前言 原始计算 let aNum 6.6 0.3;let bNum 6.6 - 0.2;let cNum 6.6 * 0.3;let dNum 6.6 / 0.2;console.log(…

界面组件DevExpress WinForms v23.2 - 数据可视化功能升级

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

Android14 - AMS之Activity启动过程(3)

Android14 - AMS之Activity启动过程&#xff08;1&#xff09;-CSDN博客 Android14 - AMS之Activity启动过程&#xff08;2&#xff09;-CSDN博客 上篇中我们梳理完ActivityStarter的startActivityInner&#xff0c;本篇从这里开始&#xff1a; platform/frameworks/base/servi…

c++类和对象(三)

c类和对象&#xff08;三&#xff09; 再谈构造函数 Static成员 友元 内部 匿名对象 拷贝对象时的一些编译器优化 再次理解封装 1.再谈构造函数 1.1构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。…

YOLOv9有效改进|加入RT-DETR中的AIFI结构。

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AIFI是RT-DETR中使用的尺度内特征交互模块。 二、AIFI模块详解 2.1 模块简介 AIFI的主要思想&#xff1a; 与Transformer的Encoder类…

【leetcode热题】二叉搜索树迭代器

实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…

【2024最新版,redis7】redis底层的10种数据结构

前言&#xff1a;本文redis版本&#xff1a;7.2.4 本文语雀原文地址&#xff08;首发更新&#xff09;&#xff1a;https://www.yuque.com/wzzz/redis/xg2cp37kx1s4726y 本文CSDN转载地址&#xff1a; https://blog.csdn.net/u013625306/article/details/136842107 1. 常见的数…

【JavaScript】JavaScript 程序流程控制 ① ( 顺序流程控制 | 分支流程控制 )

文章目录 一、JavaScript 程序流程控制简介1、顺序流程控制2、分支流程控制3、分支流程控制 - 代码示例 一、JavaScript 程序流程控制简介 JavaScript 程序 执行过程中 , 不同的代码执行顺序 , 得到的结果是不同的 , 在编程中 经常 需要 根据 不同的条件 执行不同的代码块 , 或…

Redis数据结构对象中的对象共享、对象的空转时长

对象共享 概述 除了用于实现引用计数内存回收机制之外&#xff0c;对象的引用计数属性还带有对象共享的作用。 在Redis中&#xff0c;让多个键共享同一个值对象需要执行以下两个步骤: 1.将数据库键的值指针指向一个现有的值对象2.将被共享的值对象的引用计数增一 目前来说…

实验03-OSPF高级实验

1.实验拓扑 2.实验需求 3.配置思路 根据所给的IP地址配置完成后进行OSPF的配置&#xff1a; #R1 [r1]ospf 1 router-id 10.0.1.1 [r1-ospf-1]a 0 [r1-ospf-1-area-0.0.0.0]network 10.0.1.1 0.0.0.0 [r1-ospf-1-area-0.0.0.0]network 10.0.12.1 0.0.0.0 [r1-ospf-1-area-0.0.…

图书馆管理系统 1.架构项目以及加搭建项目

项目架构图 技术栈 后端 开发语言&#xff1a;java 开发环境&#xff1a;jdk11.0.12 开发工具&#xff1a;IntelliJ IDEA 2022.2.4 项目管理工具&#xff1a;maven 集成框架&#xff1a;springboot 权限控制框架&#xff1a;springSecurity 数据库&#xff1a;mysql 数据库框架…

QT-绘制动态曲线

QT-绘制动态曲线 pro文件中添加chart 在串口工程中添加控件 将控件功能提升为QChartView 点击添加 添加相关的头文件和变量

Selenium不同版本配置自动下载驱动及打包细节

Selenium配置浏览器驱动 自动下载浏览器驱动的方法 selenium4.7.0自动下载浏览器驱动的方法 selenium4.11.0 或4.11.1手动设置浏览器驱动路径的方法pyinstaller打包程序时同时打包ChromeDriverchromedriver路径需要sys._MEIPASS的路径进行引用方法一&#xff1a;通过–add-data…

【目标检测】图解 YOLOv3 的网络结构(Darknet-53 作为 backbone)

到了 YOLOv3&#xff0c;backbone 从 YOLOv2 的 Darknet-19 升级到了 Darknet-53。 下面一张完整的结构示意图来一起理解一下 YOLOv3 的网络结构。 我们怎么理解最后输出的 3 个特征图&#xff08;feature map&#xff09;的这个 255&#xff1f; 同 YOLOv2 一样&#xff0c;…

【蓝桥杯-单片机】基于定时器的倒计时程序设计

基于定时器的倒计时程序 题目如下所示&#xff1a; 实现过程中遇到的一些问题 01 如何改变Seg_Buf数组的值数码管总是一致地显示0 1 2 3 4 5 首先这个问题不是在main.c中关于数码管显示部分的逻辑错误&#xff0c;就是发生在数码管的底层错误。 检查了逻辑部分&#xff…

玩转C语言——深入理解指针

一、指针概念 1.1 内存和地址 在开始学习指针前&#xff0c;我们先来讲一个例子&#xff0c;假如你身处一栋楼中&#xff0c;你点了一份外卖&#xff0c;那么&#xff0c;外卖员如何能找到你&#xff1f;有两种方法。法一&#xff1a;直接一间一间找&#xff0c;这样做不仅消耗…