什么是类图? (What is Class Diagram?)

在软件工程中,统一建模语言(UML)中的类图是一种静态结构图,它通过显示系统的类,它们的属性,操作(或方法)以及对象之间的关系来描述系统的结构。

 

 

UML图层次结构中的类图

类图的目的

  1. 显示系统中分类器的静态结构
  2. 该图提供了UML规定的其他结构图的基本表示法
  3. 对开发人员和其他团队成员也很有帮助
  4. 业务分析师可以使用类图来从业务角度对系统进行建模

UML类图由以下部分组成:

  • 一组课程和
  • 类之间的一组关系

什么是班级

系统中具有相似角色的一组对象的描述,包括:

  • 结构特征(属性)定义类的哪些对象“知道”
    • 表示类的对象的状态
    • 是对类的结构或静态特征的描述
  • 行为特征(操作)定义了类“可以做什么”的对象
    • 定义对象可以交互的方式
    • 操作是对类的行为或动态特征的描述

类符号

附加符号由三部分组成:

  1. 班级名称
    • 类的名称出现在第一个分区中。
  2. 类属性
    • 属性显示在第二个分区中。
    • 冒号后显示属性类型。
    • 属性映射到代码中的成员变量(数据成员)。
  3. 班级操作(方法)
    • 操作显示在第三个分区中。它们是班级提供的服务。
    • 方法的返回类型显示在方法签名末尾的冒号之后。
    • 方法参数的返回类型显示在参数名称后面的冒号之后。
    • 操作映射到代码中的类方法

简单的课程

类的图形表示 – MyClass如上所示:

  • MyClass有3个属性和3个操作
  • op2的参数p3的类型为int
  • op2返回一个浮点数
  • op3将一个指针(用*表示)返回给Class6

阶级关系

一个类可能涉及与其他类的一个或多个关系。关系可以是以下类型之一:(请参阅右侧的图以了解关系的图形表示)。

关系类型 图示
继承(或泛化):
  • 表示“is-a”关系。
  • 抽象类名称以斜体显示。
  • SubClass1和SubClass2是Super Class的特化。
  • 带有空心箭头的实线,指向从子类到父类
遗产
简单的协会
  • 两个对等类之间的结构链接。
  • Class1和Class2之间存在关联
  • 连接两个类的实线
简单的关联
聚合

一种特殊类型的关联。它代表了“一部分”关系。

  • Class2是Class1的一部分。
  • Class2的许多实例(用*表示)可以与Class1相关联。
  • Class1和Class2的对象具有不同的生命周期。
  • 在结合端连接到复合材料类的未填充金刚石的实线
聚合
组成

一种特殊类型的聚合,其中部件在整个销毁时被销毁。

  • Class2的对象与Class1一起生存和死亡。
  • Class2不能自立。
  • 在与复合类相关联的关联处的实心线
组成
依赖性
  • 如果对一个类的定义的更改可能导致另一个类的更改(但不是相反),则存在于两个类之间。
  • Class1取决于Class2
  • 带有空心箭头的虚线
依赖

关系名称

  • 关系名称写在关联线的中间。
  • 当你大声读出它们时,良好的关系名称是有意义的:
    • “每个电子表格都包含一些单元格”,
    • “表达式值为”
  • 它们通常有一个小箭头来显示读取关系的方向,例如,表达式评估为值,但值不会评估为表达式。

关系名称

关系 – 角色

  • 角色是关联的方向目的。
  • 角色写在关联线的末尾,并描述该关系中该类所起的作用。
    • 例如,单元格与表达式相关。关系的本质是表达式是细胞的公式

类属性和操作的可见性

在面向对象的设计中,存在对属性和操作的可见性的表示。UML标识了四种类型的可见性:publicprotectedprivatepackage

类中的属性和操作名称之前的+, – ,#和〜符号表示属性和操作的可见性。

  • +表示公共属性或操作
  • – 表示私有属性或操作
  • #表示受保护的属性或操作
  • 〜表示包属性或操作

