UML类图的6种关系

news2024/9/28 7:23:37

目录

一、UML类图的6种关系(依赖关系由弱到强):

二、6种关系归纳总结

2.1 第一种归纳方式:先分组,再分组(由大到小,由宏观到微观)

2.2 第二种归纳方式:先聚合,再聚合(找共同点,逐步抽象,由微观到宏观)

2.2.1 归纳到一起其实是2种关系:依赖和关联。

2.2.2 寻根究底再归纳

2.2.1 为什么最终是两个关系呢?这两个关系是什么关系?

2.2.2 那么继续,为什么依赖的关系弱于关联的关系呢?

2.3 从根上往上推关系是如何扩展来的?如下图所示:

三、uml类图的六大关系进行结构化(通过对比它们的强弱):

3.1 维度1、改变难易程度定强弱

3.2 维度2、线型断强弱。

还有没有其他维度呢?


一、UML类图的6种关系(依赖关系由弱到强):

关系

线型

关键代码

依赖

todo:

关联

todo:

聚合

todo:

组合

todo:

实现

implements

继承

extends

二、6种关系归纳总结

2.1 第一种归纳方式:先分组,再分组(由大到小,由宏观到微观)

所有的叶子节点组成6大关系。

2.2 第二种归纳方式:先聚合,再聚合(找共同点,逐步抽象,由微观到宏观)

2.2.1 归纳到一起其实是2种关系:依赖和关联。

1、首先我们这样组合看这6种关系:

依赖、(关联、聚合、组合、)实现、继承

首先聚合和组合都属于关联关系的1对多扩展,所以合并为关联。

2、现在剩下:

依赖、关联、实现、继承

一般看的时候是这样的一个组合关系:

(依赖、关联、)(实现、继承)

我们把它们拆开打乱重新组合看,或许看到不一样的内容,比如:

(依赖、实现、)(关联、继承)

分析:

依赖是不同血缘关系的类在方法级别产生关系。

关联是不同血缘关系的类在类级别产生关系。

实现是相同血缘关系的类(接口)在方法级别,也就是行为级别产生关系。

继承是相同血缘关系的类在类级别产生关系。

那么:

依赖和实现都是方法级别,行为级别的合并到一起。可以都说是依赖。

关联和继承都是类级别的,合并到一起。可以都说是关联。

结论:

所以最终归纳为2种关系:依赖和关联。从线型上也可以进行如此归纳。

2.2.2 寻根究底再归纳

2.2.1 为什么最终是两个关系呢?这两个关系是什么关系?

再归纳就是归纳为类只有两部分内容:1、属性;2、方法。所以类的关系也就从这两部分衍生出来。

一个类的方法在另一个类的方法中出现,则是依赖。

一个类在另一个类的属性中出现,则是关联。

区分一种情况,如果是透传,则不属于有依赖关系。

只在方法里new对象,不调用该对象的方法,也不属于有依赖关系。

因为他们的行为没有产生交互。也就是方法内没有直接调用方法。

2.2.2 那么继续,为什么依赖的关系弱于关联的关系呢?

从类的组成(方法和属性)的角度分析:?

从对象的组成(行为和特征)的角度分析:?

从动静(类和对象)的角度分析:?

依赖和关联,描述的是类之间的关系还是对象之间的关系呢?

说是类之间的关系,那么只考虑类,不考虑对象,不用考虑运行时。

根据变化的容易程度吗?

强弱是个相对的,软硬也是相对的,更软更易改变,更硬更不易改变。

那么关系更强更不易改变,关系更弱更易改变。

依赖发生在方法里,关联发生在属性上。相对来说方法更容易改变?是的。

还有其他角度吗?

2.3 从根上往上推关系是如何扩展来的?如下图所示:

三、uml类图的六大关系进行结构化(通过对比它们的强弱):

3.1 维度1、改变难易程度定强弱

方法关系比属性关系更弱,无血缘关系比有血缘关系弱,关联类单个比多个弱,关联越晚发生越弱。

3.2 维度2、线型断强弱。

虚线比实线关系弱,空心比实心关系弱,没菱形比有菱形关系弱,普通箭头比三角箭头关系弱。

还有没有其他维度呢?

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

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

相关文章

spring-spring整合Junit

1.导包 <artifactId>spring-test</artifactId> <artifactId>junit</artifactId> 2.创建测试类

Linux性能优化实践——如何学习Linux性能优化

性能指标 学习性能优化的第一步便是了解“性能指标”这个概念。 “高并发”和“响应快”对应着性能优化的两个核心指标——“吞吐”和“延时”。这两个指标是从应用负载的角度来考察性能的&#xff0c;直接影响了产品终端的用户体验。跟他们对应的&#xff0c;是从系统资源的视…

基于Flask的问答系统的设计与实现

这个项目刚开始是跟着哔哩哔哩上的一个教程学习的&#xff0c;后面完成初步实现后&#xff0c;我按照自己的设计加入了新的功能。 文章目录 数据表mysqlredis 项目展示注册登录首页问题详情页问题回答及回复搜索功能发布问题功能评论我的功能回复我的功能我的文章功能编辑文章…

springcloud eureka增加安全认证

网上很多资料写的不全&#xff0c;不细致。 springcloud架构&#xff0c;本地运行代码是eureka地址一般为localhost:port&#xff08;自己暴露的端口&#xff09;&#xff0c;例如http://localhost:9000/ &#xff0c;但是如果在服务器&#xff0c;且使用k8s部署&#xff0c;一…

科大讯飞开发者大赛,有点东西~

