• UML系列03之 UML类图(二)


    概要

    在"UML系列02之 UML类图(一) "中介绍了类图的基本构成--类的UML表示方法。本文是接着前文,继续对"UML的类图"中几种关系进行介绍。介绍的主要内容包括:
    UML类图的几种关系
    1. 泛化
    2. 实现
    3. 关联
      3.1 自关联
      3.2 单向关联
      3.3 双向关联
      3.4 多重性关联
      3.5 聚合
      3.6 组合
    4. 依赖

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3523209.html

    UML类图的几种关系

    在UML类图中,关系可以分为4种: 泛化, 实现, 关联依赖
    1. 泛化 -- 表示"类与类之间的继承关系"。
    2. 实现 -- 表示"类与接口之间的实现"。
    3. 关联 -- 表示"类与类之间的拥有关系"。即,一个类是另一个类的成员。关联又包括:自关联, 单向关联, 双向关联, 多重性关联, 组合, 聚合。
    4. 依赖 -- 表示"类与类之间的使用关系"。即,一个类是另一类的局部变量, 形式参数, 或者调用了静态方法/成员等。

    这几种关系表示的"类与类之间关系的强弱顺序"是:泛化 = 实现 > 关联 > 依赖

    1. 泛化(Generalization)

    [关系说明]: 泛化是一种继承关系。它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种。
    [代码说明]: 父类与子类。
    [UML图形]: 带三角箭头的实线,箭头指向父类。
    [示例]:  Fruit是"水果";Apple是"苹果",它继承了Fruit,是水果中的一种。
    UML示例图

    对应的Java代码

    public class Fruit {
        protected int price;
        public int getPrice() {
            return price;
        }
        public void setPrice() {
            return price;
        }
    }
    public class Apple extends Fruit {
    }

     

    2. 实现(Realization)

    [关系说明]: 实现是一种类与接口的关系,表示类是接口所有特征和行为的实现。
    [代码说明]: 实现类与接口。
    [UML图形]: 带三角箭头的虚线,箭头指向接口。
    [示例]: Runnable接口表示"一个任务",TimeTask是"计时任务",它实现了Runnable接口。
    UML示例图

    对应的Java代码

    public interface Runnable {
        abstract public void run();
    }
    public class TimeTask implements Runnable{
        @Override
        public void run() {
        }
    }

    3. 关联(Association)

    关联表示"类与类之间的拥有关系"。即,一个类是另一个类的成员。关联包括:自关联, 单向关联, 双向关联, 多重性关联, 聚合, 组合

    3.1 自关联

    [关系说明]: 一个类包含自己。例如,单向链表中的节点,包含下一个节点的信息。
    [代码说明]: 成员变量
    [UML图形]: 带普通箭头的实心线,指向被自己。
    [示例]: Node是单向链表中的节点,它包含下一个节点的指针。
    UML示例图

    对应的Java代码

    public class Node {
        private Node node;
    }

    3.2 单向关联

    [关系说明]: "类A"中有"类B"成员变量,"类B"中没有"类A"成员变量。
    [代码说明]: 成员变量
    [UML图形]: 带普通单向箭头的实心线,指向被拥有者。
    [示例]: Person表示"人",IdCard表示"身份证信息",身份证包括id和"身份证编号snum"。一个人拥有唯一的身份证信息。
    UML示例图

    对应的Java代码

    public class Person {
        private IdCard idcard;
    }
    public class IdCard {
        private int id;
        private String snum;
    }

    3.3 双向关联

    [关系说明]: "类A"中有"类B"成员变量,"类B"也有"类A"成员变量。
    [代码说明]: 成员变量
    [UML图形]: 带普通双向箭头的实心线 或者 不带箭头的实心线。
    [示例]:  Cusomer表示"客户",Product表示"产品"。客户可以购买产品,产品也属于客户。
    UML示例图

    对应的Java代码

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

    3.4 多重性关联

    [关系说明]: 多重性关联是两个类之间在关联对象上的数量关系。有如下几种:
    ┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃ 表示方法     ┃ 多重性关联说明                                                                                                    ┃
    ┣━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
    ┃ 1..1             │ 表示另一个类的一个对象只与该类的一个对象有关系                                            ┃
    ┠────────┼──────────────────────────────────────────────────┨
    ┃ 0..*              │ 表示另一个类的一个对象与该类的零个或多个对象有关系                                    ┃
    ┠────────┼──────────────────────────────────────────────────┨
    ┃ 1..*              │ 表示另一个类的一个对象与该类的一个或多个对象有关系                                    ┃
    ┠────────┼──────────────────────────────────────────────────┨
    ┃ 0..1             │ 表示另一个类的一个对象没有或只与该类的一个对象有关系                                 ┃
    ┠────────┼──────────────────────────────────────────────────┨
    ┃ m..n            │ 表示另一个类的一个对象与该类最少m,最多n个对象有关系(m≤n)                      ┃
    ┗━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

    [代码说明]: 成员变量
    [UML图形]: 实心线表示,单向关联则包括箭头,双向关联包括"两个箭头"或"不包含任何箭头"。
    [示例]:  Album是"相册",Picture是"图片",相册有N(N>=0)张图片。
    UML示例图

    对应的Java代码

    public class Album {
        private Picture[] pics;
    }
    public class Picture {
    }

    3.5 聚合

    [关系说明]: 聚合是整体与部分的关系。聚合关系是类与类之间关系比较密切的关联关系;要区分聚合和其它的关联关系,必须考察具体的逻辑关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。如车和轮胎是整体和部分的关系。
    [代码说明]: 成员变量
    [UML图形]: 带空心菱形的实心线,菱形指向整体
    [示例]:  Car表示"汽车",Tire表示"轮胎"。"轮胎"本身是个独立个体。
    UML示例图

    对应的Java代码

    public class Company {
        private Nose nose;
    
        private class Nose {
        }
    }

    3.6 组合

    [关系说明]: 组合是整体与部分的关系。组合关系是比聚合关系还要强的关联关系。但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。例如,身体和鼻子,身体包括鼻子,鼻子不能脱离身体而独立存在。
    [代码说明]: 成员变量
    [UML图形]: 带实心菱形的实线,菱形指向整体
    [示例]: Body表示"身体",Nose表示"鼻子"。身体包含鼻子,鼻子离不开身体。
    UML示例图

    对应的Java代码

    public class Company {
        private Nose nose;
    
        private class Nose {
        }
    }

    4. 依赖(Dependency)

    [关系说明]: 依赖是一种使用的关系。在需要表示一个事物使用另一个事物时使用依赖关系,尽量不使用双向的互相依赖。
    [代码说明]: 局部变量、方法的参数或者对静态方法的调用
    [UML图形]: 带箭头的虚线,指向被使用者
    [示例]:  人过河。人是"Person"类,它包括过河函数acrossRiver(),acrossRiver()的参数是过河工具,返回值是过河时间。此处的过河工具是船,船对应的类是Boat。
    UML示例图

    对应的Java代码

    public class Person {
        public int acrossRiver(Boat boat);
    }
    public class Boat {
    }



    更多内容

    1. UML系列01之 UML和绘图工具Visio介绍

    2. UML系列02之 UML类图(一) 

  • 相关阅读:
    【python cookbook】找出序列中出现次数最多的元素
    2018/1/21 Netty通过解码处理器和编码处理器来发送接收POJO,Zookeeper深入学习
    读《风雨20年》小感
    两个知识点的回顾(const指针和动态链接库函数dlopen)
    小试牛刀
    chmod,chown和chgrp的区别
    node.js中使用node-schedule实现定时任务
    在 Node.js 上调用 WCF Web 服务
    nodejs发起HTTPS请求并获取数据
    openstack 之~云计算介绍
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3523209.html
Copyright © 2020-2023  润新知