当前位置:首页 » 《关于电脑》 » 正文

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

19 人参与  2024年10月08日 12:03  分类 : 《关于电脑》  评论

点击全文阅读


目录

1. 类的基本结构2. 类之间的关系1.继承(Inheritance)/泛化(Generalization)2.实现(Implementation)3.关联(Association)4.聚合(Aggregation)5.组合(Composition)6.依赖(Dependency) 3.关系的多重性(Multiplicity)4.分层次理解复杂的类图5. 抽象类与接口6. **静态成员**


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

点击全文阅读


本文链接:http://zhangshiyu.com/post/168937.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1