类与类之间的关系有哪几种?

news2025/2/25 20:58:35

文章目录

  • 程序设计要素
      • 1.可读性
      • 2.健壮性
      • 3.优化
      • 4.复用性
      • 5.可扩展性
  • 设计类的关系遵循的原则
      • 1、 高内聚低耦合
      • 2、面向对象开发中 “针对接口编程优于针对实现编程””组合优于继承” 的总体设计
  • 类与类之间的关系(即事物关系)
    • A is-a B 泛化(继承,实现)
    • A has-a B 包含(紧密程度:组合 > 聚合 > 关联)
    • A need-a B 依赖(依赖)
    • Java程序体现的形式为

程序设计要素

1.可读性

  • 名字 缩进 注释

2.健壮性

  • 判断严谨

3.优化

  • 结构 性能 内存

4.复用性

  • 抽取方法 类

5.可扩展性

  • 抽象 接口 面向配置文件

设计类的关系遵循的原则

1、 高内聚低耦合

耦合度:紧密程度 从强到弱依次是: 继承>实现>组合>聚合>关联>依赖

2、面向对象开发中 “针对接口编程优于针对实现编程””组合优于继承” 的总体设计

在这里插入图片描述

类与类之间的关系(即事物关系)

类与类之间关系(即事物关系)有如下6种
继承(Generalization,又叫作泛化)关系、
实现(Realization)关系
组合(Composition )关系
聚合(Aggregate)关系
关联(Association)关系
依赖(Dependency)关系

A is-a B 泛化(继承,实现)

1、在 继承关系 中,子类继承父类的所有功能,父类所具有的属性、方法,子类都应该有。除了与父类一致的信息,子类中还包括额外的信息。例如,公交车、出租车都是车

2、接口(包括抽象类)是方法的集合,在 实现关系 中,类实现了接口,类中的方法实现了接口声明的所有方法。例如,人、动物都吃饭都睡觉

A has-a B 包含(紧密程度:组合 > 聚合 > 关联)

3、 关联关系 是类与类之间最常用的一种关系,表示一类对象与另一类对象之间有联系。组合、聚合也属于关联关系,只是关联关系的类间关系比其他两种关系要弱。比如说,人有汽车,人有电脑;整体和部分的关系,可以分割,后来形成在一起

关联关系有4种:
双向关联、
单向关联、
自关联、
多重性关联
例如汽车和司机,一辆汽车对应特定的司机,一个司机也可以开多辆车

Association is a relation between two separate classes which establishes through their Objects. Association can be
1、one-to-one,
2、one-to-many, i.e. Bank can have many employees
3、many-to-one,
4、many-to-many.
In Object-Oriented programming, an Object communicates to another object to use functionality and services provided by that object.

Composition and Aggregation are the two forms of association.

4、 聚合关系 也表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。例如,工人和工作服是整体与部分的关系,但是可以分开,没有共同的生命周期。工作服可以穿在别的司机身上,工人也可以换别人的工作服。再比如说,汽车和车轮,电脑和主板。

It is a special form of Association where:
1、It represents Has-A’s relationship.
2、It is a unidirectional association i.e. a one-way relationship.
For example, a department can have students but vice versa is not possible and thus unidirectional in nature.
3、In Aggregation, both the entries can survive individually which means ending one entity will not affect the other entity.

When do we use Aggregation ??
Code reuse is best achieved by aggregation.

5、 组合关系 表示类之间整体与部分的关系,整体与部分有一致的生存期。一旦整体对象不存在,部分对象也将不存在,整体和部分是同生共死的关系。 皮之不存,毛将焉附 例如,人和脑袋,人和大脑,人和心脏

Composition is a restricted form of Aggregation in which two entities are highly dependent on each other.
1、It represents part-of relationship.
2、In composition, both entities are dependent on each other.
3、When there is a composition between two entities, the composed object cannot exist without the other entity.
For example, Book is Part-of Library. If Library gets destroyed then All books within that particular library will be destroyed. i.e. books can not exist without libraries. That’s why it is composition.

