写了很多年代码,都没有考虑过类之间的关系,大家了解比较多的是继承关系,其实还有很多其他关系我们也使用了,但是并没有一个明确的概念,还有类之间的耦合度也不是很清楚,接下来介绍类和类之间的关系。

在软件系统中,类不是孤立存在的,类与类之间存在各种关系。根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

依赖关系

依赖(Dependency)关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
特点:
1:是一种使用关系
2:是一种临时关系

在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。如下图所示是人与手机的关系图,人通过手机的语音传送方法打电话。

关联关系

关联(Association)关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。
特点:
1:是一种引用关系
2:可以是双向的
3:可以是单向的
在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。也可以在关联线的两端标注角色名,代表两种不同的角色。
在代码中通常将一个类的对象作为另一个类的成员变量来实现关联关系。如下图所示是老师和学生的关系图,每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联。

聚合关系

聚合(Aggregation)关系是关联关系的一种,是强关联关系,是整体和部分之间的关系,是 has-a 的关系。
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
特点:
1:是一种强关联关系
2:是一种拥有的关系
在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。如下图所示是大学和教师的关系图。

组合关系

组合(Composition)关系也是关联关系的一种,也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 contains-a 关系。
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。
特点:
1:是一种强关联关系
2:是一种包含的关系
3: 整体对象控制部分对象的生命周期
在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。如下图所示是头和嘴的关系图。

泛化关系

泛化(Generalization)关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系,是 is-a 的关系。
特点:
1:是对象间耦合度最大的一种关系
2:是一种继承关系
在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。在代码实现时,使用面向对象的继承机制来实现泛化关系。例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下图所示。

实现关系

实现(Realization)关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。
特点:
1:耦合度最大的一种关系
2:是一种继承关系
在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。例如,汽车和船实现了交通工具,其类图如下图所示。

类与类之间的关系和耦合度相关推荐

  1. 内存(Display)、显示器(Monitor)和计算机(Computer)均属于一种产品(Product),其中计算机需要显示器和内存。请用Python语言简要实现这些类及它们之间的关系。

    内存(Display).显示器(Monitor)和计算机(Computer)均属于一种产品(Product),其中计算机需要显示器和内存.请用Python语言简要实现这些类及它们之间的关系. clas ...

  2. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

  3. UML类图中类之间的关系,聚合,组合,依赖总结

    下面我就根据下面这个图来讲解一下UML类图. 类图 首先,看动物那个矩形框,他就表示为一个类(Class).类图分为三层: 第一层显示类的名称 如果是抽象类,就用斜体表示 第二层显示类的特性,通常是字 ...

  4. Java中基本数据类型和Object之间的关系

    1.基本数据类型和Object之间是没有关系的 2.基本数据类型的包装类 例如int 的包装类Integer的父类则是Object 输入:12 解释:在赋值的过程中进行自动装箱

  5. 面向对象:类与对象之间的关系

    什么是类? 类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象.在面向对象的程序设计语言中,类是对一类"事物"的属性与行为的抽象. 什么是对 ...

  6. Java中的类与对象之间的关系

    目录 1 面向对象思想 2 类和对象 1 类 2 对象 3 类与对象的关系 3 类的定义 4 对象的使用 5 成员变量的默认值 1 面向对象思想 对象泛指现实中的一切事物,每种事物都具备自己的属性和行 ...

  7. python基础------类与对象之间的关系,封装、继承、多态

    类与对象.封装.继承 练习1 # 1.写一个员工类BwEmployee class BwEmployee(object): # (2)添加构造方法,包含5个形参,保存外部传入值,分别给以下实例属性赋值 ...

  8. 浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

  9. 静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

    1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #i ...

最新文章

  1. xcode 中的iOS模拟器,home键快捷键
  2. Nginx Web服务应用
  3. C语言找出两个字符串唯一不同的一个字符(附完整源码)
  4. IOS 控件 - 去除 tableView 多余的横线
  5. 产品经理应该干些啥?
  6. 管理老板,让他乖乖给你涨工资
  7. BPF(BSD Packet Filter)
  8. jboss:在standalone.xml中设置系统属性(system-properties)
  9. R语言可视化学习笔记之ggpubr包
  10. 学习document.location.href和document.location.replace 区别
  11. C++ set清空是clear 不是empty
  12. *SQL Server系统表的应用
  13. 标学教育计算机等级考试系统,标学教育电脑版
  14. 1、Java开发环境搭建(eclipse版)
  15. 滴答清单微信登录界面丢失
  16. MFC 生成中英文版软件对应的工程属性设置
  17. 关于win11管理员提权方法的补充技巧
  18. torch.mul()函数的使用
  19. travis CI + coveralls
  20. 供应链数字化转型,从主数据管理开始

热门文章

  1. 在字节做了5年测试,12月被无情辞退,想给还在摸鱼的兄弟提个醒...
  2. Hadoop数据压缩
  3. USE方法快速定位性能瓶颈:利用率(utilization)、饱和度(saturation)和错误(error)度量
  4. 想做游戏开发,我应该会点啥?
  5. 不锈钢有磁和无磁的区别是什么?
  6. 极光推送 android6.0,极光推送Unity-Android-API
  7. 数学之美|斐波那契数列与黄金分割
  8. go每日新闻--2020-12-03
  9. EXPORT_SYMBOL的使用并以使用do_adjtimex调节内核tick_length(滴答长度)为例的说明
  10. win10 + VS2015企业版安装教程