2020-2021-1学期 20202417《网络空间安全专业导论》第四周学习总结

学习内容:《计算机科学概论》第8、9章

第8、9章的内容仍然是以介绍程序设计层为主。第8章主要讲述了抽象数据类型与子程序,其中包含栈、队列、树等;第9章则讲解了面向对象设计与高级程序设计语言。

第8章知识点:

一.抽象数据类型:

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

计算领域,可以从应用层、逻辑层和实现层这三个方面观察数据。应用(或用户)层是特定问题中的数据的视图。逻辑(或抽象)层是数据值(域)和处理它们的操作的抽象视图。实现层明确表示出了存放数据项的结构,并用程序设计语言对数据的操作进行编码。这个视图用明确的数据域和子程序表示对象的属性。这一层涉及了 数据结构。

  1. 数据结构:一种抽象数据类型中的复合数据域的实现。

3.容器:存放和操作其他对象的对象

二.栈:

1.栈是一种抽象复合结构,只能从一端访问栈中的元素。可以在第一个位置插入元素,也可以删除第一个元素。这种类型处理称为LIFO,即后进先出。另一种描述栈的访问行为的说法是删除的项总是在栈中时间最短的项目。插入操作没有约束;整个LIFO行为都体现在删除操作上。

2.栈的插入操作:Push(推进),删除操作:Pop(弹出)。没有长度属性,因此没有返回栈中项目个数的操作。需要确定栈是否为空(IsEmpty)的操作,因为栈为空时再弹出项目会出错。

三.队列:

1.也是一种抽象结构,队列中的项目从一端入,从另一端出。这种行为称为FIFO,意为先进先出。插入操作在队列尾部进行,删除操作在队列头部进行。另一种描述队列的访问行为的说法是删除的总是在队列中时间最长的项目。插入操作没有约束;整个FIFO行为都体现在删除操作上。

2.插入和删除操作没有标准的相关术语。Enqueue、Enque、Enq、Enter和Insert都可以表示插入操作。Dequeue、Deque、Deq、Delete和Remove都可以表示删除操作。

四.列表:

1.三个属性特征:项目是同构的,项目是线性的,列表是变长的。

2.线性:除了第一个都有一个独特的组成部分在它之前,除了最后一个也都有一个独特的组成部分在它之后。

3.通常提供插入一个项目的操作(Insert)、删除一个项目的操作(Delete)以及报告列表中项目数量(GetLength)。一些机制允许用户查看序列中的每一项(Reset、GetNext、MoreItems)。因为项目可以被删除和检索,所以列表中的项目必须能够相互比较。

4.列表不等于数组,数组是内嵌结构,列表是抽象结构。列表应用于数组中。

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

6.无序列表与有序列表:

五.树:

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

2.根:树中唯一的开始节点。

3.叶节点:没有子女的树节点。

4.除根节点外,每个节点都只有一个父母点。根节点的每个子女本身又是一个小二叉树或子树的根。如果一个节点是另一个节点的父母或者是另一个节点先辈的父母,那么前者是后者的先辈。

5.二叉检索树:类似已排序的列表,节点间存在语义排序。具有二叉树的形状属性,节点可以有0个、1个或2个子女。还具有语义属性来刻画树中节点上的值,即任何节点的值都要大于它的左子树中的所有节点的值,并且要小于它的右子树中的所有节点的值。

6.输出二叉检索树中的数据:要输出根的值,必须先输出它的左子树中的所有值,即所有比根小的值。输出根的值后还要输出它的右子树中的所有值,即所有比根的值大的值。

六.图:

1.图:由一组节点和一组把节点相互连接起来的边构成的数据结构。

2.顶点:图中的节点。

3.边(弧):表示图中两个节点的连接的顶点对。

4.图中的顶点表示对象,边则描述了顶点之间的关系。

5.无向图:其中的边没有方向的图。

6.有向图:其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图。

7.邻顶点:通过边连接起来的两个顶点。

8.路径:连接图中两个顶点的一系列顶点。

9.创建图。

10.图算法:

  • 深度优先搜索。
  • 广度优先搜索。
  • 单源最短路搜索。

七.子程序:

1.参数列表:子程序要使用的标识符或值的列表,放置在子程序名后的括号中。是程序中两部分之间的通信机制。

2.形参:列在子程序名后的括号中的标识符。

3.实参:子程序调用中列在括号中的标识符。

4.位置形参。

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

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

第9章知识点:

一.面向对象的方法:

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

2.对象:在问题背景中相关的事物或实体。

3.对象类或类:一组具有相似的属性和行为的对象的描述。

