UML边看边记 之 类与类之间的关系(二)

类和类之间的关系是多样的,在UML中使用不同的形式来表示。常见的类与类之间的关系包括:关联关系依赖关系泛化关系即继承关系)、接口与实现关系

1.关联关系

关联关系通常用来表示一种包含(contains)或者有(has)的关系。contains与has的区别,我的理解是一种表达关联强弱的一种区别。contains表示两个类可以独立存在,也可以某一个类包含(使用)另一个类(的功能);而has表示一个类不可以独立于另一个而存在。
关联关系在实现时的表现通常是:B类作为A类的属性存在。
如:在一个登陆界面中有一个登陆按钮,其UML图示如下:
这里写图片描述
实现代码如下:

public class LoginForm {
private JButton loginButton; //定义为成员变量
……
}
public class JButton {
    ……
}

关联关系又包含如下几种:

(1)双向关联:

顾客购买并拥有商品、卖出的商品总是与某个顾客相关联。
这里写图片描述
注意上图中的”purchases”和”is sold to”靠近谁就表示谁。
实现代码如下:
public class Customer {
private Product[] products;
……
}
public class Product {
private Customer customer;
……
}

(2)单向关联

单向关联用带箭头的实线表示。如顾客拥有地址:
这里写图片描述
代码实现:

public class Customer {
private Address address;
……
}
public class Address {
……
}

(3)自关联

如链表中的节点与next的关系:
这里写图片描述
代码实现如下:

public class Node {
private Node subNode;
……
}

(4)多重关联

上面中的双向关联、单向关联、自关联都没有说明类与类之间关联的数量上的问题。这个多重关联就是用来说明两个关联对象在数量上的对应关系。
这里写图片描述
如:一个界面可以有0个或多个button,但是一个button只能在一个界面上。
这里写图片描述
注意上面的”1…1”与”0…*”靠近谁就表示谁。还要注意箭头。箭头指向者用来表示被拥有者。
代码实现如下:

public class Form {
private Button[] buttons; //定义一个集合对象
……
}
public class Button {
……
}

下面的聚合关系和组合关系都表示整体与部分的关系。其中聚合关系表示弱整体与部分的关系,组合强整体与部分的关系。其实也就是contains与has的关系。

(5)聚合关系

整体与部分可以独立存在。如汽车(car)与发动机(engine)的关系。通常用空心的菱形表示
这里写图片描述
在代码实现时,对象通常作为构造方法、setter方法、业务方法的参数注入整体对象中。如:

public class Car {
    private Engine engine;
    //构造注入
    public Car(Engine engine) {
        this.engine = engine;
    }

    //设值注入
public void setEngine(Engine engine) {
    this.engine = engine;
}
……
}
public class Engine {
    ……
}

(6)组合关系

部分只能依赖于整体存在,不可单独存在。在UML中,组合关系用实心菱形表示。Mouth只能依赖于Head而存在,Head没有了,Mouth自然也就消失了。
这里写图片描述
在代码实现时,对象通常在整体的构造方法中被new出来。如:

public class Head {
    private Mouth mouth;
    public Head() {
        mouth = new Mouth(); //实例化成员类
    }
……
}
public class Mouth {
    ……
}

注意,上面的对象总是作为另一个类的属性存在

UML边看边记 之 类与类之间的关系(三)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值