2018年07月03日 14:49:40
在冯 · 诺依曼体系结构中,程序代码和数据都是以二进制存储的,因此,对计算机系统和硬件本身而言,数据类型的概念其实是不存在的。机器指令和汇编语言中,数据对象是用二进制数表示的,内存里存的都是二进制,对于内存里存的内容,可以说 “你认为它是什么,它就是什么”。在高级语言中,为了有效地组织数据,规范数据的使用,提高程序的可读性,方便用户使用,引入了整型,实型等基本数据类型。不同的高级语言会定义不同的基本数据类型。编程时只需知道如何使用这些类型的变量(如何声明,能执行哪些运算等),而不必了解变量的内部数据表示形式和操作的具体实现。
然而当表示复杂数据对象时,仅使用几种基本数据类型显然是不够的。某些语言(如PL/1)试图规定较多的基本数据类型(如数组,树,栈等)来解决这个问题。但实践表明,这不是一个好的办法,因此任何一种程序设计语言都无法将实际应用中涉及的所有复杂数据对象都作为其基本数据类型。所以,根本的解决方法就是允许用户自定义数据类型(User-Defined Data Type)。于是在后来发展的语言(如C语言)中,出现了构造数据类型(也称为复合数据类型)。它允许用户根据实际需要利用已有的基本数据类型来构造自己所需的数据类型,它们是由基本数据类型派生而来的,用于表示链表,树,堆栈等复杂的数据对象。例如C语言中构造数据类型的典型代表就是结构体。C语言通过指针和类型强转,使我们可以对一块内存进行“你希望它代表什么,它就代表什么”的操作,从而实现在更深的层次上控制计算机。
尽管构造数据类型机制使得某些比较复杂的数据对象可以作为某种类型的变量直接处理,但是这些类型的表示细节对外是可见的,没有相应的保护机制,因而在使用中会带来许多问题。例如,用户可在一个模块中随意修改该类型变量的某个成分,而这种修改对处理该数据对象的其他模块又会产生间接的影响,这对于一个由多人合作完成的大型软件系统的开发是很不利的。于是又出现了“信息隐藏”和抽象数据类型的概念。
所谓抽象数据类型(Abstract Data Type,ADT)是指这样一种数据类型,它不再单纯是一组值的集合,还包括作用在值集上的操作的集合,即在构造数据类型的基础上增加了对数据的操作,且类型的表示细节及操作的实现细节对外是不可见得。之所以说它是抽象的,是因为外部只知道它做什么,而不知道它如何做,更不知道数据的内部表示细节。这样,即使改变数据的表示和操作的实现,也不会影响程序的其他部分。抽象数据类型可达到更好的信息隐藏效果,因为它使程序不依赖于数据结构的具体实现方法,只要提供相同的操作,换用其他方法实现时,程序无需修改,这个特征对于系统的维护很有利。C++中的类(Class)是抽象数据类型的一种具体实现,也是面向对象(Object-Oriented)程序设计语言中的一个重要概念。从结构体过渡到类是顺其自然的事情,但是不能将C++看成是带类的C,因为它带来的是思考和解决问题角度的转变。不同于面向过程的程序设计,在面向对象程序设计中,程序员面对的不再是一个个函数和变量,而是一个个对象。每个对象包含两个部分:数据和方法,数据用来保存对象的属性,而方法用来完成对数据的操作。对象与对象之间是通过消息进行通信的。
本页共6段,1378个字符,3901 Byte(字节)