小伙伴们大家好&#xff0c;我是阿秀。 如果要说 23 年上半年最火的科技圈话题是什么&#xff1f; 那AIGC和大模型相关的话题稳坐头把交椅&#xff0c;奈何由于不少服务器在海外&#xff0c;很多人因为没有充分条件无法体验。 后来众多国产大模型也跟上步伐&#xff0c;智能问答…

Spring Boot 中的任务执行器是什么,如何使用

Spring Boot 中的任务执行器是什么&#xff0c;如何使用 Spring Boot 是一个非常流行的 Java 开发框架&#xff0c;它的核心理念是通过简单的配置和约定来提高开发效率。在很多情况下&#xff0c;我们需要在后台执行一些任务&#xff0c;比如异步处理、定时任务等等。为了简化…

数据结构错题集 第八章 排序

8.1 3 B 稳定性问题&#xff1a; 是按关键字排序的 数值一样的两个数是两个不同的关键字 顺序可能不同 4.记住公式即可 8.2 B D与初始序列无关 选择排序&#xff1a;在n个中选择最小的 放在第一个 在n-1个中 选择第二小的放在第二个 快速排序 越有序 反而越复杂化 直接插入…

Spring底层核心架构

Spring底层核心架构 相关的配置类 1. user类 package com.zhouyu.service;import org.springframework.stereotype.Component;public class User { }2. AppConfig类 package com.zhouyu;import org.springframework.context.annotation.*; import org.springframework.sched…

CASS扣除中间区域面积的方法

1、打开cass软件&#xff0c;绘制一个矩形和圆形&#xff0c;圆形全部位于矩形框内&#xff0c;具体如下&#xff1a; 2、点击“地物编辑”菜单栏下的“图案填充”&#xff0c;如下&#xff1a; 3、在命令行内输入实体填充、选择范围线方式填充&#xff0c;选择后可得到如下结果…

基于单片机的智能路灯控制系统人体感应灯光控制系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前时间、年月日、时分秒&#xff1b;按键看看有设置自动手动模式&#xff1b;3路红外探头用来感应当前3个区域是否有人&#xff1b;按键可以设置当前时间、开启和关闭教室灯光时间&#xff1b;在手动模式下&#…

debian to go

可以使用虚拟机操作&#xff0c;在运行镜像到安装步骤时选择 u盘 不需要手动分 /boot 分区之类的&#xff0c;“Automaction”自动分区就行&#xff0c;全安装到根目录。boot load 安装到 /dev/sdb&#xff0c;也就是硬盘本身 推荐使用gpt分区表&#xff0c;建议拿不用的盘练…

Basic of Solidity (solidity基础)

目录 1.first contract 申明编译器版本 定义合约 合约构造函数 定义变量 定义函数 2.data type 值类型&#xff08;Value Types&#xff09; 引用类型&#xff08;Reference Types&#xff09; 映射类型&#xff08;Mapping Types&#xff09; Solidity是一种用于编写…

vue + element 笔记(vue2.0)

1.安装nodejs&#xff0c;cmd中运行 node -v 验证是否成功 2.安装cnpm&#xff0c;cmd中运行 npm install -g cnpm --registryhttps://registry.npm.taobao.org&#xff0c;cmd中 cnpm -v 验证是否成功 3.安装vue-cli&#xff0c;cmd中运行 cnpm install --global vue-cli&…

三、Java的运算符

三、运算符 运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋值和比较等。 3.1、算术运算符 - * / % (前) (后) (前)-- (后)-- % :取余运算 结果的符号与被模数的符号相同 开发中&#xff0c;经常使用%来判断能否被除尽的情况 3.2、赋值运算符 注意&#xff1a;s2…

Spring Boot 中的 Native SQL 是什么, 如何使用

在 Spring Boot 中&#xff0c;我们通常使用 ORM 框架&#xff08;例如 Hibernate 或 MyBatis&#xff09;来操作数据库。但是&#xff0c;有时候我们需要执行一些自定义的 SQL 查询或更新语句&#xff0c;这时候就需要使用 Spring Boot 中的 Native SQL。 在本文中&#xff0…

Matlab绘图系列教程-Matlab 34 种绘图函数示例(下)

Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化第一部分&#xff1a;入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …

8、添加PolylineCollection线

本节演示添加线要素&#xff0c;使用第四节单击事件的例子&#xff0c;修改点击事件创建线要素。 1、重新修改地图默认位置 double r glm::radians(-45.0); Cesium::HeadingPitchRoll *orientation new Cesium::HeadingPitchRoll(0.0, r, 0.0); glm::dvec3 initialPosition…

map和set的封装

目录 封装逻辑 用红黑树封装set和map 红黑树的定义改变 迭代器 红黑树的迭代器 set的迭代器 map重载[]操作的实现 比较关键——得到 key的类型K 封装逻辑 用红黑树封装set和map map和set用红黑树来实现的&#xff1b;红黑树的前三个模板参数分别表示&#xff1a;得到key的…

C语言---程序环境和预处理(底层原理万字详解)

文章目录 前言&#x1f31f;一、程序的翻译环境和执行环境&#x1f31f;二、详解编译链接&#x1f30f;2.1命令&#x1f30f;2.2 板书详解&#x1f30f;2.3运行环境 &#x1f31f;三、预处理详解&#x1f30f;3.1预定义符号&#x1f30f;3.2 #define&#x1f4ab;3.2.1 #define…

第三章 SSD存储介质:闪存

3.1 闪存物理结构 闪存芯片从小到大依此是由&#xff1a;cell&#xff08;单元&#xff09;、page&#xff08;页&#xff09;、block&#xff08;块&#xff09;、plane&#xff08;平面&#xff09;、die&#xff08;核心&#xff09;、NAND flash&#xff08;闪存芯片&#…