JavaSE类与类的关系--UML

Posted yadiel-cc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE类与类的关系--UML相关的知识,希望对你有一定的参考价值。

类(对象/接口)之间的关系 -- UML类图展现


2019-07-14  14:37:19  by冲冲

 

在面向对象程序设计时,类与类之间的关系主要分为:继承,实现,依赖,关联,聚合,组合等6种关系。

各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚集 > 关联 > 依赖 其中前两种理解很简单,重点是比较容易混淆的后四种。

技术图片

 

1. 继承 -- "a is kind of A"

继承(Generalization):亦称泛化,表示一般与特殊的关系。继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加自己的新功能。

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

技术图片                               技术图片

1 class Athlete ...
2 class BallAthlete extends Athlete ...
3 class FootBallAthlete extends BallAthlete ...
4 
5 interface Action ...
6 interface Speak extends Action ...

 

2. 实现 -- "A realize Ia,Ib..."

实现(realization):指的是一个class类实现interface接口(可以是多个)的功能。

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

 技术图片

1 interface Speak ...
2 interface Run ...
3 interface Jump ...
4 
5 class Athlete implements Speak,Run,Jump ....

 

3. 依赖 -- "A use B"

依赖(dependency):指的是类A调用类B。类B的变化会影响到类A,但是类A的变化不会影响到类B。表示一种使用关系,一个类的功能实现需要另一个类协助。

【代码表现】类B是类A的局部变量、类B是类A的方法参数、类A调用类B的静态方法。

【特点】依赖关系具有偶然性,临时性,是比较弱的关系。

【例子】比如,我要过河,需要调用一只船,我和船的关系就是依赖关系。

【箭头指向】带箭头>的虚线,箭头指向被使用者。

技术图片

1 class Ball ...
2 
3 class BallAthlete 
4   public void sport(Ball ball)...
5 

 

4. 关联 -- "A has B"

关联(association):指的是类B作为类A的类属性/成员变量。表示一种拥有关系,一个类知道另一个类的属性和方法。

【代码表现】类B是类A的类属性/成员变量。

【特点】关联关系属于强依赖关系,具有强烈性,长期性。

【箭头指向】带箭头>的实线,箭头指向被拥有者。

【多重性关联】关联的两端都存在一个基数,表示该关联类可以有几个实例。0..1表示可以有0或1个实例;0..*表示对实例的数目没有限制;1表示只能有一个实例;1..*表示至少有一个实例。

①单向关联--使用单箭头

技术图片

1 public class BallAthlete 
2     private Price price;
3     ......
4 
5 
6 public class Price 
7     ......
8 

②双向关联--使用双箭头或者不使用箭头 

   技术图片

1 public class Teacher 
2     private Student students[];
3     ......
4 
5 
6 public class Student 
7     private Teacher teachers[];
8     ......
9 

③自身关联--使用单箭头,构成自回路

特点:类的属性对象类型为该类本身。

技术图片

1 public class Node 
2     private Node subNode;
3     ……
4 

 

5. 聚合 -- "A has B"

聚合(Aggregation):表示整体与部分的关系,部分可以离开整体单独存在。

【代码表现】类B是类A的类属性/成员变量。

【特点】聚合关系属于关联关系的一种,但是比关联关系更强。语法上无法区分聚合关系和关联关系,必须根据具体逻辑区分。

【例子】车和车轮是整体与部分的关系,但是车轮离开车还是可以独立存在的。

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

技术图片

 1 public class Car 
 2     private Engine engine;
 3 
 4     //构造注入
 5     public Car(Engine engine) 
 6         this.engine = engine;
 7     
 8     
 9     //设值注入
10     public void setEngine(Engine engine) 
11         this.engine = engine;
12     
13     ……
14 
15 
16 public class Engine 
17     ……
18  

 

6. 组合 -- "A contains B"

组合(Composition):表示整体与部分的关系,部分不能离开整体单独存在。

【代码表现】类B是类A的类属性/成员变量。

【特点】组合关系属于关联关系的一种,但是比聚合关系更强。它要求普通的聚合关系中代表整体的对象,负责代表部分的对象的生命周期。

【例子】公司和部门是整体和部分的关系,但是没有公司,部门也就不存在。

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

技术图片

 1 public class Head 
 2     private Mouth mouth;
 3     public Head() 
 4         mouth = new Mouth(); //实例化成员类
 5     
 6     ……
 7 
 8 
 9 public class Mouth 
10     ……
11  

 

以上是关于JavaSE类与类的关系--UML的主要内容,如果未能解决你的问题,请参考以下文章

python 面向对象专题:类的空间问题类与对象之间的关系类与类之间的关系

Python进阶编程 类与类的关系

python类与类的关系

UML描述面向对象程序设计中类与类的关系

类与类的关系

类与类的继承关系