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

DieSnowK 2024-10-18 15:05:01 阅读 61

目录

1. 类的基本结构2. 类之间的关系1.继承(Inheritance)/泛化(Generalization)2.实现(Implementation)3.关联(Association)4.聚合(Aggregation)5.组合(Composition)6.依赖(Dependency)

3.关系的多重性(Multiplicity)4.分层次理解复杂的类图5. 抽象类与接口6. **静态成员**


1. 类的基本结构

每个类在图中通常表示为一个矩形,矩形通常分为三个部分:

类名:显示在矩形的顶部属性(成员变量):显示在中间部分,代表类的内部数据方法(成员函数):显示在底部,表示该类能执行的操作或行为 示例

<code>+-----------------+code>

| 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 | ← 静态方法

+----------------------+



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。