类可见性示例

简单的类

在上面的例子中:

  • MyClassName的attribute1和op1是公共的
  • attribute3和op3受到保护。
  • attribute2和op2是私有的。

对于不同类的成员,下面显示了对这些可见性类型的访问权限。

访问权 公众(+) 私人的 (-) 受保护的(#) 套餐(〜)
同一班的成员
派生类的成员 没有
任何其他类的成员 没有 没有 在同一个包中

多重

每个班级有多少个对象参与关系,多重性可以表示为:

  • 完全是1 – 1
  • 零或一 – 0..1
  • 很多 – 0 .. *或*
  • 一个或多个 – 1 .. *
  • 确切数字 – 例如3..4或6
  • 或者复杂的关系 – 例如0..1,3..4,6 * *表示除2或5之外的任何数量的对象

多重性示例

  • 要求:学生可以参加许多课程,许多学生可以参加一门课程。
  • 在下面的示例中,类图(左侧)描述了静态模型的上述要求声明,而对象图(右侧)显示了课程注册的快照(类图的实例)分别是软件工程和数据库管理课程)

对象图

聚合示例 – 计算机和部件

  • 聚合是表示“包含”层次结构的关联的特殊情况
  • 聚合是父类,组件是子类

聚合示例

继承示例 – 单元分类

  • 继承是表示“种类”层次结构的关联的另一种特殊情况
  • 继承通过引入分类法简化了分析模型
  • 子类继承父类的属性和操作。

继承示例

类图 – 图工具示例

类图还可以附加到类或关系的注释。注释以灰色显示。

类图示例

在上面的例子中:

我们可以通过阅读以下几点来解释上述类图的含义。

  1. Shape是一个抽象类。它以斜体显示。
  2. Shape是一个超类。圆形,矩形和多边形源自Shape。换句话说,圆是一个形状。这是一种泛化/继承关系。
  3. DialogBox和DataController之间存在关联。
  4. 形状是Window的一部分。这是一种聚合关系。没有Window就可以存在形状。
  5. Point是Circle的一部分。这是一种构图关系。没有圆就不能存在点。
  6. 窗口取决于事件。但是,Event不依赖于Window。
  7. Circle的属性是半径和中心。这是一个实体类。
  8. Circle的方法名称是area(),circum(),setCenter()和setRadius()。
  9. Circle中的参数radius是float类型的参数。
  10. 类Circle的方法area()返回double类型的值。
  11. 隐藏Rectangle的属性和方法名称。图中的其他一些类也隐藏了它们的属性和方法名称。

处理复杂系统 – 多个或单个类图?

不可避免的是,如果您要对大型系统或大型业务区域进行建模,则必须考虑许多实体。我们应该使用多个或单个类图来建模问题吗?答案是:

  • 不是在单个类图上对每个实体及其关系进行建模,而是使用多个类图更好。
  • 将系统划分为多个类图使系统更易于理解,特别是如果每​​个图是系统特定部分的图形表示。

软件开发生命周期中类图的透视

我们可以在软件开发生命周期的不同开发阶段使用类图,并且通常在我们前进的过程中逐步建模三个不同视角(细节层次)的类图:

概念视角:图表被解释为描述现实世界中的事物。因此,如果您从概念角度出发,则绘制一个代表所研究领域中的概念的图表。这些概念自然会与实现它们的类相关。概念视角被认为与语言无关

规范透视图:图表被解释为描述具有规范和接口的软件抽象或组件,但不承诺特定实现。因此,如果您从规范角度来看,我们正在研究软件的接口而不是实现。

实现视角:图表被解释为描述特定技术和语言的软件实现。因此,如果您从实现的角度来看,我们正在研究软件实现

尝试现在绘制UML类图

您已经了解了类图是什么以及如何绘制类图。是时候绘制一个自己的类图。获取Visual Paradigm Community Edition,一个免费的UML软件,并使用免费的Class Diagram工具创建自己的类图。它易于使用且直观。

免费下载

Visual Paradigm Online