对象之间的关系

news2024/11/27 19:41:41

目录

  • 1. 依赖
  • 2. 关联
  • 3. 聚合
  • 4. 组合

Java的对象/类之间有四种关系:依赖、关联、组合、聚合。

1. 依赖

依赖(Dependency): 一个对象的功能依赖于另一个对象。

  • 类比:人类生存依赖食物和空气

  • 体现:被依赖者体现为依赖者的局部变量参数静态方法的调用

  • 示例:

    UML:

    code:

    public class Human {
        public void live(Food food) {
            Air.breath();
            food.eat();
        }
    }
    
    class Air {
        public static void breath() {
            System.out.println("呼吸...");
        }
    }
    
    class Food {
        public void eat() {
            System.out.println("进食...");
        }
    }
    

2. 关联

关联(Association): 一个类需要知道另一个类的情况(属性、方法),可以是双向,也可以是单向。

  • 类比:人类进食需要知道食物有没有过期

  • 体现:关联的对象一般是作为成员变量

  • 示例:

    UML:

    code:

    public class Human {
    
        private Food food;
        public void judge() throws ParseException {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
            if (format.parse(food.getExpiration()).compareTo(new Date()) > 0 ) {
                food.eat();
            } else {
                System.out.println("食物已经过期");
            }
        }
    
        public Human(Food food) {
            this.food = food;
        }
    }
    
    class Food {
    
        private String expiration;
    
        public void eat() {
            System.out.println("食物安全,可以食用");
        }
    
        public Food() {
            this.expiration = "2023-04";
        }
    
        public String getExpiration() {
            return expiration;
        }
    }
    

3. 聚合

聚合(Aggregation): 一种强关联关系(has-a),关联(Association)的对象是同一层级的,而聚合(aggregation)则是整体与组成个体之间的关系。不同整体之间可以共享个体,比如说氢分子也由氢原子组成。

  • 类比:水分子由氢原子和氧原子组成

  • 体现:被聚合对象作为成员变量

  • 实例:

    UML:

    code:

    public class WaterMolecule {
    
        private HydrogenAtom2 hydrogenAtom2;
        private OxygenAtom atom;
    
        public WaterMolecule(HydrogenAtom2 hydrogenAtom2, OxygenAtom atom) {
            this.hydrogenAtom2 = hydrogenAtom2;
            this.atom = atom;
        }
    }
    
    class OxygenAtom {
    
    }
    
    class HydrogenAtom2 {
    
    }
    

4. 组合

组合(Compostion): 比聚合更强的关联关系(is-a),组合关系要求聚合关系中代表整体的对象要负责代表个体/部分的对象的整个生命周期,所以组合关系不能共享。如果代表整体的对象被销毁或破坏,那么代表个体的对象也一定会被销毁或破坏。

  • 类比:人和人的心脏、大脑

  • 体现:个体对象作为成员变量

  • 实例:

    UML:

    code:

    public class Human {
        private Brain brain;
        private Heart heart;
        private String status;
    
        public void sustainLife() {
            brain.control(status);
            heart.beat(status);
        }
    
        public Human(Brain brain, Heart heart, String status) {
            this.brain = brain;
            this.heart = heart;
            this.status = status;
        }
    }
    
    class Brain {
        public void control(String status) {
            if (status.equals("0")) {
                System.out.println("脑死亡");
            } else {
                System.out.println("大脑控制身体");
            }
        }
    }
    
    class Heart {
        public void beat(String status) {
            if (status.equals("0")) {
                System.out.println("心跳停止");
            } else {
                System.out.println("心脏跳动");
            }
        }
    }
    

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

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

相关文章

Ethercat系列(5)TWcat3激活过程的协议分析(续1)

顺序写系统时间偏移从-》主顺序写时间延迟主-》从从-》主顺序写分布式时钟启动主-》从从-》主读多重写系统时间主-》从从-》主顺序写应用层控制主-》从从-》主顺序读错误计数器主-》从从-》主顺序读应用层状态主-》从从-》主顺序读应用层,广播写错误计数器主-》从从…

2023 年首轮土地销售活动来了 与 The Sandbox 一起体验「体素狂热」!

2 月 14 日晚上 11 点,开始你的体素冒险。 The Sandbox 很高兴推出 2023 年的第一次土地销售活动。欢迎来到「体素狂热 (Voxel Madness)」! 简要概括 土地销售抽奖活动将于北京时间 2 月 14 日星期二晚上 11 点开始 「体素狂热」 土地销售活动将于 2 月…

企业公众号菜单添加视频的完整教程(组图)

