• 【UML】类图Class Diagram


    1、面向对象

    面向对象分析:OOA(Object-Oriented Analysis)
    面向对象设计:OOD(Object-Oriented design)

    面向对象分析和面向对象设计的核心问题是怎么抽象对象。类图就是用来表示对象,可以表示对象的属性、行为以及对象之间的关系。

    Inheritance继承
    Composition组合
    Aggregation聚合
    Association关联
    Link(Solid)实线直连
    Dependency依赖
    Realization实现
    Link(Dashed)虚线直连
    classA
    classB
    classC
    classD
    classE
    classF
    classG
    classH
    classI
    classJ
    classK
    classL
    classM
    classN
    classO
    classP

    2、类之间的关系

    2.1 关联

    最简单关联关系如下图,类图之间是一条直线连接,也可以称为“直线”关系。在需求分析时,暂时不知道两个类之间是啥关系,就先画条直线,等对项目进一步了解后,再添加箭头、一对一或一对多的信心。

    classA
    classB

    “箭头”关系:classA可以找到classB,比如classA(a)的一个成员变量b是classB的引用,a.b

    Association关联
    classA
    classB

    2.2 包含

    包含关系分两种,弱包含和强包含,分别用空心的菱形和实心的菱形表示,菱形靠近主体这边。标准叫法是聚合(弱包含)和组合(强包含)。

    Composition组合
    Aggregation聚合
    classA主体
    classB子体
    classE主体
    classF子体

    “弱”体现在如果主体没有了,子体还能继续存在,比如人和衣钵,人没了,衣钵还能给别人。
    “强”体现在如果主体没有了,子体也不能存在了,比如人和器官,人没了,器官也就没了。
    如果处于医学的角度考虑到器官移植,那么人和器官也就成了“弱”包含的关系。
    一般画UML图时,先视为弱包含,等确定为强关系后,再将菱形涂黑即可。

    2.3 继承

    继承关系好理解,龙生龙凤生凤老鼠的孩子会打洞,都体现了继承关系。如下图,classB继承了classA,classB将具有classA的非私有的属性和方法。也可以反过来理解,classB抽象(泛化)为classA。

    Inheritance继承
    classA
    classB

    标准UML中,继承是空心的三角箭头,但是在Markdown中使用语法创建的继承图显示的是实心的三角箭头。

    2.4 依赖

    酒鬼依赖酒、烟民依赖烟,依赖关系使用虚线箭头表示。

    Dependency依赖
    酒鬼

    2.5 关联类

    当两个类的关键属性有相同的,并且无论单独放到某一个类中都不太合适,可以考虑使用关联类。即将某些属性抽象到关联类中。

    class1
    class2
    AssociationClass

    在这里插入图片描述

    2.6 实现

    类和对象的关系,可以使用下图表示,但是一般不使用。

    Realization实现
    对象

    3、博客中绘制UML

    参考网址:https://mermaid-js.github.io/mermaid/#/classDiagram

    3.1 语法:

    //```mermaid
    classDiagram
    classA --|> classB : Inheritance继承
    classC --* classD : Composition组合
    classE --o classF : Aggregation聚合
    classG --> classH : Association关联
    classI – classJ : Link(Solid)实线直连
    classK …> classL : Dependency依赖
    classM …|> classN : Realization实现
    classO … classP : Link(Dashed)虚线直连

    3.2 示例

    Cool
    Where am i?
    «interface»
    Class01
    int chimp
    int gorilla
    size()
    AveryLongClass
    Class09
    C2
    C3
    Class07
    Object[] elementData
    equals()
    Class10
    >>service>>
    int id
    size()
    Animal
    +int age
    +String gender
    +isMammal()
    +mate()
    Duck
    +String beakColor
    +swim()
    +quack()
    Fish
    -int sizeInFeet
    -canEat()
    Zebra
    +bool is_wild
    +run()
  • 相关阅读:
    删除的文件夹不在回收站中如何恢复呢?
    基于Vector Smart Logger的自动驾驶路试数据采集方案
    c++ opencv库 Mat 使用(未完)
    JavaEE进阶 - Spring MVC 程序开发 - 细节狂魔
    金仓数据库 KingbaseES 插件参考手册 (15. dbms_ddl)
    VSLAM视觉里程计总结
    What is a TCP SYN Flood DDoS Attack?
    Linux基础
    [Spring Cloud] Nacos 实战 + Aws云服务器
    Postgresql源码(116)提升子查询案例分析
  • 原文地址:https://blog.csdn.net/u010168781/article/details/127938138