【Java 设计模式】UML 之类图

news2025/1/11 22:44:35

UML 之类图

  • 前言:什么是 UML ?
  • §1 类图概念
  • §2 类的表示方式
  • §3 类与类之间关系的表示方式
    • §3.1 关联关系
      • §3.1.1 单向关联
      • §3.1.2 双向关联
      • §3.1.3 自关联
    • §3.2 聚合关系
    • §3.3 组合关系
    • §3.4 依赖关系
    • §3.5 继承关系
    • §3.6 实现关系

前言:什么是 UML ?

  • 定义:UML 即 Unified Modeling Language 统一建模语言,是用来设计软件的可视化建模语言。
  • 特点:简单、统一、图形化、可以表达软件设计中的动态与静态信息。
  • 分类:用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图 9 种。

§1 类图概念

  • 定义:类图是面向对象建模的主要组成部分,显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等,但不显示暂时性的信息。
  • 作用:系统分析和设计阶段的重要产物,系统编码和测试的重要模型。

§2 类的表示方式

在这里插入图片描述

  • 可见性符号
    + :表示 public
    - :表示 private

    # :表示 protected
    什么都不写 表示 default

  • 属性的表示方式:可见性 属性名 : 属性类型 [ = 默认值]

  • 方法的表示方式:可见性 方法名(参数列表) [ : 返回值类型]

  • 其中,[ ] 里的内容是可选的,可写可不写。

public class Employee {
    private String name;
    private int age;
    private String address;
    public void work(){
        // doSomething
    }
}

§3 类与类之间关系的表示方式

§3.1 关联关系

  • 关联关系是对象之间的一种引用关系,用于表示一个类对象对另一个类对象之间的联系。
  • 关联关系也是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系
  • 关联又分为单向关联、双向关联和自关联

§3.1.1 单向关联

在这里插入图片描述

  • 单向关联使用带箭头的实直线表示,箭头指向被引用的对象。
public class Address {
}

public class Customer {
    private Address address;
}

§3.1.2 双向关联

在这里插入图片描述

  • 双向关联使用不带箭头的实直线表示,因为双方各自都持有对方类型的成员变量,所以不用使用箭头刻意的表示谁引用了谁。
public class Product {
    private Customer customer;
}

public class Customer {
    private List<Product> products;
}

§3.1.3 自关联

在这里插入图片描述

  • 自关联使用一个带箭头且指向自己的实直线表示,自己包含自己。
public class Node {
    private Node subNode;
}

§3.2 聚合关系

在这里插入图片描述

  • 聚合关系其实是关联关系的一种,是强关联关系,是整体和部分之间的关系。
  • 聚合关系通过成员对象来实现,其中成员对象是整体对象的一部分,但成员对象可以脱离整体对象而独立存在。如:大学(整体)里有很多老师(部分),这些老师属于这个大学,但他们又可以脱离学校单独存在。
  • 聚合关系使用带空心菱形的实直线来表示,菱形指向整体

§3.3 组合关系

在这里插入图片描述

  • 组合关系是一种更强烈的聚合关系,同样表示的是类之间整体和部分的关系,但相较于聚合关系,组合关系中的整体对象可以控制部分对象的生命周期,一旦整体对象不存在了,部分对象也将不复存在。如:头(整体)和嘴(部分)的关系,头没了,嘴自然也不在了。
  • 组合关系使用带实心菱形的实直线表示,菱形指向整体
public class Head {
    private Mouth mouth;
}

public class Mouth {
    public void eat() {
        // doSomething
    }
}

§3.4 依赖关系

在这里插入图片描述

  • 依赖关系是一种使用关系,是对象之间耦合性最弱的一种关联方式,是临时性的关联。使用场景主要为某个类的方法通过局部变量、方法的参数来访问另一个类(被依赖类)中的某些方法。
  • 依赖关系使用带箭头的虚直线表示,箭头指向被依赖类
public class Car {
    public void move() {
        // doSomething
    }
}

public class Driver {
    private String name;
    public void drive(Car car) {
        car.move();
    }
}

§3.5 继承关系

在这里插入图片描述

  • 继承关系是对象之间耦合性最大的一种关系,表示一般与特殊的关系,是父子类之间的一种继承关系。
  • 继承关系又可称为泛化关系,使用带空心三角箭头的实直线表示,箭头从子类指向父类
