文章

UML类图与面向对象编程

UML类图与面向对象编程

本文介绍 UML 类图与面向对象编程。

UML类图与面向对象编程

1 概念

面向对象程序设计(Object-Oriented Programming, 缩写为OOP)是一种范式,其基本理念是将数据块及与数据相关的行为封装成为特殊的、名为对象的实体,同时对象实体的生成工作则是基于程序员给出的一系列“蓝图”,这些“蓝图”就是

2 UML

2.1 表示

具体类在类图中用矩形框表示,矩形框分为三层:

  • 第一层是类名字
  • 第二层是类的成员变量
  • 第三层是类的方法

成员变量以及方法前的访问修饰符用符号来表示:

  • +表示public
  • -表示private
  • #表示protected
  • 不带符号表示default

2.2 关系

  • 依赖:对类 B 进行修改会影响到类 A 。
  • 关联:对象 A 知道对象 B。类 A 依赖于类 B。
  • 聚合:对象 A 知道对象 B 且由 B 构成。类 A 依赖于类 B。
  • 组合:对象 A 知道对象 B、由 B 构成而且管理着 B 的生命周期。类 A 依赖于类 B。
  • 实现:类 A 定义的方法由接口 B 声明。对象 A 可被视为对象B。类 A 依赖于类 B。
  • 继承:类 A 继承类 B 的接口和实现,但是可以对其进行扩展。对象 A 可被视为对象 B。类 A 依赖于类 B。

3 面向对象编程

3.1 抽象

抽象是一种反映真实世界对象或现象中特定内容的模型,它能高精度地反映所有与特定内容相关的详细信息,同时忽略其他内容。

例如,飞行模拟器和航班预订程序中都可能会包含一个飞机(Airplane 类)。但是前者需包含与实际飞行相关的详细信息,而后者则只关心座位图和哪些座位可供预订。

3.2 封装

封装是指一个对象对其他对象隐藏其部分状态和行为,而仅向程序其他部分暴露有限的接口的能力。

假如你的航空运输(FlyingTransport)接口中有一个 fly(origin, destination, passengers) 方法(即以起点、终点以及乘客为参数的飞行方法)。在设计航空运输模拟器时,你可以对机场(Airport)类做出限制,使其仅与实现了航空运输接口的对象进行交互。此后,你可以确保传递给机场对象的任何对象——无论是飞机、直升机(Helicopter)还是可怕的家养狮鹫(DomesticatedGryphon)都能到达或离开这种类型的机场。

3.3 继承

继承是指在根据已有类创建新类的能力。

3.4 多态

多态是指程序能够检测对象所属的实际类,并在当前上下文不知道其真实类型的情况下调用其实现的能力。

参考

[1] https://www.yuque.com/tomocat/txc11h/ggfxqt

本文由作者按照 CC BY 4.0 进行授权