UML类图关系

UML 类图中最常见的几种关系有:泛化(Generalization)、实现(Realization)、组合(Composition)、聚合(Aggregation)、关联(Association)和依赖(Dependency)。这些关系的强弱顺序为:泛化=实现 > 组合 > 聚合 > 关联 > 依赖。

泛化关系

泛化(Generalization)是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。

UML泛化(generalization)关系表示法为:空心三角形+实线。用mermaid表示为A <|-- B

例如:哺乳动物具有恒温、胎生、哺乳等生理特征,猫和牛都是哺乳动物,也都具有这些特征,但除此之外,猫会捉老鼠,牛会耕地。

classDiagram class MammalAnimal { +feature() } class Cat { +feature() +catchingMouse() } class Cattle { +feature() +farmland() } MammalAnimal <|-- Cat MammalAnimal <|-- Cattle

用Java语言表示为

java 复制代码
public class Cat extends MammalAnimal{
    ...
}
public class Cattle extends MammalAnimal{
    ...
}

实现关系

实现(realization)是一种类与接口的关系,表示类是接口所有特征和行为的实现。

UML实现(realization)关系表示法为:虚线+空心三角形。用mermaid表示为A..|>B(A实现了B)。

例如:蝙蝠也是哺乳动物,它除具有哺乳动物的一般特征之外,还会飞,我们可以定义一个IFlyable的接口,表示飞行的动作,而蝙蝠需要实现这个接口。

classDiagram class IFlyable{ <> +flying() } class Bat{ +flying() } IFlyable <|.. Bat

用Java语言表示为

java 复制代码
public interface IFlyable{
    void flying()
}
public class Bat implements IFlyable{
    @Override
    void flying(){
        ...
    }
}

组合关系

组合(composition)也表示整体与部分的关系,但部分离开整体后无法单独存在。因此,组合与聚合相比是一种更强的关系。

UML组合(composition)关系表示法为:实心菱形+实线。用mermaid表示为:A *--B(B是A的一部分)。

例如:我们的电脑由CPU、主板、硬盘、内存组成,电脑与CPU、主板、硬盘、内存是整体与部分的关系,但如果让CPU、主板等组件单独存在,就无法工作,因此没有意义。

classDiagram class Computer{ } class CPU{ } class Mainboard{ } class HardDisk{ } class MemeryCard{ } Computer *-- CPU Computer *-- Mainboard Computer *-- HardDisk Computer *-- MemeryCard

用Java语言表示为

java 复制代码
public class Computer{
    private Cpu cpu;
    private Mainboard mainboard;
    private HardDisk hardDisk;
    private Memery memery;
    
    public Computer(){
        cpu=new Cpu();
        mainboard=new Mainboard();
        hardDisk=new HardDisk();
        memery=new Memery();
    }
}

Computer类在实例化之前一定要先实例化其他部分。

聚合关系

聚合关系表示一种弱的拥有关系,即A对象可以拥有B对象,但B对象不是A对象的一部分。

聚合(aggregation)关系的UML表示法为:空心菱形+实线箭头。用mermaid表示为A o--> B

从逻辑上来说,停车场中有汽车,但汽车并不是停车场的一部分。汽车和停车场之间没有部分和整体之间的关系。

classDiagram class Parking { -ParkingSpacesNum -ExportsNum +Open() +Close() } class Car { -Engine +Run() -Stop() } Parking "1" o--> "*" Car

用Java语言表示为

java 复制代码
public class Parking{
    private List<Car> carList;
    
    public Parking(){
    
    }
}

Parking可先实例化,carList可有可无。

关联关系

实体之间的一个结构化关系表明对象之间是相互连接的。箭头可选,没有箭头则表示双向的关联关系,单箭头表示单向的关联关系。

UML关联(association)关系表示法为:实线+箭头。用mermaid表示为A --> B

例如:Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。

classDiagram Employee "1" --> "0..*" TimeCard

用Java语言表示

java 复制代码
public class Employee{
    private TimeCard _tc;
    public void maintainTimeCard(){
        ...
    }
}

依赖关系

对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖于另一个对象的服务时,这两个对象之间主要体现为依赖关系。依赖关系具体表现在局部变量、方法的参数,以及对静态方法的调用上。

UML依赖(dependency)关系表示法为:虚线+箭头。用mermaid表示为A ..> B(A依赖于B)。

例如:动物有几大特征,如新陈代谢、繁殖、有生命。而动物要有生命力,就需要氧气、水及食物,也就是说,动物依赖于氧气和水。

classDiagram Animal ..> Water Animal ..> Oxygen

用Java语言表示为

java 复制代码
public abstract class Animal{
    public String Metabolism(Oxygen oxygen, Water water){
        ...
    }
}

参考资料

  • mermaid语法之类图
  • Java面向对象程序设计(第3版)
  • 人人都懂设计模式:从生活中领悟设计模式(Python实现)
相关推荐
巽星石3 天前
PlantUML中的实体关系图
uml·plantuml·er图
rolt11 天前
[图解]静态关系和动态关系
uml·面向对象
边城仔13 天前
【设计模式】UML类图
设计模式·uml
J老熊22 天前
Java设计模式之责任链模式详细讲解和案例示范
java·设计模式·面试·系统架构·责任链模式·uml
吕永强1 个月前
面向对象需求分析
需求分析·uml·类图·用例图·顺序图·状态图·活动图
Tacy02131 个月前
UML概述
uml
茜茜西西CeCe1 个月前
软件工程知识点总结(2):需求分析(一)——用例建模
软件工程·需求分析·uml·用例图·活动图·用例建模·ooa
J老熊1 个月前
Java设计模式之建造者模式详细讲解和案例示范
java·设计模式·面试·系统架构·建造者模式·uml
General_G1 个月前
UML之时序图
uml