C#探索之路基础夯实篇(4):UML类图中的六种关系详细说明

文章目录

  • UML类图中的关系
    • 前景
    • 1、关联关系(Association):
    • 2、聚合关系(Aggregation):
    • 3、组合关系(Composition):
    • 4、泛化关系(Generalization):
    • 5、实现关系(Realization):
    • 6、依赖关系(Dependency):
    • 7、整合归纳:

UML类图中的关系

前景

在UML类图中,有以下几种关系:

  1. 关联关系(Association):表示两个类之间的静态关联,描述了对象之间的连接,通常表示为一条带箭头的实线。

  2. 聚合关系(Aggregation):表示整体与部分之间的关系,部分可以存在独立于整体的情况,用一个空心菱形表示。

  3. 组合关系(Composition):也表示整体与部分之间的关系,但部分不能脱离整体而独立存在,用一个实心菱形表示。

  4. 泛化关系(Generalization):表示类与类之间的继承关系,其中子类继承父类的属性和方法,用带空心三角箭头的实线表示。

  5. 实现关系(Realization):表示类与接口之间的关系,类实现了接口定义的所有方法,用带空心三角箭头的虚线表示。

  6. 依赖关系(Dependency):表示一个类依赖于另一个类的定义或实现,当一个类的变化可能影响到另一个类时存在依赖关系,用带箭头的虚线表示。

1、关联关系(Association):

描述:关联关系表示两个类之间的连接,通常用于表示一个类对象可以通过某种方式引用另一个类对象的情况。

表示两个类之间的静态关联,描述了对象之间的连接,通常表示为一条带箭头的实线。

在这里插入图片描述

在 UML 中,关联关系可以有箭头,也可以没有箭头,具体取决于关联的性质。

  1. 带箭头的关联:带箭头的关联通常表示关联的方向,箭头指向被关联的类。这种关联表示了两个类之间的单向关系,其中一个类知道另一个类的存在,但反之未必。箭头的方向表明了信息流的方向。

  2. 不带箭头的关联:不带箭头的关联表示了双向关系,其中两个类相互了解对方的存在,但没有特定的方向。这种关联通常用于表达双向通信或双方都可以访问对方的信息。

在 PlantUML 中,默认情况下,关联关系是不带箭头的。如果你想要使用带箭头的关联关系,可以在类之间使用-->来表示,箭头的方向由左侧类指向右侧类,示例如下:

class ClassA
class ClassB
ClassA --> ClassB

上述代码表示 ClassA 类与 ClassB 类之间存在带箭头的关联关系,箭头从 ClassA 指向 ClassB。

代码案例

public class Student {
    private String name;
    private Course course;

    // Constructor, getters, and setters
}

public class Course {
    private String name;

    // Constructor, getters, and setters
}

// 口语表达:
//关联关系就像两个人之间的朋友关系一样,他们之间有一种联系。在编程中,就像一个类中的一个成员变量引用了另一个类的对象一样。比如,一个人(类)有一辆车(类的对象)。

2、聚合关系(Aggregation):

描述:聚合关系表示整体与部分之间的关系,部分可以存在独立于整体的情况。

表示整体与部分之间的关系,部分可以存在独立于整体的情况,用一个空心菱形表示。

在这里插入图片描述

代码案例

public class Class {
    private List<Student> students;

    // Constructor, getters, and setters
}

public class Student {
    private String name;

    // Constructor, getters, and setters
}

// 口语表达:
// 聚合关系就像一个集体中的成员一样,他们可以独立存在。比如,一个班级(类)有多个学生(类的对象),但学生可以存在于不同的班级中。

3、组合关系(Composition):

描述:组合关系表示整体与部分之间的关系,但部分不能脱离整体而独立存在。

也表示整体与部分之间的关系,但部分不能脱离整体而独立存在,用一个实心菱形表示。

在这里插入图片描述

public class Car {
    private Engine engine;
    private List<Tire> tires;

    // Constructor, getters, and setters
}

public class Engine {
    // Engine details
}

public class Tire {
    // Tire details
}

// 口语表达:
// 组合关系就像一个整体与其组成部分之间的关系,组成部分不能独立存在于整体之外。比如,一个汽车(类)包含引擎(类的对象)和轮胎(类的对象),没有了引擎或者轮胎,汽车就不完整了。

4、泛化关系(Generalization):

描述:泛化关系表示类与类之间的继承关系,子类继承了父类的属性和方法。

表示类与类之间的继承关系,其中子类继承父类的属性和方法,用带空心三角箭头的实线表示。

在这里插入图片描述

public class Animal {
    public void eat() {
        // Eat behavior
    }
}

