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实现)
相关推荐
LDtPLYZgoAu10 小时前
在LABVIEW中调用Bartender API子程序:探索自动化标签打印新旅程
uml
Warren2Lynch2 天前
利用 AI 协作优化软件更新逻辑:构建清晰的 UML 顺序图指南
人工智能·uml
rolt6 天前
软件需求设计方法学全程实例剖析幻灯片04-系统用例图和用例规约[202601更新]
产品经理·需求分析·uml
workflower9 天前
和测试角色相关的问题
软件工程·软件构建·开源软件·uml·软件需求
rolt11 天前
软件需求设计方法学全程实例剖析幻灯片02-愿景[202512更新]
产品经理·需求分析·架构师·uml
rolt11 天前
软件需求设计方法学全程实例剖析幻灯片03-业务用例图和业务序列图[202601更新]
产品经理·需求分析·uml
Warren2Lynch11 天前
如何使用Visual Paradigm AI Chatbot创建3D打印机UML状态机图:综合指南
人工智能·uml
AM越.11 天前
Java设计模式超详解--代理设计模式(含uml图)
java·设计模式·uml
攀登的牵牛花11 天前
前端向架构突围系列 - 架构方法(二):UML前端建模的一般方法和工具
前端·前端框架·uml
Ljubim.te12 天前
软考之事物关系及图类题作答
uml