【设计模式】设计模式前置知识:UML类图入门

news2024/11/17 19:40:57

UML类图

介绍

  • UML–Unified modeling language UMl(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果
  • UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化(继承)、依赖、组合、聚合等
  • 画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理

绘图工具

  • 使用UML来建模,常用的工具有 RationalRose,也可以使用一些插件来建模
  • Office的Visio有绘制UML类图的功能
  • 软件“亿图图示”有绘制UML类图的功能
  • 如果使用的IDE是Eclipse,可以下载相应的插件来绘制UML类图,下图是尚硅谷教程中的绘图工具介绍

在这里插入图片描述

  • 如果使用的IDE是IDEA,也可以通过安装插件来通过代码操控绘制UML类图,具体操作可以参考这篇文章:https://blog.csdn.net/laodanqiu/article/details/131620177 (我个人比较喜欢这种方式,比较高效);更多类图的语法和功能请参考这篇博客:https://plantuml.com/zh/class-diagram

UML图分类

  • 用例图use case
  • 静态结构图:类图(类图是描述类与类之间的关系的,是UML图中最核心的)、对象图、包图、组件图、部署图
  • 动态行为图:交互图(时序图与协作图) 、状态图、活动图

各种关系

依赖关系(Dependence)

在这里插入图片描述

在这里插入图片描述

【小结】

  • 类中用到了对方
  • 如果是类的成员属性
  • 如果是方法的返回类型
  • 是方法接收的参数类型
  • 方法中使用到

泛化关系(Generalization)

泛化关系就是继承关系,是依赖关系的特例

package com.atguigu.uml.generalization;

public abstract class DaoSupport{
   public void save(Object entity){
   }
   public void delete(Object id){
   }
}

package com.atguigu.uml.generalization;

public class PersonServiceBean extends DaoSupport {

}

在这里插入图片描述

【总结】

  • 子类指向父类

实现关系(Implementation)

实现关系实际上就是A类实现B接口,是依赖关系的特例

package com.atguigu.uml.implementation;

public interface PersonService {
   public void delete(Integer id);
}

package com.atguigu.uml.implementation;

public class PersonServiceBean implements PersonService{

   @Override
   public void delete(Integer id) {
      // TODO Auto-generated method stub
      System.out.println("delete..");
   }

}

在这里插入图片描述

【总结】

  • 类指向接口

关联关系(Association)

  • 关联关系实际上就是类与类之间的联系,他是依赖关系的特例
  • 关联具有导航性:即双向关系或单向关系
  • 关系具有多重性:如“1”(表示有且仅有一个);“0…”(表示0个或者多个);“0,1”(表示0个或者一个) ;“n…m”(表示n到m个都可以);“m…t”(表示至少m个)

在这里插入图片描述

聚合关系(Aggregation)

聚合关系(Aggregation) 表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。

如:一台电脑由键盘(keyboard)、显示器(moniter),鼠标等组成。组成电脑的各个配件是可以从电脑上分离出来的,这就是聚合关系。(如果不可以分离,就是组合关系)

package com.atguigu.uml.aggregation;

public class Computer {
    private Mouse mouse; //鼠标可以和computer分离
    private Moniter moniter;//显示器可以和Computer分离

    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }

    public void setMoniter(Moniter moniter) {
        this.moniter = moniter;
    }
}

package com.atguigu.uml.aggregation;

public class Moniter {

}

package com.atguigu.uml.aggregation;

public class Mouse {

}

在这里插入图片描述

组合关系(Composition)

如果Mouse、Moniter、Computer之间是不可分离的,就升级为组合关系

package com.atguigu.uml.composition;

public class Computer {
   private Mouse mouse = new Mouse(); //鼠标可以和computer不能分离
   private Moniter moniter = new Moniter();//显示器可以和Computer不能分离
   public void setMouse(Mouse mouse) {
      this.mouse = mouse;
   }
   public void setMoniter(Moniter moniter) {
      this.moniter = moniter;
   }
}

一旦将Computer被new出来,mouse和moniter也会被new出来,Computer销毁,mouse和moniter也会跟着销毁,因此是不可分离的

在这里插入图片描述

聚合、组合关系共存

package com.atguigu.uml.composition;

