高级程序设计

1 - 数据抽象与封装

2020-02-20 14:00 CST
2020-03-14 22:29 CST
CC BY-NC 4.0

对于一个程序实体而言:

  • 抽象是指该程序实体的外部可观察到的行为,不考虑该程序实体的内部是如何实现的;
  • 封装是指把该程序实体的具体实现细节对使用者隐藏起来的一种机制。

主要的程序抽象与封装机制包括:

  • 过程抽象与封装
  • 数据抽象与封装

过程抽象与封装

过程抽象

  • 用一个名字来代表一段完成一定功能的程序代码
  • 代码的使用者只需要知道代码的名字和相应的功能,不需要知道对应的代码是如何实现的

过程封装

  • 把名命代码的具体实现隐藏起来(对使用者不可见或者不可直接访问),使用者只能通过代码名字来使用相应的代码
  • 名命代码所需要的数据是通过参数(或全局变量)获得

实现过程中抽象与封装的程序实体通常称为子程序。在C中,子程序用函数来表示。

过程抽象与封装是基于功能分解与复合的过程式程序设计的基础,便于复杂程序的设计和实现。

数据抽象与封装

数据抽象

  • 只描述对数据能实施哪些操作以及这些操作之间的关系
  • 数据的使用者不需要知道数据的具体表示形式

数据封装

  • 把数据及其操作作为一个整体来进行实现
  • 数据的具体表示被隐藏起来,对数据的访问只能通过提供的操作(对外接口)来完成

与过程抽象与封装相比,数据抽象与封装能够实现更好的数据保护。

数据抽象与封装是面向对象程序设计的基础。

过程抽象与封装 v.s. 数据抽象与封装

过程抽象与封装存在的问题:

  • 操作必须知道数据的具体表示形式;
  • 数据的表示形式发生变化会影响操作;
  • 麻烦且容易产生误操作,因此不安全;
  • 容易忘记初始化……