Aggregation vs Composition
1. Dependency: Aggregation implies a relationship where the child can exist independently of the parent. For example, Bank and Employee, delete the Bank and the Employee still exist. whereas Composition implies a relationship where the child cannot exist independent of the parent. Example: Human and heart, heart don’t exist separate to a Human
2. Type of Relationship: Aggregation relation is “has-a” and composition is “part-of” relation.
3. Type of association: Composition is a strong Association whereas Aggregation is a weak Association.

A need-a B 依赖(依赖)

6、 依赖关系 是一种“使用”关系,特定事物的改变有可能会影响到使用该事物的其他事物,当需要表示一个事物使用另一个事物时,使用依赖关系。
在大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。例如,汽车依赖汽油,如果没有汽油,则汽车将无法行驶。

在这6种类关系中,
组合、聚合和关联的代码结构一样,可以从关系的强弱来理解,
各类关系从强到弱依次是: 继承>实现>组合>聚合>关联>依赖

-----------------------------------------------------摘自《设计模式就该这样学:基于经典框架源码和真实业务场景》(谭勇德)
------------------------------------------------------------------------摘自Article–《Association, Composition and Aggregation in Java》

Java程序体现的形式为

has a :一个类的对象当做另一个类的属性来存储

对于赋值 :

  1. 可以在构造方法里赋值
  2. 可以通过set方法赋值;

need a:一个类的方法中使用到了另一个类的对象

对于赋值:

  1. 可以在方法中自己创建
  2. 可以在方法中传递进来

-----------------------------------------------------------------------------------------------------------------------------------------------自己总结

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

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

相关文章

模拟用户登录-课后程序(JAVA基础案例教程-黑马程序员编著-第五章-课后作业)

【案例5-3】 模拟用户登录 【案例介绍】 1.任务描述 在使用一些APP时,通常都需要填写用户名和密码。用户名和密码输入都正确才会登录成功,否则会提示用户名或密码错误。 本例要求编写一个程序,模拟用户登录。程序要求如下: 用…

Redis02: Redis基础命令

一、基础命令 先启动redis服务,使用redis-cli客户端连到redis数据库里面 1. 获取符合规则的键: keys 要点: (1)keys 后面可以指定正则表达式 (2)在生产环境下建议禁用keys命令,因为这个命令会查…

为什么要经常阅读和分析计算机SCI期刊论文? - 易智编译EaseEditing

训练阅读与分析期刊论文的能力,可以增加中长期的学术竞争力。 只要能够充分掌握阅读与分析期刊论文的技巧,就可以水到渠成地轻松进行「创新」的工作。 所以,只要深入掌握到阅读与分析期刊论文的技巧,就可以掌握到大学生不曾研习过…

koa中间件的实现原理