public class Person {
    private IDCard card; //聚合关系
    private Head head = new Head(); //组合关系
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

来啦!OceanBase 第7期技术征文活动获奖名单公布!

“小鱼”的诞生与成长离不开广大开发者的陪伴与支持,我们非常兴奋能把 4.1 版本的这一系列新能力带给大家,“小鱼”会游得更快更远,也会陪伴更多数据库开发者一同成长。 OceanBase 联合墨天轮技术社区,举行「4.1 上手体验」第五届…

基于SpringBoot+Hadoop+Vue的企业网盘系统

完整资料进入【数字空间】查看——baidu搜索"writebug" 1.1.1 选题的背景 随着信息网络技术的迅猛发展,云计算技术从它的概念提出已经开始在实际生产环境中使用了。大部分的东西都已经慢慢云端化,这种新型的技术也受到许多互联网人员的关注&a…

初阶C语言——三子棋

我们今天讲一个小游戏,三子棋大家应该都玩过吧,就是行和列,或者对角线上有一样大的字符时,就为获胜,今天我们就来写这样的一个代码实现这样的功能 首先我们要创建两个源文件和一个头文件 头文件game.h用来包含我们的头…

EmEditor制表符设置为空格

以下是具体操作 工具 - 当前配置属性 - 常规 - 制表符/缩进 - 将制表符转换为空格 前打对钩

作业怎么清除试卷笔迹?拿捏可以擦除答案的方法

在日常学习中,我们经常会遇到需要修改或擦除试卷上的笔迹的情况。本文将介绍一种简单实用的方法,即使用手机拍照扫描试卷并擦除答案。 手机拍照扫描试卷 首先,我们需要使用手机拍照扫描试卷。这一步非常简单,只需要将试卷平铺在桌…

集成学习-BaggingVoting和多个模型的混淆矩阵

当涉及到集成学习时,投票法和袋装法是两种常见的技术,用于将多个基学习器(base learner)组合成一个强大的集成模型。 投票法(Voting):投票法是一种简单且常用的集成学习方法。在投票法中&#…

Django_设置和读取cookie

设置cookie 在响应对象中使用set_cookie方法设置cookie from django.http import HttpResponsedef set_cookie(request):rsp HttpResponse("set cookie")rsp.set_cookie("set_cookie", "hello python", max_age3600)return rsp 注&#xff1…

Latex更改字体颜色以及快速生成 SCI 论文的 revised version 和 pure version

记录一下如何更改 Latex 字体颜色,在返修 SCI 论文时,如何较为快捷地完成 revised version 和 pure version 两个不同版本修改稿件的编辑与生成。 更改字体颜色 导入宏包 在 LaTeX 中,使用 \textcolor 命令或 \color 命令可以改变文本的颜…

十大机器学习算法之一:线性回归

十大机器学习算法之一:线性回归 1 知识预警1.1 线性代数1.2 矩阵微积分 2 什么是回归分析?3 线性回归3.1 一元线性回归3.2 多元线性回归 4 多项式回归 1 知识预警 1.1 线性代数 ( A T ) T A (A^\mathrm{T})^\mathrm{T}A (AT)TA$ ( A B ) T A T B T…

OpenHarmony社区运营报告(2023年6月)

本月快讯 • 6月12日,以“OpenHarmony共建开放,共享未来”为主题的2023开放原子全球开源峰会OpenAtom OpenHarmony(以下简称“OpenHarmony”)分论坛在北京北人亦创国际会展中心第一报告厅圆满落幕,根深叶茂&#xff0c…

【Java】面向对象编程 面向对象基础

一、面向对象基础 面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。 现实世界中,我们定义了“人”这种抽象概念,而具体的人则是“小明”、“小红”、“小军”等一个个具体的人。所以,…

uni-app 从零开始第三章:底部 tabBar

pages.json 页面路由 | uni-app官网 一、新建 home页面 找到pages目录,新增一个home的页面,勾选上同时新建文件夹 新建完成后,pages.json 中 会自动添加上刚刚新建的文件信息 二、新增tabBar数据 在 pages.json中新增以下代码 "tabB…

基于pyqt5实现一款简单的界面软件(radioButton、comboBox、pushButton、图片显示)

pyqt5使用记录涉及pyqt界面控件的基本介绍,使用designer设计界面ui,并将其转化为py代码。关于界面主要实现radioButton的互斥选中事件、comboBox的选中事件(依据list添加item)、pushButton的单击事件、槽函数自动绑定、图片的拖入…

嵌入式开发之上位机工业风界面实现

在做测控类的嵌入式系统开发时,一个精美的上位机控制软件UI是可以为系统增色不少,一般会采用组态软件来开发,我们来看看下面的界面 是不是非常直观有工业质感,还可以根据实时数据进行动态的显示和动画效果,那这些炫酷的…

自定义切换整行上下位置快捷键

自定义切换整行上下位置快捷键 在File菜单中选择Settings选项,搜索move li 先删掉原来的快捷键 再添加你要设置的快捷键 确认就可以了。

word转Markdown文件的几个方法

word转Markdown文件的几个方法 1、 安装writage 软件,但是writage 需要收费了。 如果只是markdown文本编辑,可以直接安装typora来。 2. 利用Pandoc软件来转换word文件到markdown文件 注意doc文件需要保存docx文件格式才可以使用下面命令行 pandoc &q…

C++多线程学习(十六、STL算法中的并行版本,sequenced_policy)

目录 sequenced_policy 使用代码: 准备 代码 结果: sequenced_policy 增加参数:sequenced_policy提供相应并行版算法 execution::seq并行算法执行可以不并行化execution::par并行算法执行可以并行化execution::par_unseq并行算法执行的可以并行以…

C#基础学习_泛型集合List<T>

C#基础学习_泛型集合List 为什么要使用集合? 数组元素个数是固定的,数组一旦定义,就无法改变元素总数。如果需求变化,则必须修改源码。 如果初始化元素总数非常大,则会造成浪费。 集合的特点: 根据需要动态增加元素个数,没有限制 List泛型集合的存储结构,与数组类似,…

Ceres-Solver 官方文档

Ceres-Solver 官方文档 Non-linear Least Squares1. Introduction2. Hello World!3. Derivatives3.1 Numeric Derivatives3.2 Analytic Derivatives3.3 More About Derivatives 4. Powell’s Function5. Curve Fitting6. Robust Curve Fitting7. Bundle Adjustment8. Other Exa…

hive on spark小文件问题【hive.merge.sparkfiles参数不生效】

hive on spark小文件问题【hive.merge.sparkfiles参数不生效】 我也是查看了我们目前集群的版本是spark是3.2.3版本 hive是3.1.3版本,都是比较新的版本,正常是支持这个参数的 在测试环境中,如果在sql中不使用group by函数其实可以可以生效的…