1.2.3 数据类型和抽象数据类型

  在用高级程序设计语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。例如,C语言中的基本数据类型有:整型、字符型、实型(包括单精度型和双精度型)及枚举型。

  数据类型是一个"值"的集合和定义在此集合上的"一组操作"的总称。

  所有高级语言中都有"整型"数据类型,它们的实现方法可以各自不同,但对程序员而言,它们是"相同"的。程序员使用它们时仅需了解它们的数学特性,而不需要了解它们在语言中是如何实现的。换句话说,各种语言中实现的是同一个"整数类型",而这个"整数类"的定义仅对"整数的数学特性"有明确规定。可称这个"整数类型"为"抽象数据类型"。
 
 
 
  程序中对变量或常量说明其所属类型的作用是,对它们加上两个约束条件:一是可取值的范围,二是可进行的操作。

  在高级编程语言中实现的整数都具有下列"数学特性":
  它是这样一个序列:
   ……,-2,-1,0,1,2,……

  此外,它可以进行"+"、"-"、""、"/"及"取模"等运算。

  "抽象"意为提取"数学特性"。
 

 
    抽象数据类型Abstract Data Type 简称 ADT是指一个数学模型以及定义在此数学模型上的一组操作。

  例如,矩阵的抽象数据类型定义为,矩阵是一个由 m n 个数排成 m 行 n 列的表,它可以进行初等变换、相加、相乘、求逆、……等运算。

 抽象数据类型有两个重要特性:
 ・数据抽象
  用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。

 ・数据封装
  将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。
    抽象数据类型必须给它的外部用户提供完整的 "接口",例如,明确长整数是三个整数的序列以及可以对它进行的操作等。

  同时,对外部用户来说,不需要了解它是如何实现的,内部实现的改变不影响外部的使用,更重要的是应该做到,不能让外部用户侵入内部。对外部用户来说,抽象数据类型应该完全是一个黑盒子。