第八章 抽象数据类型与子程序
8.1 抽象数据类型
- 抽象数据类型(ADT):属性(数据和操作)明确地与特定实现分离的容器。
- 数据结构(data structure):一种抽象数据类型中的复合数据域的实现。
- 容器(container):存放和操作其他对象的对象。
8.2 栈
- LIFO(Last in First Out):可以在第一个位置插入元素,也可以删除第一个元素。这种类型的处理称为。
- 相关术语:插入操作——Push 删除操作——Pop
- 注意:栈没有长度属性,所以没有返回栈中项目个数的操作。我们需要的是确定栈是否为空(IsEmpty)的操作,因为当栈空的时候再弹出项目会出错。
8.3 队列
- FIFO(First In First Out:队列也是种抽象结构,队列中的项目从一端输入,从另一端输出。
- 插入在尾部进行,删除操作在队列的头部进行。
- 遗憾的是,操作和输入没有相关的标准术语
- 插入术语:插入——Enqueue、Enque、Enq、Enter和Insert
- 删除术语:删除——Dequeue、Deque、Deq、Delete和Remove
8.4 列表
- 三个属性特征:项目是同构的,项目是线性的,列表是变长的。
- 线性:每个项目除了第一个都有一个独特的组成部分在它之前,除了最后一个也都有一个独特的组成部分在它之后。
- 不要把列表误认为是数组:数组是内嵌结构,列表是抽象结构。
- 链式结构(linked structure):一个将数据项和找到下一项位置的信息保存到同一容器的实现方法。
8.5 树
8.5.1 二叉树
- 是一种抽象结构
- 树的头部是一个起点,叫做根。是树中唯一的开始节点。
- 输的每个节点叫做子女,也可以说左子女、右子女。
- 叶节点:没有子女的树节点。
8.5.2 二叉检索树
1.在二叉检索树中搜索
2.构造二叉检索树
3.输出二叉检索树中的数据
8.5.3 其他操作
8.6 图
- 图(graph):由一组节点和一组把节点相互连接起来的边构成的数据结构。
- 顶点:图中的节点。
- 边(弧):表示图中两个节点的连接的顶点对。
- 无向图:其中的边没有方向的图。
- 有向图:其中的边是从一个顶点指向另一个顶点(或同一个顶点)
- 临顶点:通过边连接起来的两个顶点。
- 路径:连接图中两个顶点的一系列顶点。
8.6.1 创建图
8.6.2 图算法
- 深度优先搜索
- 广度优先搜索
- 单源最短路搜索
8.7 子程序
8.7.1 参数传递
- 参数列表:程序中两部分之间的通信机制。
- 形参:列在子程序名后的括号中的标识符。
- 实参:子程序调用中列在括号中的标识符。
8.7.2 值参与引用参数
- 值参:由调用单元传入实参的副本(写在留言板上)的形参。
- 引用参数:由调用单元传入实参的地址(写在留言板上)的形参。
第九章 面向对象设计与高级程序设计语言
9.1 面向对象方法
9.1.1 面向对象
- 对象(object):在问题背景中相关的事物或实体。
- 对象类或类(class):一组具有相似的属性和行为的对象的描述。
- 5*字段(field)**:表示类的属性。
- 方法(method):定义了类的一种行为的特定算法。
9.1.2 设计方法
- 头脑风暴
- 过滤
- 场景
- 封装(encapsulation):把数据和动作集中在一起,使数据和动作的逻辑属性与它们的实现细节分离。
- 责任算法
-
9.1.3 示例
- 问题
- 头脑风暴和过滤
- 责任算法:Person类: 有两个责任需要分解,即初始化和输出。 Name类:有两个责任,即初始化和输出。
9.2 翻译过程
9.2.1 编译器(compiler)
- 把用高级语言编写的程序翻译成机器码的程序。
9.2.2 解释器(interpreter)
- 输入用高级语言编写的程序,知道计算机执行每个语句指定的动作的程序。
- 字节码(bytecode):编译java源代码使用的标准机器语言。
9.3 程序设计语言范型
9.3.1 命令式的范例
- 面向过程的范例
- 面向对象的范例
9.3.2 声明式范型
- 函数式模型
- 逻辑编程
9.4 高级程序设计语言的功能性
9.4.1 布尔表达式(Boolean expression)
- 一个布尔表达式可以是:一个布尔变量 一个算术表达式加一个关系运算符,再加一个算术表达式 一个布尔表达式加一个布尔运算符,再加一个布尔表达式
- 定义:一个标识符序列,标识符之间由相容的的运算符间隔,求得的值是true或false。
9.4.2 数据归类
- 强类型化(strong typing):每个变量都有一个类型,只有这种类型的值才能储存到该变量中。
- 数据类型(data type):一组值以及能够应用于这种类型的值得基本操作合集的说明。
- 1、数据类型:数据是标识信息的物理符号。在计算机内部,数据和指令都是二进制位的组合。
- 声明(declaration):把变量、动作或语言中的其他实体与标识符关联起来的语句,使程序员可以通过名字引用这些项目。
- 保留字(reserved word):一种语言中具有特殊意义的字,不能用它作为标识符。
- 区分大小写(case sensitive):大写字母和小写字母被看作是不同的;两个拼写方法相同但大小写形式不同的标识符被看做是两个不同的标识符。
9.4.3 输入/输出结构
- 嵌套逻辑:在任何控制语句中被执行或跳过的语句可以是简单的语句或块(一组语句),对于这些语句没有任何限制。
- 异步处理
- 异步(asynchronous):不与计算机中的其他操作同时发生;换句话说,与程序的操作不同步。
9.5 面向对象语言的功能性
9.5.1 封装
- 封装(encapsulation):实施信息屏蔽的语言特性。
- 对象(问题求解阶段)(object(problem-soilving phase)):于问题背景相关的事物或实体。
- 类(实现阶段)(class(implement phase)):对象的模式。
- 对象类或类(问题求解阶段)(object class or class(problem-solving phase)):属性和行为相似的一组对象的说明。
- 对象(实现阶段)(object(implementation phase)):类的一个实例。
9.5.2 类
- 实例化(instantiate):创建类的对象。
9.5.3 继承
- 继承(inheritance):类获取其他类的属性(数据字段和方法)的机制。
9.5.4 多态
- 多态(polymorphism):语言在运行时确定给定调用将执行哪些可能的方法的能力。
9.6 过程设计与面向对象设计的区别
在面向对象的版本中,类对象的实现通过封装实现对用户的隐藏。
浙公网安备 33010602011771号