4.字段:表示类的属性。

5.方法:定义了类的一种行为的特定算法。

6.设计方法:

  • 头脑风暴,是一种集体行为,为的是生成解决某个特定问题要用到的候选类的列表。
  • 过滤
  • 场景:目标是给每个类分配责任。责任最终被实现为子程序。封装:把数据和动作集中在一起,使数据和动作的逻辑属性与它们的实现细节分离。
  • 责任算法
  • 总结

7.示例

二.翻译过程:

1.编译器:把用高级语言编写的程序翻译成机器码的程序。早期编译器输出的是程序的汇编语言版本,这个版本还要经过汇编器处理才能得到可执行的机器语言程序。但是随着科学家更加深入地了解翻译过程,编译器变得复杂,汇编语言的阶段通常被省略了。

2.解释器:输入用高级语言编写的程序,指导计算机执行每个语句指定的动作的程序。

3.字节码:编译Java源代码使用的标准机器语言。任何具有JVM的机器都可以运行编译过的Java程序。

三.程序设计语言范型:

1.命令式范型:

命令式范型具有顺序执行指令的特征,变量的使用代表了内存地址,而是用赋值语句则改变这些变量的值。

(1)面向过程的范型:面向过程编程是一种命令式模型。在这里语句被分组成子程序。一个程序是子程序分层次构成的,每一层执行整个问题求解的一个必要的特定任务。

(2)面向对象的范型:面向对象视角是与对象交互的一种方式。每个对象负责执行它自己的动作。

在面向过程的范型中,数据被认为是被动并且被程序所操控的;在面向对象的范型中,数据对象是活跃的。每个对象负责控制自己的操作。

2.声明式范型:声明式范型是一个描述结果的模型,但是完成结果的过程则不被描述。在这种范型中的两种基本模型:函数式和逻辑式。

(1)函数式模型:基于函数的数学概念。基本的原理是函数的求值。

(2)逻辑编程:基于数理逻辑的原则。解决潜在问题的算法用逻辑的规则来推演出事实和规则的答案。

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

命令式语言的标志就是两种伪代码结构——选择和重复(循环)。

1.布尔表达式:写出语句然后测试是true还是false是程序设计语言提问的方式。这些语句称为断言或条件。编写算法是我们采用自然语言表示断言。翻译成高级程序语言时,这种用自然语言编写的语句就会被重写成布尔表达式。

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

2.数据归类

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

大多数高级语言都有四种数据类型:整数、实数、字符和布尔型。

  • 声明:把变量、动作或语言中的其他实体与标识符关联起来的语句,使程序员可以通过名字引用这些项目。

  • 保留字:一种语言中具有特殊意义的字,不能用它作为标识符。

  • 区分大小写:大写字母和小写字母被看作是不同的;两个拼写方法相同但大小写形式不同的标识符被看作是两个不同的标识符。

  • 注意C++、Java、Python和VB.NET是区分大小写的,这意味着大小写不同的同一标识符会被认为是不同的词。

3.输入/输出结构

高级语言把输入的文本数据看作一个分为多行的字符流。字符的含义由存放值的内存单元的数据类型决定输出与基础所有输入语句都由三部分构成:要存放数据的变量的声明、输入语句和要读入的变量名以及数据流自身。

在非强类型语言中,输入的格式决定了类型。 输出语句创建字符流。在强类型语言中不管输入输出语句的语法或输入输出流在哪,处理的关键在于数据类型。数据类型确定字符是如何被转换为位模式以及如何被转换为字符。

4.控制结构

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

  • 重复、选择和子程序,这种结构叫做控制结构,因为他们决定了其他指令在程序中被执行的顺序。

1、嵌套逻辑

2、异步处理

异步:不与计算机这种的其他操作同时发生。

五.面向对象语言的功能性:

1.封装:实施信息隐蔽的语言特性

  • 对象(问题求解阶段):与问题背景相关的事物或实体

  • 类(实现阶段):对象的模式

  • 对象类或类(问题求解阶段):属性和行为相似的一组对象的说明

  • 对象(实现阶段):类的一个实例

2.类

  • 如果用标识符来代表一个类,那么必须在使用前显式地询问即将被创建的类。也就是需要实例化这个类,以获取符合这种模式的对象。

  • 实例化:创建类的对象。

3.继承:类获取其他类的属性(数据字段和方法)的机制。

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

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

下面用两张脑图进行总结:

posted @ 2020-11-05 00:18  20202417韩梦馨  阅读(61)  评论(0编辑  收藏  举报