zoukankan      html  css  js  c++  java
  • 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;
        }

    }

  • 相关阅读:
    C#时间差
    centos8安装ffmpeg
    CentOS8同步时间
    安装Supervisor
    ajax 传递 token
    .net core 3.1 中 的跨域设置
    jaeger 本地编译
    Kubernates 环境搭建
    linux : find
    Linux: 文件分割和合并
  • 原文地址:https://www.cnblogs.com/chenzhao/p/2654224.html
Copyright © 2011-2022 走看看