UML类图(泛化、实现、依赖、关联、聚合、组合)

类之间的关系主要由泛化、实现、依赖、关联、聚合、组合。下面重点对后面几种关系进行描述。

1. 泛化(Generalization)

泛化表示一般和特殊的关系。在Java语言中,它代表父类和子类的关系。

  • 伪代码:
class Animal {}

class Bird extends Animal {}

在UML中,使用空心的三角形表示。
在这里插入图片描述
上面类图中,动物和小鸟是一般和特殊关系。

2. 实现(Realization)

实现表示类和接口的关系。

  • 伪代码:
interface Eraser {
    void remove();
}

class Pencil implements Eraser {
    public void remove() {
        System.out.println("铅笔橡皮擦...");
    }
}

在UML中,实现关系使用带虚线的空心三角形表示。
在这里插入图片描述
上面Eraser接口和Pencil类是一种实现关系。Java中实现某个接口,说明该类具有了该接口中的所有能力。

3. 依赖(Dependency)

依赖关系表示的是一种使用关系,比如说读书。

  • 伪代码:
public Student {
    String name;
    
    public void read(Book book) {
        System.out.println(this.name + "坐在马桶上读" + book.getTitle());
    }
}

在UML中,依赖关系使用带虚线的箭头表示。
在这里插入图片描述
上面学生类的read方法所在的Student类依赖了Book类。

通常类的方法通过参数、返回值、局部变量引用被依赖的类。

4. 关联(Association)

关联关系是一种拥有的关系,比如说小明有一只猫。在实际业务场景中,比如说A类应用了一个全局变量XxxProperties,那么A类就关联了XxxProperties类。

  • 伪代码:
class A {
    XxxProperties xxxProperties;

    public void test() {
        String val = xxxProperties.getSomething();
        ...
    }
}

在UML中,关联关系使用箭头表示。
在这里插入图片描述
关联关系有两个比较特殊的情况:聚合和组合,它们都是代表整体和部分的关联关系。如果从业务上区分,聚合是将一个大的业务拆分成许多不同的小业务;组合是将一个业务划分为不同步骤一起完成。如果从被关联实例的生命周期上区分,聚合关系中的整体和部分是互相独立的,即使关联实例不存在,被关联实例也不会受影响;组合关系中的部分是依赖整体而存在的,如果关联实例不存在了,那么被关联的实例也随之消失。

5. 聚合(Aggregation)

聚合关系是关联关系的一种情况。它代表的是整体和部分的关系。具体到实际业务场景的话,一个大的业务可能由许多小的业务组成。比如说通用支付业务,它包含了微信支付、支付宝支付、银联支付等。这里的通用支付就聚合了各种不同的支付渠道。

  • 伪代码:
class GeneralPayService {
   WxPayService wxPayService;
   AliPayService aliPayService;
   UnionPayService unionPayService;
   
   public String pay(String payType) {
       if ("wx".equals(payType)) {
          wxPayService.pay();
       } else if ("ali".equals(payType)) {
          alipayService.pay();
       } else if ("union".equals(payType)) {
          unionPayService.pay();
       }
       ...
   }
}

在UML中,聚合关系是使用空心的菱形来表示。
在这里插入图片描述

6. 组合(Composition)

组合关系也是关联关系的一种情况。具体到实际业务场景的话,一个大的业务可能由一系列的步骤来完成。比如说购票业务,它是由查票、下单、支付步骤等一系列步骤来完成,那么它们之间的关系就是聚合关系。

  • 伪代码:
class BuyTicketBusiness {
   TicketService ticketService;
   OrderService orderService;
   PayService payService;
   
   public String buyTicket(String ticketId) {
   	// 第一步:查票
   	Ticket ticket = ticketService.queryTicketById(ticketId);
   	// 第二步:创建订单
   	String orderNo = orderService.createOrder(ticket);
   	// 第三步:支付
   	String result = payService.pay(orderNo);
        ...
   }
}

在UML中,组合关系使用实心菱形来表示。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值