抽象数据类型与类层次(一)

        本系列文章主要学习抽象数据类型(Abstract Data Types)的基本知识和使用C++类层次(Class Hierarchy)来表示各种抽象数据类型。

        本文主要介绍一些基本概念:抽象(Abstract)、ADTs、设计模式(Design Patterns)。然后再展示后面要用到的类层次图。


一、抽象与抽象数据类型

        抽象就是将物体的性质从具体的、真实的物体中分离出来单独考虑的一种思维方式。比如在按高矮排队的时候,我们只关注身高而不关注具体的人。抽象就是这样一种超越(忽略)不相干的属性同时强调相干的属性的一种方法,它有利于程序员把复杂事物简单化。

        抽象数据类型是对计算机程序中保存(或表征)数据的变量的一种抽象。变量包括多个属性:name、address、value、lifetime、scope、type and size。其中每一种属性都有一个值,而ADT关注的是“type”这一项属性,它的值有:int、double、char...这些值实际上代表两方面的含义:1)“a set of values”,即可以赋值对象或取值范围;2)“a set of operations”,可以支持的操作。

        参考原文:Abstract Data Types


二、类层次

        我们将一些基本的ADTs当作C++类层次来设计。如下图:

抽象数据类型与类层次(一)_第1张图片

        实现这些基本数据结构有两种设计方式,一种泛型,如STL;另一种就是这种类层次设计。这种类层次的设计方式很常见,如C#语言就是基于一个根类(Object)来设计其他数据类型(本书也是参照这种设计),另外MFC和Qt库也是这种设计。

        类层次的设计可以充分利用多态(主要是“基类指针或引用指向派生类对象”的特性),统一操作,某种程度上达到泛型模版的效果。(泛型的效率更高)

三、基础类

        本系列文章主要学习上面类图中的几个基础类,它们是后续章节数据类型的父类。

抽象数据类型与类层次(一)_第2张图片

                            基础类图

        上图是几个基础类及其关系图。其中Wrapper<T>是一个包裹类,它的作用是让这套设计兼容内置数据类型。(C#语言也是这种设计)这种使用包裹类或适配器类来扩展的设计非常常见,如函数对象,另外,C++11中还提供了bind方法来扩展接口。


你可能感兴趣的:(抽象数据类型与类层次(一))