趣谈Java之 ——UML中类(对象)之间的几种关系

阅读文本大概需要 6.66 分钟。

前言


大家好,这是首发于公众号「蜗牛永动机」的趣谈 Java 系列教程。学习一门语言最好的办法,就是教会别人。在这个公众号,我会从最基础的教程开始写起,一方面是为了更好地复习巩固 Java 基础,另一方面也是慢慢进阶的过程。喜欢的朋友请点关注,每天一小步,一年后就是一大步。废话不多说,开始今天的文章。


1 简单了解 UML 中的类图结构


在学习类(对象)之间的关系之前,首先来了解一下 UML 中一个类是如何表示的。在 UML 中,一个类主要由三个部分组成,具体如下:

类名

属性(成员变量)的名称和类型

方法的名称、返回类型和参数

比如,我们可以看到一个 Person 类和一个 Employee 类的类图表示如下:

在这里插入图片描述

有些童鞋可能看得很仔细,应该注意到了上图中的属性或方法的前面标有 - 或 + 号。这里也顺便提一下,这几种符号表示的是属性和方法的可见性。通常,在 UML 中表示类图的时候,表示属性或方法可见性的符号主要有以下三种:

+ 表示 public
- 表示 private
# 表示 protected

比如,我们可以从上图中 Person 和 Employee 的类图中看出,Person 类有 3 个私有属性和 5 个公有方法,而 Employee 类则有 3 个私有方法和 6 个公有方法。


2 UML 中类之间的关系概述


类(对象)之间通常有两种主要的结构关系,一种是一般—>特殊关系,另一种是整体—>部分关系。从这两种类的结构关系中又可以细分出来很多种具体的类(对象)关系。

通常,一般—>特殊关系主要指的是一种 is a关系,其中最典型的代表就是泛化关系(继承关系)和实现关系。

继承关系(generalization)

实现关系(generalization)

整体—>部分关系则指的是一种 has a关系,这又怎么理解呢?因为这种结构就是典型的组装结构,也即典型的组合关系。通常,我们会在 Java 中的一个类中嵌入另一个类的对象来实现这种组合关系。整体—>部分关系通常包括以下几种类(对象)关系:

关联关系(association)

依赖关系(dependency)

聚合关系(Aggregation)

组合关系(Composition)


3 类(对象)之间的关系详解


3.1 一般—>特殊关系


3.1.1 继承关系(generalization)

在 Java 中通过关键字 extends 来表示继承关系。这里的 is a 关系要怎么理解呢?因为 Java 中子类继承自父类,子类是一种特殊的父类,所以简单粗暴地理解就是子类 is a 父类。具体到生活中的例子,比如人—>动物,这就是典型的一般—>特殊关系,人是一种动物这完全说得通,但是反过来说动物是一种人,这很显然就说不通了。

所以,不妨换个角度来理解,父类范围更大,而子类范围更小,也即父类指代的是更泛、更一般的概念,而子类则代表的是一种更特殊、更具体的特指。也就是说,这是完全符合一般—>特殊关系的。再比如猫头鹰是一种鸟,但不能反过来说鸟是一种猫头鹰,这很显然说不通,完全一样的道理。所以,我们可以得出这样的结论:

继承关系封装了这样一种逻辑:「XX是一种XX」,只要这种关系能说得通,就可以考虑用继承关系来封装它。

继承关系在 UML 类图中用 实线 + 实心箭头 表示。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值