[C++][类图初识]详细讲解


1. 类的基本结构

  • 每个类在图中通常表示为一个矩形,矩形通常分为三个部分:
    • 类名:显示在矩形的顶部
    • 属性(成员变量):显示在中间部分,代表类的内部数据
    • 方法(成员函数):显示在底部,表示该类能执行的操作或行为
  • 示例
    +-----------------+
    |   ClassName     |  ← 类名
    +-----------------+
    |  - attribute1   |  ← 属性 (带符号表示可见性)
    |  - attribute2   |
    +-----------------+
    |  + method1()    |  ← 方法 (带符号表示可见性)
    |  + method2()    |
    +-----------------+
    
  • 符号含义
    • +:表示公共(public),该成员可以被任何类访问
    • -:表示私有(private),该成员只能被类本身访问
    • #:表示保护(protected),该成员只能被该类和其子类访问

2. 类之间的关系

1.继承(Inheritance)/泛化(Generalization)

  • 符号:实心三角箭头
  • 含义:子类继承父类的属性和方法
  • 用途:表示is-a关系,即“是某类对象
  • 例子:子类继承父类的特性,如 Car 继承 Vehicle
    +------------------+            +------------------+
    |     Vehicle      |◄-----------|       Car        |
    +------------------+            +------------------+
    

2.实现(Implementation)

  • 符号:虚线三角箭头
  • 含义:表示一个类实现一个接口的关系
  • 用途:表示类承诺提供接口定义的方法
  • 例子Dog 实现 AnimalBehavior 接口
    +------------------------+          +----------------+
    |    AnimalBehavior      |◄--------o|      Dog       |
    +------------------------+          +----------------+
    

3.关联(Association)

  • 符号:普通的箭头线
  • 含义:表示一个类知道另一个类的存在,通常是通过属性实现的
  • 用途;表示has-a关系,即“拥有
  • 例子PersonAddress 之间的关联,Person 拥有一个 Address 实例
    +--------------+   ----->   +--------------+
    |   Person     |            |   Address    |
    +--------------+            +--------------+
    

4.聚合(Aggregation)

  • 符号:空心菱形加箭头
  • 含义:弱的“拥有”关系,表示一个类可以包含多个对象,但这些对象的生命周期独立于容器类
  • 用途:表示组成关系,如“部分-整体”
  • 例子LibraryBook 之间的关系,图书馆有很多书籍,但书的生命周期独立于图书馆
    +-------------+    ◇------>  +-------------+
    |   Library   |              |    Book     |
    +-------------+              +-------------+
    

5.组合(Composition)

  • 符号:实心菱形加箭头
  • 含义:强的“拥有”关系,表示一个类包含的对象的生命周期依赖于容器类
  • 表示“整体-部分”的强依赖关系
  • 例子HouseRoom,房间属于房子,房子不存在房间也不复存在
    +-------------+    ◆------>  +-------------+
    |    House    |              |    Room     |
    +-------------+              +-------------+
    

6.依赖(Dependency)

  • 符号:虚线箭头
  • 含义:表示一个类依赖于另一个类的功能或存在,但这种依赖是临时的,往往在方法中传递对象时体现
  • 用途:表示某个类临时需要另一个类的帮助
  • 例子Driver依赖Car,因为Driver需要开车
    +--------------+    -------->   +--------------+
    |    Driver    |                |     Car      |
    +--------------+                +--------------+
    

3.关系的多重性(Multiplicity)

  • 类与类之间的关联、聚合和组合通常会附带多重性信息,用来描述类之间的数量关系

    • 1:一个实例
    • 0..1:零个或一个实例
    • *:多个实例
    • 1..*:至少一个实例
  • 例如PersonCar之间的多重性可以表示为一个人拥有多辆车:

    +--------------+     1 ------ *   +------------+
    |    Person    |                  |    Car     |
    +--------------+                  +------------+
    

4.分层次理解复杂的类图

  • 对于复杂的类图,建议逐步理解:
    • 先看类和继承关系:继承关系往往是系统设计的主干结构
    • 再看类之间的关联:查看关联类、聚合和组合等关系,理解类的交互
    • 最后关注细节:检查类的具体属性和方法
  • 示例:假如有以下类图
    • Vehicle是基类,Car是其子类,Car继承了Vehicle的所有属性和方法,同时也有自己的方法drive()
    • Person类与Address类存在关联,表示每个Person都有一个Address对象
    • 这类图清晰地描述了类之间的继承和关联关系,并定义了各自的属性和方法
      +------------------+            +-----------------+
      |     Vehicle      |◄-----------|       Car       |
      +------------------+            +-----------------+
      |  +maxSpeed()     |            |  +drive()       |
      +------------------+            +-----------------+
      
      +------------------+            +-----------------+
      |    Person        |----------->|    Address      |
      +------------------+            +-----------------+
      |  +getName()      |            |  +getStreet()   |
      +------------------+            +-----------------+
      
  • 总结
    • 先看类名、属性和方法
    • 分析类与类之间的关系:继承、实现、依赖、聚合、组合等
    • 注意符号、可见性、关联的多重性
    • 逐层解析复杂图,先抓住主干,再深入细节

5. 抽象类与接口

  • 抽象类类名斜体表示一个类是抽象类
    • 抽象类不能直接实例化,通常被继承
    • 抽象类中可能有抽象方法(没有实现的方法),子类需要提供具体实现
    • 例子
      +-------------------+
      | *AbstractVehicle* |   ← 斜体表示抽象类
      +-------------------+
      
  • 接口:通常用一个矩形框表示,包含一组方法定义,但不包含方法的实现
    • 接口用于定义行为的规范
    • 例子
      +---------------------+
      |  IVehicleBehavior   |   ← 接口类
      +---------------------+
      | +start(): void      |
      | +stop(): void       |
      +---------------------+
      

6. 静态成员

  • 在类图中,静态成员通常使用下划线表示
    • 这表示该属性或方法是属于类的,而不是某个特定对象的
    • 示例_totalCars是类Car的静态变量,所有Car实例共享这个变量。
      +----------------------+
      |   Car                |
      +----------------------+
      | _totalCars: int      |   ← 静态变量
      +----------------------+
      | _getTotalCars(): int |   ← 静态方法
      +----------------------+
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DieSnowK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值