2020—2021—1学期20202402毕辰成《网络空间安全导论》第四周学习总结

2020—2021—1学期20202402毕辰成《网络空间安全导论》第四周学习总结


第八章 抽象数据类型与子程序

抽象数据类型

抽象数据类型(ADT):属性(数据和操作)明确地与特定实现分离的容器

应用层是特定问题中的数据的视图。逻辑(或抽象)层是数据值(域)和处理它们的操作的抽象视图。实现层明确表示出了存放数据项的结构,并用程序设计语言对数据的操作进行编码。

数据结构:一种抽象数据类型中的复合数据域的实现。
容器:存放和操作其他对象的对象。

栈是一种抽象复合结构,只能从一端访问栈中的元素。称为LIFO,意思是先进后出。另一种说法是删除的项总是在栈中时间最短的项目。

队列

队列也是种抽象结构,队列中的项目从一端入,从另一端出。这种行为称为FIFO。意思是先进先出。另一种说法是删除的项总是在丢列中时间最长的项目。

列表

列表有三个属性特征:项目是同构的,项目是线性的,列表是变长的。线性的意思是,每个项目除了第一个都有一个独特的组成部分在它之前,除了最后一个也都有一个独特的组成部分在它之后。
列表不是数组,列表是抽象结构,数组是内嵌结构。
列表也可以被形象化为链式结构

链式结构:一个将数据项和找到下一项位置的信息保存到同一容器的实现方法。

无序列表的顺序并不重要,项目只是随意被放入其中。有序列表中,项目之间具有语义关系。

每一个节点下方都有很多节点。

二叉树

二叉树是一种抽象结构,其中每个节点可以有两个后继节点,叫做子女。然后子子孙孙无穷匮也。树的头部是一个起始节点,叫做根。

二叉树:具有唯一起始节点(根节点)的抽象复合结构,其中每个节点可以有两个子女节点,根节点和每个节点之间都有且只有一条路径。
:树中唯一的开始起点。
叶节点:没有子女的树节点。

二叉检索树

在二叉检索树中搜索

如果current指向一个节点,那么info(current)指的就是这个节点中的用户数据,left(current)指向的是current的左子树的根节点,right(current)指向的是current的右子树的根节点。null是一个特殊值,说明指针指向空值。利用这些符号,可以编写搜索算法:从树根节点开始,沿着根的后继子树前进,直到找到了要找的项目或发现了一个空子树为止。

构造二叉检索树
输出二叉检索树中的数据

要输出根,必须先输出比它小的左子树的值,输出根后,必须输出比它大的右子树的值。

其他操作

:由一组节点和一组节点相互连接起来的边构成的数据结构。
顶点:图中的节点。
边(弧):表示图中两个节点的连接的顶点对。
无向图:其中的边没有方向的图。
有向图:其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图。
邻顶点:通过边连接起来的两个顶点。
路径:连接图中两个顶点的一系列顶点。

创建图

创建一个表格需要以下操作

  • 在表格中添加一个顶点。
  • 在表格中添加一条边。
  • 在表格中添加一个权值
图算法
深度优先搜索
广度优先搜索
单源最短路搜索

子程序

许多子程序是高级语言或语言附带库的一部分,程序员只需要查询可以计算该值的子程序的名字,然后调用该子程序来进行运算即可。

参数传递

参数列表:程序中两部分之间的通信机制。
形参:列在子程序名后的括号中的标识符。
实参:子程序调用中列在括号中的标识符。

调用子程序时传递的实参个数必须与子程序定义中的形参个数相同。由于实参和形参是根据位置匹配的,所以它们的名字不必一致。以这种方式传递的形参通常叫做位置形参。

值参与引用参数

值参:由调用单元传入实参的副本(写在留言板上)的形参。
引用参数:由调用单元传入实参的地址(写在留言板上)的形参。

第九章 面向对象设计与高级程序设计语言

面向对象方法

面向对象的设计方法是用叫做对象的独立实体生成解决方案的问题求解方法,对象由数据和处理数据的操作方法构成。面向对象设计的重点是对象以及它们在问题中的交互。

面向对象

在面向对象的思想中,数据和处理数据的算法绑定在一起,因此每个对象负责自己的处理(行为)。面向对象设计(OOD)的底层概念是类和对象。

对象:在问题背景中相关的事物或实体。
对象类/类:一组具有相似的属性和行为的对象的描述。
字段:表示类的属性。
方法:定义了类的一种行为的特定算法。

