zoukankan      html  css  js  c++  java
  • 【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 } 
  • 相关阅读:
    c#基础之Type
    .Net IOC框架入门之三 Autofac
    EF的三种数据加载方式
    EntityFramework扩展之第三方类库
    EF Codefirst入门之创建数据库
    EasyUI combotree的使用
    MacOS 安装 gdb 踩过的坑
    enex 转 md 格式的几种方式(免费版/氪金版)
    C++ 标准库之 iomanip 、操作符 ios::fixed 以及 setprecision 使用的惨痛教训经验总结
    python list 中 remove 的骚操作/易错点
  • 原文地址:https://www.cnblogs.com/yadiel-cc/p/11072776.html
Copyright © 2011-2022 走看看