public class Dog extends Animal {
    // Dog-specific behavior
}

public class Cat extends Animal {
    // Cat-specific behavior
}

// 口语表达:
// 泛化关系就像是一个类与它的子类之间的关系,子类继承了父类的属性和方法。比如,动物(类)可以有狗(子类)和猫(子类),它们都继承了动物的特征和行为。

5、实现关系(Realization):

描述:实现关系表示类与接口之间的关系,类实现了接口定义的所有方法。

表示类与接口之间的关系,类实现了接口定义的所有方法,用带空心三角箭头的虚线表示。

在这里插入图片描述

public interface Interface {
    void method1();
    void method2();
}

public class MyClass implements Interface {
    @Override
    public void method1() {
        // Implementation of method1
    }

    @Override
    public void method2() {
        // Implementation of method2
    }
}

// 口语表达:
// 实现关系就像是一个类实现了一个接口所定义的行为一样。比如,一个类(类)实现了一个接口(类)定义的方法,就像是承诺了要实现这些方法一样。

6、依赖关系(Dependency):

描述:依赖关系表示一个类依赖于另一个类的定义或实现。

表示一个类依赖于另一个类的定义或实现,当一个类的变化可能影响到另一个类时存在依赖关系,用带箭头的虚线表示。

在这里插入图片描述

using System;

// DependencyClass 类依赖于另一个类 UtilClass 的方法
public class DependencyClass
{
    public void DoSomething()
    {
        UtilClass util = new UtilClass();
        util.UtilityMethod();
    }
}

// UtilClass 类包含一个被 DependencyClass 类使用的方法
public class UtilClass
{
    public void UtilityMethod()
    {
        Console.WriteLine("Utility method executed");
    }
}


// 口语表达:
// 依赖关系就像是一个类需要另一个类的帮助才能完成某些任务一样。比如,当一个类的方法中需要另一个类的对象来完成一些工作时,就存在了依赖关系。

7、整合归纳:

在整合归纳中,我将每种关系类型的描述、代码示例和口语表达结合在一起,形成一个连贯的整体。每种关系类型都被单独介绍和解释,以确保清晰和易于理解。

在这里插入图片描述

公众号:平平无奇代码猴
也可以搜索:Jackiie_wang 公众号,欢迎大家关注!欢迎催更!留言!

作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/137443184

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

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

相关文章

计算机网络——37认证

认证 目标&#xff1a;Bob需要Alice证明他的身份 Protocol ap1.0&#xff1a;Alice说"A am Alice" 可能出现的问题&#xff1a; 在网络上Bob看不到Alice&#xff0c;因此Trudy可以简单的声称他是Alice 认证&#xff1a;重新尝试 Protocol ap2.0&#xff1a;Alice…

12.自定义的多帧缓存架构

1.简介 在数字图像处理中&#xff0c;经常需要用到的一个架构就是多帧缓存。视频流中需要用到多帧缓存来防止帧撕裂现象&#xff0c;图像处理中也需要帧差法来做移动目标检测。因此一个多帧缓存架构在图像系统的设计中是十分重要的。 2.多帧缓存 在视频流中&#xff0c;通常不…

数据库 06-03 时间戳

01.什么是时间戳 “时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 02.用时间戳实现调度 定义 数据库给予一个事务一个时…

用友U9 存在PatchFile.asmx接口任意文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友U9是由中国用友软件股份有限公司开发的一款企业…

前端学习笔记:display(未完成)

这是本人学习的总结&#xff0c;主要学习资料如下 目录 1、一般属性2、flex系列2.1、flex容器的维度2.2、flex其他的关联属性 – 1、一般属性 display是css中的一个重要属性&#xff0c;它的值基本决定了元素的布局。这里就对它的值如何影响元素布局做一个总结。 display:bl…

STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (e)

接上文&#xff0c;继续来看这个函数&#xff1a; /*** brief Initializes the GPIOx peripheral according to the specified* parameters in the GPIO_InitStruct.* param GPIOx: where x can be (A..G) to select the GPIO peripheral.* param GPIO_InitStruct:…

【环境变量】常见的环境变量 | 相关指令 | 环境变量系统程序的结合理解

目录 常见的环境变量 HOME PWD SHELL HISTSIZE 环境变量相关的指令 echo&env export unset 本地变量 环境变量整体理解 程序现象_代码查看环境变量 整体理解 环境变量表 环境变量表的传递 环境变量表的查看 测试验证 少说废话&#x1f197; 每个用户…

JavaScript 设计模式之代理模式

