[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
关系,即“拥有”例子:Person
与 Address
之间的关联,Person
拥有一个 Address
实例
+--------------+ -----> +--------------+
| Person | | Address |
+--------------+ +--------------+
4.聚合(Aggregation)
符号:空心菱形加箭头含义:弱的“拥有”关系,表示一个类可以包含多个对象,但这些对象的生命周期独立于容器类用途:表示组成关系,如“部分-整体”例子:Library
和 Book
之间的关系,图书馆有很多书籍,但书的生命周期独立于图书馆
+-------------+ ◇------> +-------------+
| Library | | Book |
+-------------+ +-------------+
5.组合(Composition)
符号:实心菱形加箭头含义:强的“拥有”关系,表示一个类包含的对象的生命周期依赖于容器类表示“整体-部分”的强依赖关系例子:House
和 Room
,房间属于房子,房子不存在房间也不复存在
+-------------+ ◆------> +-------------+
| House | | Room |
+-------------+ +-------------+
6.依赖(Dependency)
符号:虚线箭头含义:表示一个类依赖于另一个类的功能或存在,但这种依赖是临时的,往往在方法中传递对象时体现用途:表示某个类临时需要另一个类的帮助例子:Driver
依赖Car
,因为Driver
需要开车
+--------------+ --------> +--------------+
| Driver | | Car |
+--------------+ +--------------+
3.关系的多重性(Multiplicity)
类与类之间的关联、聚合和组合通常会附带多重性信息,用来描述类之间的数量关系
1
:一个实例0..1
:零个或一个实例*
:多个实例1..*
:至少一个实例
例如:Person
和Car
之间的多重性可以表示为一个人拥有多辆车:
+--------------+ 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 | ← 静态方法
+----------------------+
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。