公众号实用教程,公众号运营教程。 有公众号的朋友,看过来,今天来教教大家,在企业微信公众号中如何调用视频列表。先上一个效果吧: 最终效果的截图 -关注酷播公众号,查看实际的应用效果(在本公众…

【shell 编程大全】脚本交互 以及表达式

脚本交互 以及表达式 1. 概述 嗨,我又来继续分享了。今天分享的内容是脚本交互,再开始接下来的分享开始之前,让我们来回顾下上一次(【shell 编程大全】内容格式化以及多样化输出)的内容: 内容格式化 重定向管道符后台执行信息符号…

C语言学习_DAY_3_基本数据类型_运算符与表达式【C语言学习笔记】

目录 I. 基本数据类型 II. 复杂的输出和输入语句编写 III. 运算符与表达式 III.I 算术运算符 III.II 关系运算符 III.III 逻辑运算符 III.IV 位运算符 III.V 三目运算符 III.VI 逗号运算符 高质量博主,点个关注不迷路🌸🌸&#x1f3…

电脑怎么备份文件?含泪分享3种免费的方法

电脑里面保存着我们很多文件数据,比如工作文档、珍贵的照片、喜欢的音乐或者视频等。你很可能会遇到下面的原因而丢失数据:清空回收站,或者使用永久删除文件的方法;电脑出现故障,比如硬盘故障、系统崩溃;病…

Python实现基于openCV+百度智能云平台实现《1:N人脸考勤机》文章最后附带源码!

目录 一、 项目介绍 1.1 项目名称 1.2 项目简介 1.3 项目物料 1.4 技术栈 二、 项目架构 三、项目细节 3.1 环境搭建 3.2 利用opencv实现摄像头调取及相关图像的采集 3.3 利用aips上传图像和结果返回 3.4 结果优化和处理 3.5 可扩展性 3.6 遗留问题和…

中睿天下获评2022年度中关村网信联盟工业互联网标准工作特别贡献奖

近日,中关村网络安全与信息化产业联盟(简称“CCAIA”)于线上召开联盟第二届第五次会员大会,来自全国的联盟成员代表、行业专家等100余人出席会议,共同听取了联盟2022年工作总结与2023年工作计划,大会设置了…

春招Leetcode刷题日记-D2-贪心算法-训练专题

D2-贪心算法-训练专题贪心算法使用总结力扣605. 种花问题思路代码力扣763. 划分字母区间思路代码另一种思路贪心算法使用总结 当我们意识到,满足贪心算法三要素时候,解决贪心算法问题的时候,一定要遵循的步骤: 1、读懂题目限制条…

数据结构与算法:7种必须会的排序以及3种非基于比较排序

1.什么是排序 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序…

大数据专业职业前景如何

大数据专业毕业生未来的岗位选择空间比较大,有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位,在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…

usbmon---Linux下USB数据传输监控

文章目录Usb包的总类(1)令牌包(2)数据包(3)握手包(4)特殊包Usb包的事务usb四种传输类型批量传输等时传输中断传输控制传输usbmon的使用(1)首先检测内核是否支…

算法刷题打卡第90天:表现良好的最长时间段

表现良好的最长时间段 难度:中等 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」,意味在这…

常量const、引用、指针的大杂烩

文章目录1 普通引用1.1 对普通值的普通引用1.2 对常量值的普通引用1.3 对普通指针的普通引用1.4 对常量指针的普通引用1.5 对指针常量的普通引用1.6 对指向常量的指针常量的普通引用2 常量引用2.1 对普通值的常量引用2.2 对常量值的常量引用2.3 对普通指针的常量引用2.4 对常量…

2023年留学基金委(CSC)西部/地方合作项目选派办法及解读

2023年2月13日国家留学基金委(CSC)官方网站发布了2023年西部地区人才培养特别项目、地方合作项目通知。知识人网小编现将其选派工作流程及选派办法原文转载并加以解读、提出建议。知识人网建议1. 邀请函是公派申请的必备条件。对于外语语言证明未达标者&…

React学习笔记(番外二)——列表多选批量处理复合组件

React学习笔记(番外二)——列表多选批量操作复合组件前言〇、Show you the code一、 任务分析及拆解表头行的Checkbox——总开关记录行的Checkbox——行级开关二、 基础实现表头行的文件——header-row.js记录行的文件——record-row.js页面的文件App.js…

Linux操作系统学习(进程退出)

文章目录进程终止退出码进程退出场景进程退出的方式进程终止 退出码 ​ 我们知道每个main函数结尾都有return,一般都是return 0,用echo $?就可以查看它的退出码,0就是他的退出码,也可以写一些别的数值,比…

微服务项目【网关服务限流熔断降级分布式事务】

网关服务限流熔断降级 第1步&#xff1a;启动sentinel-dashboard控制台和Nacos注册中心服务 第2步&#xff1a;在网关服务中引入sentinel依赖 <!-- sentinel --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-…

好好学react源码然后惊艳所有人

hello&#xff0c;这里是潇晨&#xff0c;今天我们来聊聊react源码&#xff0c;作为使用react多年的前端工程师&#xff0c;我们是否还在使用着各种应用层面的库、框架呢&#xff0c;是否在面试过程中遇到一些关于react源码方面的问题呢&#xff0c;如果是&#xff0c;那么是否…

数据结构与算法:java对象的比较

1.基本类型的比较 在Java中&#xff0c;基本类型的对象可以直接比较大小。 public class TestCompare {public static void main(String[] args) {int a 10;int b 20;System.out.println(a > b);System.out.println(a < b);System.out.println(a b);char c1 A;char…