当前课程知识点:基于Linux的C++ > 第八讲 链表与程序抽象 > 8.2 数据抽象(一) > LinuxCPP0802
我们首先来看数据抽象
在这一小节里面
数据抽象涉及到几个主题
一个是我们为什么需要数据抽象
第二个是结构化的数据类型的性质
第三个就是数据封装
接下来就是信息隐藏
然后我们通过一个实际的例子
告诉大家怎么编写抽象数据类型
首先来看数据抽象的目的和意义
我们前面已经讲过
使用C或C++来编写程序代码的时候
我们会定义很多数据对象
这样的数据对象在C++的语言里面
实际上具有四个主要的特征 VANT
它有值、有地址、有名称、有类型
这四部分信息 在这个程序编译完成之后
实际上在我们可执行程序里面
信息是缺失的
前面讲的那四个特征VANT——值、地址、名称、型式
在真实的程序中
最终就只会留下两个————地址和值
名称没有了 类型信息也没了
这些信息在程序运行的过程中就消失了
那么它就对我们的程序
带来一个巨大的问题
就是我们真实编程的时候
所希望所表达的那些信息或意义
有一些东西就没了
这个东西我们称它为信息缺失
解决这个问题的主要的手段就是抽象
数据抽象最重要的一个地方
就是第一 怎么表示我们的数据
前面讲过 我们要用注释、
有意义的数据对象的名称来表示数据
想命名一个量 那么我们希望使用一个
有意义的名称来命名
你不能胡乱对它进行命名
因为我们希望这个名字
能够表达一个特定的含义的
也就是它的信息或意义
这个是要能够表达出来的 这是第一个
第二个 在我们的程序代码中
应该在算法的关键处
对于特殊的数据结构的使用
对于特殊类型的使用要给出注释
这些都能够让我们在源代码级别
保持数据对象的意义
这是一个非常重要的地方
虽说这样的保持
在编译成可执行文件以后
它这个信息就没了
但是在源代码级别
它能够让我们保持数据的意义
维护程序的那个程序员
看到这样一个数据的表示
他一下子就知道该怎么去理解程序代码
对理解我们的程序是有好处的
第二个就是数据的功能
定义一个特定的数据型
你应该描述的最重要的一个地方
就是可以在这个数据上工作的一个操作集
我有一个数据类型 那么我得描述清楚
我在这个数据类型上面
可以进行什么样的操作
这个就是数据的功能
我们特别需要说明的就是
在编程的过程中
数据的功能要比数据的表示更重要
在程序代码里边创建了一个数据类型
也定义了数据类型的一个特定的数据对象
同时我们还定义了能够操纵这个
数据类型的特定的一些操作的集合
那么对于数据的对象
数据的类型和我们的数据集上的操作而言
在程序运行的过程中
哪一种东西容易发生变化
答案是肯定的
数据的对象是容易发生变化的
而我们的数据集上的操作
其实是不太容易发生变化的
所以我们在编程的时候
重心应该集中在算法
而不是数据结构上
这一个我们在第一讲就已经谈到过了
你比如讲 我有一个整数
大部分情况下边
我们事实上是不关心这个整数
在计算机内部是如何保存的
我们关心的是什么呢
这个整数能够做什么样的运算
比如说整数的加法运算
整数的减法运算 整数的除法运算
这是非常重要的一个地方
所以说大部分时候我们关心的
是一个特定的数据集上的运算
也就是它的操作集
而不是它的真实表示
对于一个结构化的数据类型来讲
它具有几个最典型的性质
第一个 类型 它的这个类型
应该是由用户来自定义
语言只给我们提供技术手段
比如说struct
每一个这样的结构化数据类型
它一定是由一系列数据成员来组成的
第三个 每个这种子类型的对象
肯定都有一个类型
所以我们称它为成员类型
第四个 成员的数目
一个结构化数据对象有几个数据成员
比如说struct DATE 一个日期的结构体
它有year,有month,有day,有三个
这就是它成员的数目
然后还有成员的组织
到底是按照什么样的方式
来组织数据成员的
数据成员的组织可以分成两大类
一种称之为线性结构
一种称之为非线性结构
线性结构的话
就是所有数据对象满足一个线性的关系
而非线性的数据结构
就是不满足这样一个线性关系
然后是最后一个
每个结构化的数据类型上边
都会有一个可以和它相适应的操作集
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口