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实现)
相关推荐
FreeLikeTheWind.1 天前
UML概述、类图关系及连接线表示
uml
傻傻虎虎4 天前
【真题笔记】21年系统架构设计师案例理论点总结
单例模式·系统架构·uml·命令模式
D@.5 天前
初学者指南:用例图——开启您的软件工程之旅
uml·贴图·用例图
rolt7 天前
长得像用例图的类图-《软件方法》8.2.3.4
软件工程·uml·面向对象
成工小白8 天前
【UML】- 用例图(结合银行案例解释其中的奥义)
uml·用例图
ftswsfb8 天前
【系统架构设计师】六、UML建模与架构文档化
系统架构·uml
rolt12 天前
[pdf,epub]105页《分析模式》漫谈合集01
ddd·架构师·uml·领域驱动设计·分析模式
奶味少女酱~17 天前
uml类图
uml
犬余18 天前
UML之用例图详解
笔记·学习·uml