代理模式&#xff0c;代理&#xff08;proxy&#xff09;是一个对象&#xff0c;它可以用来控制对另一个对象的访问。 现在页面上有一个香港回归最想听的金典曲目列表&#xff1a; <ul id"container"><li>我的中国心</li><li>东方之珠<…

C# 使用共享文件生成项目

项目文件中添加共享文件 <ItemGroup><Compile Include"..\Shared\Interfaces\Services\ITextService.cs" Link"Interfaces\Services\ITextService.cs" /><Compile Include"..\Shared\Services\TextService.cs" Link"Service…

C++高频面试知识总结 part2

C高频面试 1.sizeof是什么&#xff1f;sizeof一个class大小怎么确定&#xff1f;是在编译期还是在运行期确定?2.函数重载的机制&#xff0c;重载是在编译期还是在运行期确定&#xff0c;重载有额外开销吗3.函数重写在编译还是运行时确定&#xff1f;4.如何找到虚函数表&#x…

【数据结构与算法】力扣 24. 两两交换链表中的节点

题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a; head [1,2,3,4] 输出&#…

go | gin 重定向路由重定向

web 重定向 重定向有一点要注意&#xff0c;重定向是在客户端那边执行的&#xff0c;一次服务器只能响应一次请求。但是要注意路由重定向 路由重定向是在服务器内部完成重定向资源请求 package mainimport ("github.com/gin-gonic/gin""fmt" )/* func main…

C语言自定义类型变量——枚举(enum)

一.枚举的定义和声明 字面意思&#xff0c;枚举就是一一列举&#xff0c;把可能的取值一一列举&#xff0c;在我们现实生活中有许多可以列举的事物&#xff0c;例如&#xff1a;一周七天&#xff0c;一年四季&#xff0c;性别&#xff0c;月份&#xff0c;三原色等等。当我们需…

【SpringCloud】Nacos 注册中心

目 录 一.认识和安装 Nacos1.Windows安装1. 下载安装包2. 解压3. 端口配置4. 启动5. 访问 2.Linux安装1. 安装JDK2. 上传安装包3. 解压4. 端口配置5. 启动 二.服务注册到 nacos1. 引入依赖2. 配置 nacos 地址3. 重启 三.服务分级存储模型1. 给 user-service 配置集群2. 同集群优…

Spring Boot-01-通过一个项目快速入门

官方参考文档&#xff1a;Spring Boot Reference Documentation 0. 概述 Spring的缺点&#xff1a; 1. 配置繁琐&#xff1a;虽然Spring的组件代码是轻量级&#xff0c;但它的配置却是重量级的。 2. 依赖繁琐&#xff1a;项目的依赖管理也是一件耗时耗力的事情。分析要导入哪…

在单交换机局域网中,不同网段的主机通信探秘

在理解局域网中不同网段主机之间的通信之前&#xff0c;我们首先要明白网络的基本组成和工作原理。局域网&#xff08;LAN&#xff09;是一个封闭的网络环境&#xff0c;通常由交换机&#xff08;Switch&#xff09;作为核心设备连接网络中的各个主机。当我们谈论不同网段的主机…

C语言 | Leetcode C语言题解之第13题罗马数字转整数

题解&#xff1a; 题解&#xff1a; int romanToInt(char* s) {int symbolValues[26];symbolValues[I - A] 1;symbolValues[V - A] 5;symbolValues[X - A] 10;symbolValues[L - A] 50;symbolValues[C - A] 100;symbolValues[D - A] 500;symbolValues[M - A] 1000;int a…

天龙八部_暗黑机制_人面桃花_单机架设搭建

一. 搭建成功视频演示 天龙八部_暗黑机制_人面桃花_单机架设搭建 二. 一些文件截图 完整教程和搭建文件获取: https://githubs.xyz/y24.html 三. 搭建步骤 安装虚拟机虚拟机打开一键端&#xff0c;然后登录root&#xff0c;密码&#xff1a;123456启动./run 脚本 &#xff0…

【201】Java8读取JSON树形结构并插入到MySQL数据库表中

我写了一个 maven 项目的 Demo&#xff0c;用来演示 JAVA8 如何读取 JSON 文件树形结构&#xff0c;并将这种树形结构保存到 MySQL 中。 json文件 city.json {"name": "山东省","sub": [{"name": "青岛市","sub"…

Java | Leetcode Java题解之第14题最长公共前缀

题目&#xff1a; 题解&#xff1a; class Solution {public String longestCommonPrefix(String[] strs) {if (strs null || strs.length 0) {return "";}int minLength Integer.MAX_VALUE;for (String str : strs) {minLength Math.min(minLength, str.length…