UML 类图(提供 Java 实现)

news2024/12/23 21:56:11

文章目录

  • UML 类图
    • 概述及作用
    • 类图表示法
      • 类(接口)的表示
      • 类与类之间关系的表示
      • 关联关系(Association)
        • 单向关联(Unidirectional Association)
        • 双向关联(Bidirectional Association)
        • 自关联(Self Association)
      • 聚合关系(Aggregation)
      • 组合关系(Composition)
      • 依赖关系(Dependency)
      • 继承关系(Inheritance)
      • 实现关系(Implementation)

UML 类图

概述及作用

这里只是简单的概括一下,具体完整的定义可以自行查询相关资料。文章只给出 IDEA 自动生成的 UML 类图,关于软件工程标准的类图暂时没有(作者太懒了。

在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性(成员变量、方法)和类之间的关系。它是系统分析和设计阶段产生的,用来简化了人们对系统的理解。

类图表示法

类(接口)的表示

包含三部分:类名(接口名)、成员变量、方法。

这是一个学生类:

class Student {
    private String name;
    
    private Integer age;
    
    public void study(String course) {
        log.info("study{}...", course);
    }
}

IDEA 生成的 UML 类图表示如下:
在这里插入图片描述

类与类之间关系的表示

关联关系(Association)

定义:表示类与类之间的联系,可以是单向关联、双向关联或自关联。

单向关联(Unidirectional Association)

类图:类 A 有一个对类 B 的引用。

class Person {
    private Address address;

    public Person(Address address) {
        this.address = address;
    }
}

class Address {
    private String city;
    
    public Address(String city) {
        this.city = city;
    }
}

解释Person 类知道 Address 类,但 Address 不知道 Person。这是单向关联。
在这里插入图片描述

双向关联(Bidirectional Association)

类图:类 A 和类 B 互相引用。

class Person {
    private Address address;

    public Person(Address address) {
        this.address = address;
        address.setPerson(this);
    }
}

class Address {
    private String city;
    
    private Person person;

    public Address(String city) {
        this.city = city;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

解释PersonAddress 类互相知道对方,这是双向关联。
在这里插入图片描述

自关联(Self Association)

类图:类 A 自己引用自己。

class Employee {
    private String name;
    
    private Employee manager;

    public Employee(String name, Employee manager) {
        this.name = name;
        this.manager = manager;
    }
}

解释Employee 类有一个对自己类型的引用,用于表示雇员和经理的关系。
在这里插入图片描述

聚合关系(Aggregation)

定义:表示类与类之间的“部分 - 整体”关系,整体和部分可以独立存在。

class Library {
    private List<Book> books;

    public Library(List<Book> books) {
        this.books = books;
    }
}

class Book {
    private String title;

    public Book(String title) {
        this.title = title;
    }
}

解释Library 类包含 Book,但 Book 可以独立存在,因此是聚合关系。
在这里插入图片描述

组合关系(Composition)

定义:表示类与类之间的“整体 - 部分”关系,部分不能独立于整体存在。

class House {
    private Room room;

    public House() {
        this.room = new Room();
    }
}

class Room {
    public Room() {
        System.out.println("Room is created");
    }
}

解释House 包含 Room,如果 House 被销毁,Room 也会随之销毁,这就是组合关系。
在这里插入图片描述

依赖关系(Dependency)

定义:类与类之间的一种弱关系,一个类使用另一个类的功能,但并不保存对其的长期引用。

class Car {
    public void start(Engine engine) {
        engine.ignite();
    }
}

class Engine {
    public void ignite() {
        System.out.println("Engine started");
    }
}

解释Car 类依赖于 Engine 类来启动,但并不保存 Engine 的引用。

继承关系(Inheritance)

定义:表示一个类继承另一个类的属性和方法。

class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }
}

解释Dog 继承了 Animal 类,并重写了 eat() 方法,这是继承关系。

实现关系(Implementation)

定义:表示一个类实现接口中的方法。

interface Drawable {
    void draw();
}

class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

解释Circle 类实现了 Drawable 接口中的 draw() 方法,这是实现关系。

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

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

相关文章

大学生看过来,必备4款写论文AI写作网站先稿后付

在当今学术研究和写作领域&#xff0c;AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。其中&#xff0c;千笔-aipasspaper是一个备受推荐的平台&#xff0c;它结合了先稿后付…

7.2 溪降技术:下攀

目录 7.2 下攀概述视频课程观看电子书&#xff1a;下攀 一级风险评估装备个人动作技术:面壁下攀烟囱下攀 协助队友总结 7.2 下攀 概述 下攀可能是峡谷探险中最被低估的技能。峡谷中经常存在可以下攀的小落差&#xff0c;这种方式比设置绳索快得多。一组熟练的下攀者能迅速完成…

JavaScript高级——闭包的理解

1、如何产生闭包&#xff1f; —— 当一个嵌套的内部&#xff08;子&#xff09;函数引用了嵌套的外部&#xff08;父&#xff09;函数的变量&#xff08;函数&#xff09;时&#xff0c;就产生了闭包。 2、闭包到底是什么&#xff1f; —— 使用 chrome 查看 —— 理解一&a…

字符编码发展史1 — ASCII和EASCII

1. 字符集与字符编码 1.1. 字符集1.2. 字符编码1.3. 两者的关系 2. 字符编码的发展历史 2.1. 第一个阶段 ASCII编码 2.1.1. ASCII2.1.2. EASCII 1. 字符集与字符编码 1.1. 字符集 字符集&#xff08;Charcater Set或Charset&#xff09;&#xff1a; 是一个系统支持的所有…

【AI小项目5】使用 KerasNLP 对 Gemma 模型进行 LoRA 微调

目录 一、项目简介概述时间主要工作和收获技术栈数据集结果参考 二、完整代码概览设置安装依赖选择一个后端导入包 加载数据集加载模型微调前的推理欧洲旅行例子光合作用例子 LoRA 微调微调后的推理欧洲旅行例子光合作用例子 改进方向 三、背景知识补充Fine-tune&#xff08;微…

数据结构(2):LinkedList和链表[2]

我们在上一篇文章中着重讨论了单链表的实现。其中我们要注意单链表进行遍历时一步一步走的思想。那么这篇文章我们将继续讨论链表的更多内容&#xff0c;那就让我们开始吧。 1.经典单链表算法题 我们将通过几个经典的题对单链表进行进一步的认识。 (1)反转链表 206. 反转链…

2024年上海初中生古诗文大会倒计时一个半月:做一做2024官方模拟题

2024年上海市初中生古诗文大会自由报名活动的初赛日期于11月3日开始&#xff0c;距离今天大概一个半月。 如何准备2024年初中生古诗文大会的自由报名初选呢&#xff1f;吃透&#xff08;记熟&#xff09;2024年初中生古诗文阅读专辑上的题目、知识点和往年真题及知识点。 有许…

Python数据分析-世界上最富有的1000人

一、研究背景 随着全球化的加速发展和技术的进步&#xff0c;财富分配问题日益成为全球关注的焦点。财富的不平等现象日益明显&#xff0c;少数极富有的个人掌握了全球大部分的财富资源。了解全球最富有个人的财富分布及其背后的行业和国家因素&#xff0c;对于分析全球经济趋…

Element-ui el-table 全局表格排序

实现效果如下&#xff1a; 一、当页数据排序 如果只想要当前页面排序&#xff0c;只会涉及到前端&#xff0c;只需在<el-table-column>标签上添加 :sortable"true"即可 二、自定义排序 如果想要全局排序&#xff0c;需要自定义排序函数&#xff0c;请求后台排…

Linux基础---10进程管理

一.查看和关闭进程 1.查看进程 基础指令: ps -efPID 进程编号&#xff0c;PPID 父进程编号&#xff0c; CMD命令名称 进阶指令–查看进程的树形结构&#xff1a; yum install psmisc -y #首先安装psmisc后可直接使用pstreepstree2.关闭进程 要想关闭某个或多个进程需要知道…

简洁明了!中缀表达式转为后缀表达式规则及代码

简单来说&#xff0c;就是弄两个栈&#xff0c;判断执行&#xff1a; 上代码&#xff1a; #include<iostream> #include<stack> #include<cstring> using namespace std; stack<char>s1,s2; char now; int main(){string c;cin>>c;for(int i0;…

微信视频号导出视频软件

最近研究了一下微信视频号导出视频的方法&#xff0c;目前发现还是比较难搞&#xff0c;查了一些资料&#xff0c;写了一个可以导出视频的软件&#xff0c;目前还不完善&#xff0c;但是导出视频到本地还是没问题&#xff0c;先用着吧&#xff0c;后期再完善。先记录一下。 测…

人工智能浪潮下,程序员如何锻造不可替代的核心竞争力?

人工智能时代&#xff0c;程序员如何保持核心竞争力&#xff1f; 在人工智能时代&#xff0c;程序员如何保持核心竞争力是一个值得深思的问题。随着技术的快速发展&#xff0c;特别是AI技术的不断进步&#xff0c;程序员的角色和工作方式正在经历前所未有的变革。以下是一些关…

docker部署Stirling-PDF

github网址&#xff1a; GitHub - Stirling-Tools/Stirling-PDF: #1 Locally hosted web application that allows you to perform various operations on PDF files 1、官方docker镜像无法拉取&#xff0c;使用别人阿里云私人镜像仓库下载Stirling-PDF镜像&#xff1a; regi…

如何设置word页码从指定页开始

如何设置word页码从指定页开始 在使用Word编辑一些比较正式的文档时&#xff0c;封面页或者是前几页都是不能有页码的&#xff0c;那么怎么设置页码从指定页开始&#xff0c;可以通过分隔符来实现页码从指定页开始。 word设置页码从指定页开始的具体步骤如下&#xff1a; 1.…

2024.9最新:CUDA安装,pytorch库安装

目录 一、CUDA安装 1.查看自己电脑适配的CUDA的最高版本 2.安装CUDA 3.检查环境变量是否配置&#xff0c;安装是否成功 二、pytorch库安装 1.pytorch库下载 2.选择合适的版本 3.查看版本 一、CUDA安装 1.查看自己电脑适配的CUDA的最高版本 在命令提示符里输入nvidia-…

LeetCode题集-4 - 寻找两个有序数组的中位数,图文并茂,六种解法,万字讲解

题目&#xff1a;给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 作为目前遇到的第一个困难级别题目&#xff0c;我感觉这题还是挺难的&#xff0c…

MATLAB 从 R2024B 开始支持树莓派 5

树莓派&#xff08;Raspberry Pi&#xff09;系列是一系列基于单板计算机的微型电脑&#xff0c;由英国的树莓派基金会于 2012 年开始发布。它的目标是提供一个低成本、易于学习和玩耍的平台&#xff0c;用于教育和初学者学习计算机科学和编程。 目前市面上&#xff0c;最新最…

工地高空安全防护装备检测系统源码分享

工地高空安全防护装备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of …

Linux驱动.之中断系统,裸机下设置寄存器,绑定中断处理函数hander(二)

17.3.3通用中断驱动文件编写 在start.S文件中我们在中断服务函数IRQ_Handler中调用了C函数system_irqhandler来处理具体的中断。此函数有一个参数&#xff0c;参数是中断号&#xff0c;但是函数system_irqhandler的具体内容还没有实现&#xff0c;所以需要实现函数system_irqha…