public class Person {
    private String name;
    private int age;
    public void speak() {
        // doSomething
    }
}

public class Student extends Person{
    private String studentNo;
    public void study() {
        // doSomething
    }
}

public class Teacher extends Person{
    private String teacherNo;
    public void teach() {
        // doSomething
    }
}

§3.6 实现关系

在这里插入图片描述

  • 实现关系是接口与实现类之间的关系。
  • 实现关系使用带空心三角箭头的虚线表示,箭头从实现类指向接口,箭头也是虚线。
public interface Vehicle {
    void move();
}

public class Car implements Vehicle {
	@Override
    public void move() {
        // doSomething
    }
}

public class Ship implements Vehicle {
    @Override
    public void move() {
        // doSomething
    }
}

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

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

相关文章

Linux 软件包下载加速工具:APT Proxy

本篇文章将继续介绍这个仅有 2MB 身材大小的 Linux 软件包缓存和加速工具&#xff1a;APT Proxy。 相比老牌的 apt cacher ng 而言&#xff0c;除了尺寸更小、内存占用更低&#xff08;10M以内&#xff09;、它还拥有无需配置&#xff0c;开箱即用等特点。 写在前面 年中的时…

!与~有什么区别

目录 将整型数据转换为二进制的函数 利用函数查看&#xff01;与~之后的数据有何不同 以一个非0数据作为例子 以0作为例子 我们都知道&#xff01;与~都是用于取反的。那么这两个有什么区别呢&#xff1f; 我们百度结果如下&#xff0c;很明显&#xff0c;八股文。我接下…

element-ui时间选择器(DatePicker )数据回显

系列文章目录 第一篇【element-ui】table表格底部合计自定义配置 目录 前言 一、element-ui时间选择器&#xff08;DatePicker &#xff09;是什么&#xff1f; DatePicker 日期选择器 二、返回数据格式 1.引入 总结 前言 需求&#xff1a;element-ui时间选择器&#…

【报错】QT Release NO CMAKE_CXX_COMPILER could be found

NO CMAKE_CXX_COMPILER could be found 错误&#xff1a; Tell CMake where to find the compiler by setting either the environmentvariable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path tothe compiler, or to the compiler name if it …

PostgreSQL数据库动态共享内存管理器——dynamic shared memory segment

首先看dynamic_shared_memory_type GUC参数&#xff0c;该参数用于指定dynamic shared memory implementation类型&#xff08;DSM_IMPL_POSIX、DSM_IMPL_SYSV、DSM_IMPL_WINDOWS、DSM_IMPL_MMAP&#xff0c;定义在src/include/storage/dsm_impl.h文件中&#xff09;。了解一下…

前段入门-CSS

目录1 CSS 快速入门1.1 CSS 的介绍1.2 CSS 的组成2 基本语法2.1 CSS 的引入方式2.1.1 内联样式2.1.2 内部样式2.1.3 外部样式2.2 注释2.3 选择器2.3.1 基本选择器2.3.2 属性选择器2.3.3 伪类选择器2.3.4 组合选择器2.4 总结3 CSS 案例-头条页面3.1 案例效果3.2 案例分析3.2.1 边…

【第三部分 | 移动端开发】4:Rem布局

目录 | Rem布局简介 | 单位 rem | 媒体查询 | 根据不同的媒体引入不同的CSS | less基础 概述与安装 基础使用&#xff1a;创建less文件 基础使用&#xff1a;变量 基础使用&#xff1a;用Esay LESS插件把less文件编译为css 基础使用&#xff1a;嵌套 基础使用&#x…

cuda在windows10安装教程

CUDA安装教程&#xff0c;以Windows10系统为例&#xff1a; CUDA.exe安装 查看电脑的支持的CUDA版本&#xff0c;按照如下教程&#xff1a; 首先找到这个图标&#xff0c;也就是nvidia控制面板&#xff0c;然后打开&#xff1a; 然后点击左下角系统信息 再点击“组件”&…

LabVIEW性能和内存管理 8

LabVIEW性能和内存管理 8 本文介绍LabVIEW性能和内存管理的几个建议8。 MemoryFragmentation内存碎片 内存管理器分配和释放内存需要时间&#xff0c;这会降低执行速度。在某些情况下&#xff0c;即使假设有足够的可用内存&#xff0c;也会发生内存不足错误。 上图显示了实际…

【练拳不练功,到老一场空】深入浅出计算机组成原理