koa中间件的实现原理如何?先来看一个例子。koa的执行顺序是这样的:const middleware asyncfunction (ctx, next) {console.log(1)await next()console.log(6) }const middleware2 asyncfunction (ctx, next) {console.log(2)await next()console.log(5…

GCN项目实战1-SimGNN

文章目录SimGNN:快速图相似度计算的神经网络方法1. 数据2. 模型2.1 python文件功能介绍2.2 重要函数和类的实现SimGNN:快速图相似度计算的神经网络方法 原论文名称:SimGNN: A Neural Network Approach to Fast Graph Similarity Computation…

2023年,即时配送迎来黄金年,其他玩家该如何“弯道超车”?

我们知道,面对如此宏达的快递行业,它的市场一直被许多人所看好。尤其近几年,随着电商、物流的发展,各互联网公司纷纷跻身这一领域。现在市面上为大家所熟知的三通一达、极兔以及顺丰等等。 除此之外,在一些细分领域&a…

AWS攻略——Peering连接VPC

文章目录创建IP/CIDR不覆盖的VPC创建VPC创建子网创建密钥对创建EC2创建Peering接受Peering邀请修改各个VPC的路由表修改美东us-east-1 pulic subnet的路由修改悉尼ap-southeast-2路由测试知识点我们回顾下《AWS攻略——VPC初识》中的知识: 一个VPC只能设置在一个Re…

劳特巴赫仿真测试工具Trace32的基本使用(cmm文件)

劳特巴赫 Trace32 调试使用教程 使用PRACTICE 脚本(.cmm) 在TRACE32 中使用PRACTICE 脚本(*.cmm)将帮助你: 在调试器启动时立即执行命令根据您的项目需求自定义TRACE32PowerView用户界面加载应用程序或符号使调试操作具有可重复性, 并可用于验证目的和回归测试 自动启动脚本…

Spring Boot系列--创建第一个Spring Boot项目

1.项目搭建 在IDEA中新建项目,选择Spring Initializr。 填写项目信息: 选择版本和Spring Web依赖: Spring Web插件能为项目集成Tomcat、配置dispatcherServlet和xml文件。此处选择的版本若为3.0.2的话会出现如下错误: java: …

【C++】文件IO流

一起来康康C中的文件IO操作吧 文章目录1.operator bool2.C文件IO流3.文件操作3.0 关于按位与的说明3.1 ifstream3.2 ofstream流插入文本3.3 ostringstream/istringstream3.4 stringstream3.5使用stringstream的注意事项结语1.operator bool 之前写OJ的时候,就已经用…

Python学习-----排序问题1.0(冒泡排序、选择排序、插入排序)

目录 前言: 1.冒泡排序 2.选择排序 3.插入排序 前言: 学过C语言肯定接触过排序问题,我们最常用的也就是冒泡排序、选择排序、插入排序……等等,同样在Python中也有排序问题,这里我也会讲解Python中冒泡排序、选择排…

MvvmLight框架入门

MvvmLight MvvmLight主要程序库 ViewModelLocator 在.netFramework环境下nuget安装MvvmLight会自动安装依赖项MvvmLightLibs库,如果在.net core环境下需要手动安装MvvmLightLibs库。 .netFramework环境下安装完成后,在ViewModel目录下具有一个 ViewMo…

page cache设计及实现

你好,我是安然无虞。 page cache的设计及实现 page cache 本质上也是一个哈希桶, 它是按照页的数量进行映射的. 当 central cache 向 page cache 申请内存时, page cache 先检查对应位置是否有span, 如果没有则向更大页去寻找一个span, 如果找到则分裂成两个. 比如…

Java基础常见面试题(五)

异常 Java 异常类层次结构图概览 : Exception 和 Error 有什么区别? Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类 Exception(异常)和 Error(错误…

DAMA-CDGA/CDGP数据治理认证考试如何报考?

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

LocalDNS

目录 文章目录目录本节实战DNS优化1、dns 5s 超时问题解决办法2、NodeLocal DNSCache实验软件关于我最后本节实战 实战名称💘 实战:NodeLocal DNSCache-2022.7.30(测试成功)💘 实战:NodeLocal DNSCache-2023.2.21(测试成功) DNS优…

强大的内置数据结构_元组(6,)

如约而至,紧接着上一期文章,小编将会陆续把全套的Python笔记将依次发放给大家,便于大家学习Python、期末备考、巩固基础等(这几期是公众号小插曲,后期发放编程技术的话主要还是会围绕Java来展开~感谢大家支持)元组python内置数据结…

Vulnhub靶场----2、DC-2

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-2下载地址:https://download.vulnhub.com/dc/DC-2.zip kali:192.168.144.148 DC-2:192.168.144.150 添加hosts文件:192.168.144.150 DC-2 二、渗透流程 nmap -A -…

FLV-初学总结

FLV-初学总结 从零开始仅学习了一下午的总结,本文非常稚嫩… 本文为纯初学者的学习记录,为了方便理解,内容未必严谨,可以用作纯新手的入门了解篇。本文主要的参考链接如下⬇️ 详细了解FLV:FLV官方文档(Ve…

面向对象之三大特性(二)

5. 面向对象三大特性 继承、多肽、封装 5.1 继承 类的继承与现实生活中的父、子继承关系一样。被继承的类称为父类、基类或超类,继承者称为子类。Python 继承分为:单继承和多继承(继承多个类)。 class Parent1:pass class Par…