UML如何描述类之间的关系(一)

作者:Balan

UML(The Unified Modeling Language )就是统一建模语言,不论它是怎么发展来的,也不论最新的官方Specification或工业标准是哪个版本,我想总结一下工作中最常用的一些知识:用UML语言描述类的关系。

1,关联关系(Association)

关联关系是类(也可以说是对象)之间特定的对应关系。按照对象的数量对比,可以分为:

A 一对一

image  

比如公民和公民身份卡之间的对应关系。

B 一对多

image

一个部门对应0或者多位员工,一般而言一位员工只能属于某一个部门。

C 多对多

image

用户和服务是多对多的关系,一个用户可以注册0个或多个服务,一个服务则可以被0个或者多个用户复用。比如Windows Live用户可以激活邮件服务、Space服务等,而这些服务不是被一个用户所专有的。

关联的实质

从A类型到B类型的关联是指在A类型中定义了B类型作为属性。如下列代码:

package uml;

public class Citizen {
    private CitizenshipCard card;

   //其他属性

    public CitizenshipCard getCard() {
        return card;
    }

    public void setCard(CitizenshipCard card) {
        this.card = card;
    }

}

上述代码演示了从Citizen 到 CitizenshipCard 的关联。注意下图箭头方向:

image

同样可以建立CitizenshipCard 到 Citizen 的关联:

image

代码表示为:

package uml;

public class CitizenshipCard {
    private Citizen citizen;

    //其他属性

    public Citizen getCitizen() {
        return citizen;
    }

    public void setCitizen(Citizen citizen) {
        this.citizen = citizen;
    }

}

如果仅仅建立从Citizen 到 CitizenshipCard 的关联或者仅仅建立CitizenshipCard 到 Citizen 的关联,都属于单向关联 ,如果两个方向的关联都建立,就是双向关联

image

是否建立双向关联要在实际项目中酌情而定。再看个双向关联的例子:

image

Department  -----------------------------------------------------------------

package uml;

import java.util.Set;

public class Department {
    private String name;
    private Set<Employee> employees;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(Set<Employee> employees) {
        this.employees = employees;
    }

}

Employee --------------------------------------------------------------------

package uml;

public class Employee {
    private String name;
    private long joinTime;
    private Department department;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getJoinTime() {
        return joinTime;
    }

    public void setJoinTime(long joinTime) {
        this.joinTime = joinTime;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值