深入浅出计算机组成原理 文章目录深入浅出计算机组成原理计算机的基本组成硬件设备组成CPU内存主板I/O 设备硬盘显卡冯.诺依曼体系结构运算器/处理器单元控制器存储器输入设备输出设备举个栗子&#xff1a;计算机的性能与功耗响应时间吞吐率CPU时钟/主频计算机的功耗计算机的指…

jdk8新特性(Lambda、Steam、函数式接口)

JDK8新特性 JDK8新特性Lambda表达式函数式&#xff08;Functional&#xff09;接口方法引用与构造器引用方法引用构造器引用强大的 StreamAPI创建Stream方式Stream 的中间操作Stream 的终止操作Optional 类Java 8 (又称为jdk 1.8)是Java语言开发的一一个主要版本。 Java 8是ora…

Electron 之通讯模块ipcMain 和 ipcRenderer

Electron一个使用HTML、CSS和JavaScript开发桌面应用程序的框架。Electron可以生成在Windows、macOS和Linux上运行的应用程序&#xff0c;借助Electron可以把我们的web端应用直接移植到桌面端而无需再次开发&#xff0c;这样我们可以使用同一套代码在不同平台上运行应用&#x…

数据收集面可视化

数据收集面可视化&#xff08;Data Collector Surface Visualization&#xff09;分析选项允许用户指定模型中的某一表面&#xff0c;在光线追迹的过程中收集光线数据&#xff0c;并显示或者输出该面的照度&#xff08;或相关的物理量&#xff09;。该分析选项允许计算&#xf…

电脑网页打不开提示错误err connection怎么办?

网页打不开显示err_connection_reset网络错误&#xff0c;怎么解决err_connection_reset网络错误&#xff1f;下面我们就来看看解决电脑err_connection_reset网络错误的方法&#xff0c;请看下文详细介绍。 方法一&#xff1a;组件注册 1、我们点下键盘的winR&#xff0c;输入…

2. 选择排序

2.1 内存的工作原理 需要将数据存储到内存时&#xff0c;你请求计算机提供存储空间&#xff0c;计算机给你一个存储地址。 需要存储多项数据时&#xff0c;有两种基本方式——数组和链表。 2.2 数组和链表 有时候&#xff0c;需要在内存中存储一系列元素。 使用数组意味着所…

ElasticSearch面试

Welcome to Elastic Docs | Elastic 1. ES的结构和底层实现 ES的整体结构? 一个 ES Index 在集群模式下&#xff0c;有多个 Node &#xff08;节点&#xff09;组成。每个节点就是 ES 的Instance (实例)。每个节点上会有多个 shard &#xff08;分片&#xff09;&#xff0…

koa框架(二) mvc 模式及实现一个koa框架的web服务

mvc三层架构 mvc&#xff0c; 即 model 、controller、view&#xff1b;mvc模式将model、view、controller分离&#xff1b;使用mvc分层是系统更加灵活&#xff0c;扩展性更强。让程序更加直观、复用性更强、可维护性更强。 model 负责数据访问&#xff1b;controller 负责消息…

嵌入式设备文件系统构建——增加用户登录功能

1、修改inittab文件 #first:run the system script file ::sysinit:/etc/init.d/rcS# 进入命令行 #::askfirst:-/bin/sh#添加执行登录验证 ::sysinit:/bin/login::ctrlaltdel:-/sbin/reboot #umount all filesystem ::shutdown:/bin/umount -a -r #restart init process ::res…

2022-11-16 几种三角函数的图形

为了方便查看几个函数的关系图&#xff0c;记录一下几种三角函数的大致图像。 三角函数&#xff1a;tan⁡(x)\tan(x)tan(x)&#xff0c;cos⁡(x)\cos(x)cos(x)&#xff0c;sin⁡(x)\sin(x)sin(x)。 三角函数&#xff1a;tan⁡(x2)\tan(\dfrac{x}{2})tan(2x​)&#xff0c;cos…

盘点 三款高可用的机器学习模型 web页面化的工具(一)

笔者只是抛砖引玉&#xff0c;把三款看到的在本篇简单的介绍。 如果有其他更好的欢迎留言推荐&#xff0c;后续笔者会对这三款做一一的学习。 文章目录1 streamlit2 Gradio3 codepen1 streamlit 笔者之前写过该专题&#xff1a; python︱写markdown一样写网页&#xff0c;代码…