类与类之间的关系

2023-05-16

类之间的关系有

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

目录

1. 泛化(Generalization)继承

2. 实现(Realization)

3. 关联(Association)

4. 聚合(Aggregation)

5. 组合(Composition)

6. 依赖(Dependency)

各种关系的强弱顺序:


我们在描述类之间的关系的时候,可以使用UML图

  • UML即Unified modeling language(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。

1. 泛化(Generalization)继承

【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性。

【代码】

public class Animal{

}
public class Tiger extends Animal{
    //继承Animal类
}

【箭头指向】:带三角箭头的实线,箭头指向父类

2. 实现(Realization)

【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现.

 【代码】

public interface IBrush {
    //    声明一个接口(注意:接口不是类)
}
public class PenBrush implements IBrush {
    //    实现接口IBrush 
}

【箭头指向】:带三角箭头的虚线,箭头指向接口

3. 关联(Association)

【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量。

【代码】

public class Teacher{
    //老师不会只有一个学生,得有多个。
    private Lsit<Student> student;
}
public class Student{
    //学生不会只有一个老师,得有多个。
    private Lsit<Teacher> teacher;
    //学生不会只有一门课程,得有多个。
    private Lsit<Course> course;
}
public class Course{
   
}

【箭头及指向】:带普通箭头的实心线,指向被拥有者

        上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

4. 聚合(Aggregation)

【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量。

【代码】:如下。


/**
* 汽车类
*/
public class Car{
    //引擎
    private Engine engine;
    //轮胎
    private Tire tire;
}

/**
* 引擎类
*/
public class Engine{

}

/**
* 轮胎类
*/
public class Tire{

}

【箭头及指向】:带空心菱形的实心线,菱形指向整体

5. 组合(Composition)

【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量。

【代码】:如下。

//公司类
public class Company{
    //
    private Department department;

}
//部门类
public class Department{


}

【箭头及指向】:带实心菱形的实线,菱形指向整体

6. 依赖(Dependency)

【依赖关系】:是一种使用的关系,  即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.

【代码表现】:局部变量、方法的参数或者对静态方法的调用。

【代码】:如下。

//代理人
puvlic class Agent{
    //成员变量
    private Computer computer;
    //方法的参数
    public void use(Computer computer){
    }
    //有返回的方法
    public Computer getComputer(){
    return new Computer();
    }
    //静态方法
    public static void useComputer(Computer computer){
    }
}

//计算机
puvlic class Computer {

}

【箭头及指向】:带箭头的虚线,指向被使用者

 

各种关系的强弱顺序:

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

下面这张UML图,比较形象地展示了各种类图关系:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类与类之间的关系 的相关文章

随机推荐

  • -----------------------------------SQL2005的安装问题汇总 --------------------------

    SQL2005的安装问题汇总 SQL2005 分五个版本 xff0c 如下所列 xff0c 1 Enterprise 企业版 2 Development 开发版 3 Workgroup 工作群版 4 Standard 标准版 5 Expre
  • ----------------50条常用语句(以学生表为例)---------

    Student S Sname Sage Ssex 学生表 Course C Cname T 课程表 SC S C score 成绩表 Teacher T Tname 教师表 问题 xff1a 1 查询 课程比 课程成绩高的所有学生的学号
  • --------c# SQL数据库远程连接及配置方法---------------

    一 xff1a C 连接SQL数据库 Data Source 61 myServerAddress Initial Catalog 61 myDataBase User Id 61 myUsername Password 61 myPass
  • 一些有用的DMV

    xfeff xfeff 查看数据库中正在运行的SQL语句的执行情况 xff08 包括执行计划和等待类型等等 xff09 SELECT sp ecid DB NAME sp dbid AS Database QP query plan sp
  • Bulk insert如何导入部分字段的数据

    xfeff xfeff IF OBJECT ID 39 Employee 39 IS NOT NULL DROP TABLE Employee GO CREATE TABLE Employee Id int Name VARCHAR 100
  • SQL SERVER获取索引脚本

    xfeff xfeff 关于如何获取索引脚本的语句很多 xff0c 上次在项目中需要去查询并获取索引脚本 xff0c 所以写了一个简单的查询语句来进行获取 WITH idxcol AS SELECT i object id i index
  • 超详细一文到底!软件测试基本流程

    前言 xff1a 采用通用的测试流程 xff0c 能高效 高质量的完成软件测试工作 xff0c 有助于减少沟通成本 xff0c 对各阶段产出有明确认知等等 最终目标 xff1a 实现软件测试规范化 标准化 以下为非通用标准 xff0c 仅供
  • shell:重启&&关机

    文章目录 shutdownhaltpoweroffrebootinitsync shutdown 关机重启命令 shutdown h 10十分钟后关机shutdown h 0马上关机shutdown h now马上关机shutdown c取
  • 世界上最经典的25句话

    1 记住该记住的 xff0c 忘记该忘记的 改变能改变的 xff0c 接受不能改变的 2 能冲刷一切的除了眼泪 xff0c 就是时间 xff0c 以时间来推移感情 xff0c 时间越长 xff0c 冲突越淡 xff0c 仿佛不断稀释的茶 3
  • Android Intent 用法总结

    From xff1a https www jianshu com p 67d99a82509b Android 中提供了 Intent 机制来协助应用间的交互与通讯 xff0c Intent 负责对应用中一次操作的动作 动作涉及数据 附加数
  • centos8 配置vsftpd的SSL/TLS功能

    前面我带着大家已经配置了一个vsftpd服务器 xff08 虚拟用户模式 xff09 xff0c 匿名用户和本地用户模式配置起来比较简单就没再赘述 xff0c 本文再带大家开启vsftpd的SSL TLS功能 1 生成一个TLS证书 Vsf
  • ubuntu gnome 桌面增加快捷方式

    方法 在 ubuntu 的桌面增加快捷方式很简单 xff0c 在 usr share applications 下 xff0c 增加一个 desktop 文件就可 xff0c 内容基本如下 xff1a Desktop Entry Versi
  • DOS那一代的程序员现在都干嘛呢?

    亿友论坛 DOS那一代的程序员现在都干嘛呢 xff1f xff08 几年前的老帖子 xff09 作者 xff1a 包子夹蛋 发布时间 xff1a 2005 5 10 14 01 00 DOS那一代的程序员现在都干嘛呢 xff1f xff08
  • KVM虚拟机掉电重启后无法ssh连接访问

    KVM虚拟机掉电重启无法ssh连接访问 问题描述问题解决过程解决方法 问题描述 KVM虚拟机升级ssh版本后 xff0c 主机因为维护掉电 xff0c 等主机上电后 xff0c 虚拟机重启后 xff0c 再也无法ssh连接访问 问题解决过程
  • 让Ubuntu 18.04系统支持root用户登录的方法

    简介 默认的Ubuntu 18 04系统在登陆界面上是不支持root用户直接登录的 xff0c 但是你可以使用下面的方法让Ubuntu 18 04也支持root登录 通常情况下 xff0c 在Ubuntu 18 04中的普通用户只能通过运行
  • 这十个css动画案例惊艳众人

    大家好 我是前端实验室的大师兄 对于网页设计师和开发工程师而言 xff0c 创建一款极具趣味性和实用性的CSS网页动画 xff0c 能让网站美观不少 CSS动画 xff0c 就是通过CSS代码搭建网页动画 允许设计师和开发人员 xff0c
  • java线程和进程(阻塞队列)

    目录 1 阻塞队列简介 2Java中的阻塞队列 3 阻塞队列的实现原理 4 阻塞队列的使用场景 1 阻塞队列简介 阻塞队列常用于生产者和消费者的场景 xff0c 生产者是往队列里添加元素的线程 xff0c 消费者是从队列里拿元素的线程 阻塞
  • 子类可以重载父类的方法吗?重载会发生父类和子类之间吗?

    不可以 方法重载 xff1a 在同一个类中 xff0c 方法名相同 xff0c 参数列表不同的方法 xff0c 同一个类中 xff01 xff01 xff01 xff0c 子类和父类不是一个类啊 底层原理是方法区加载了子类和父类 xff0c
  • 时间复杂度和空间复杂度(基础,详细)

    前言 算法对于开发人员是非常重要的 xff0c 我们从常见的算法看起 xff0c 比如排序算法 xff0c 排序算法有好几种实现方法 xff0c 最简单的嵌套两个for循环进行排序 xff0c 进阶点就可以用 冒泡排序 xff0c 最终的结
  • 类与类之间的关系

    类之间的关系有 xff1a 泛化 xff08 继承 xff09 实现 关联 聚合 组合 依赖 目录 1 泛化 xff08 Generalization xff09 继承 2 实现 xff08 Realization xff09 3 关联 x