设计方法

头脑风暴

在面向对象的问题求解背景中,头脑风暴是一种集体行为,为的是生成解决某个特定问题要用到的候选类的列表。

过滤
场景

这个阶段的目标是给每个类分配责任。责任的类型由两种,即自身必须知道什么(知识)和类必须知道什么(行为)。

封装:把数据和动作几种在一起,是数据和动作的逻辑属性与它们的实现细节分离。

责任算法
总结

示例

翻译过程

编译器

编译器:把用高级语言编写的程序翻译成机器码的程序。

解释器

解释器:输入用高级语言编写的程序,指导计算机执行每个语句指定的动作的程序。、
字节码:编译Java源代码使用的标准机器语言。

解释器在翻译过语句之后会立即执行这个语句。
第二代高级语言可以分为两种,一种是要编译的,一种是要解释的。

程序设计语言范型

范型:“一种模式或事物的实例”

命令式范型

冯诺伊曼顺序顺序指令模型在内存中操作数值,这给了编程语言所用的绝大多数常用模型巨大的影响:命令式模型。

面向过程的范型

面向过程编程是一种命令式模型。

面向对象的范型

面向对象视角是与对象交互的一种方式。每个对象负责执行它自己的动作。
在面向过程的范型中,数据被认为是被动并且被程序所操控的。
在面向对象的范型中,数据对象是活跃的。

声明式范型

声明式范型是一个描述结果的模型,但是完成结果的过程则不被描述。

函数式模型

函数式模型基于函数的数学概念。计算通过对函数求值来实现,而问题求解通过函数调用来实现。因此基本的原理是函数的求值,而不是变量和赋值语句。

逻辑编程

逻辑编程基于数理逻辑的原则。这个模型包含了一系列关于对象的事实和一系列关于对象关系的规则。一个程序包括了向这些对象和关系询问可以通过事实和规则推演的问题。

高级程序设计语言的功能性

布尔表达式

布尔表达式是一个标识符序列,标识符之间由相容的运算符分隔,求得的值是true或false。

数据归类

当使用汇编语言时,我们为内存分配标识符而不管它所存储的内容。

强类型化:每个变量都有一个类型,只有这种类型的值才能存储到该变量中。
数据类型:一组值以及能够应用于这种类型的值的基本操作集合的说明。

数据类型

整数:表示一个整数值的范围,由表示整数值的字节数决定。
实数:表示特定精度的数的范围,由表示实数值的字节数决定。
字符
布尔型
字符串:字符序列

整数、实数、字符和布尔型称为简单数据类型或原子数据类型。因为每个值都是独立的,不能分割。

声明

声明:把变量、动作或语言中的其他实体与标识符关联起来的语句,使程序员可以通过名字引用这些项目。
保留字:一种语言中具有特殊意义的字,不能用它作为标识符。
区分大小写:大写字母和小写字母被看作是不同的;两个拼写方法相同但大小写形式不同的标识符被看作两个不同的标识符。

输入/输出结构

输入语句由三部分组成,即要存放数据的变量的声明,输入语句和要读入的变量名以及数据流自身。

控制结构

控制结构:确定程序中的其他指令的执行顺序的指令。

嵌套逻辑

理论上,控制结构的嵌套有多深是没有限制的。

异步处理

异步:不与计算机中的其他操作同时发生;换句话说,与程序的操作不同步。

异步处理也叫事件驱动处理。换句话说,这样的处理是被程序指令序列以外发生的事。

面向对象语言的功能性

封装

封装:实施信息隐蔽的语言特性。
对象(问题求解阶段):与问题背景相关的事物或实体。
类(实现阶段):对象的模式。
对象类或类(问题求解阶段):属性和行为相似的一组对象的说明。
对象(实现阶段):类的一个实例。

实例化:创建类的对象。

继承

继承:类获取其他类的属性的机制。

超类是被继承的类,派生类是继承的类。

多态

多态:语言在运行时确定给定调用将执行那些可能的方法的能力。

过程设计与面向对象设计的区别

在面向过程的版本中,列表被呈现为传递给子程序的记录,以便子程序可以对其操作。操作它的数据结构和子程序时用户程序的一部分。在面向对象的版本中,类对象的实现通过封装实现对用户的隐藏。

posted @ 2020-11-04 18:10  毕辰成  阅读(100)  评论(0)    收藏  举报