2021-2022-1学期 20212401《网络空间安全导论》第四周学习总结

第8章
1.本章主要介绍了抽象数据类型和子程序。抽象数据类型是属性明确地与特定实现相分离的容器。通过抽象来减小复杂度。容器存在的唯一目的就是存放其他对象。本章实际上是数据结构的导论。
2.栈:栈与外部只有一个接口,即无论是插入还是删除都只能从一端访问,称作LIFO(后进先出)型处理。其等价描述为删除的项总是在栈中时间最短的项目,插入时间没有任何约束;整个LIFO行为都体现在删除操作上。栈没有长度属性,只能判断其是否空。
3.队列:队列与外部有两个接口,队列中项目从一端入,另一端出,乘坐FIFO(先进先出)型处理。等价描述为删除的总是在队列中存在时间最长的项目,同样的,插入操作没有任何约束;整个FIFO行为体现在删除操作上。
4.列表:列表有三个特点,项目是同构的,项目是线性的,列表是变长的。列表提供对项目的插入,删除,检索,求长度,访问序列中每一项等操作。因为项目可以被删除和检索,所以列表的项目必须能够相互比较。列表不同于数组,数组是语言的内嵌结构,而列表是一种抽象数据结构,列表应用于数组中。列表也可以形象化为链式结构。链式结构以及树,图都以节点的概念作为基础,一个节点由两部分组成:用户的数据和指向下一个节点的指针或链接。列表的最后一个节点存放的指针变量存放的是表示列表结束的符号。无序列表的顺序并不重要;而对于有序列表,项目之间具有语义关系。
5.树:树以及图有着深刻的数学理论,但在计算领域,所说的通常是二叉树。二叉树具有唯一的起始节点叫做根节点,每个节点可以有两个子女节点,根节点和子女节点之间有且仅有一条路径。事实上,除了叶节点之外,树中每个节点都可以被看作一个子树的根。普通的树类似一个无序列表,访问任意一个项目需要检查每个节点。特殊的,二叉检索树具有语义属性可以刻画树中节点上的值,任何节点的值都要大于它左子树中的所有节点的值,但都要小于它的右子树中所有节点的值。二叉检索树的检索方法与线性结构的二分搜索法有很大的相似性,通过一次比较操作就可以排除很大一部分数据。然而,二叉搜索树的每次比较并不是均匀的把搜索范围减小一半,这是因为二叉树的形状不一定平衡。显然,二叉搜索树的搜索效率与树的形状有直接的关系。在构建树的过程中,合适的选择根节点,并以合适的顺序输入项目以形成树。有多种方法可以遍历一棵树。根据树的定义,我们有length的递归定义。即1加上左子树中的节点数与右子树中的节点数。
6.图:树去掉唯一指向的约束便构成了图。图的节点称作顶点,线段叫做边。边双向,则为无向图;边单向则为有向图。顶点表示对象,便用于表征对象之间的关系。我们可以为边赋予权值,,从而赋予更多的语义信息。有三种经典的图算法。深搜,用栈来储存访问的顶点,再用深搜来检查起点的第一个临顶点。深搜的想法是沿着一条路径尽可能深的访问各个节点,如果没有找到终点则回溯,因此符合栈后进先出的特点,用栈储存顶点是合适的。当我们把一个顶点的所有临顶点都压入栈中,则标记这个顶点被访问过。广搜的想法是尽可能少回溯,优先遍历当前顶点的临顶点。因此对于广搜来说,用队列来存储顶点是合适的。对于有边权值的图,可以运用优先队列来实现单源最短路搜索。
7.考虑这样的子程序,我们关注调用程序与子程序之间信息传递的原理。信息交流通过参数列表得以实现。参数列表是子程序要使用的标识符或值的列表。在子程序后面的括号中声明了一个变量名的列表,这些标识符被称作形参;而当子程序被调用时,此时子程序名括号中的标识符称作实参。实参表示的是调用单元中的真正变量。可以把形参看作子程序使用的临时标识符,形参定义了子程序的动作。当子程序被调用时,调用函数把实参发送给子程序,并在动作执行时,实参将形参替代。替代方式有几种,最常见的是根据位置进行替代。传递参数的方式有两种,传值是C和C++都能用的方式。 传引用则是C++比C所不同的地方。 传引用,传递的是实参本身(实参的地址),而不是实参的一个拷贝,形参的修改就是实参的修改 。 相比于传值,传引用的好处是省去了复制,节约了空间和时间。子程序声明使子算法可以独立实现。
8.程序可以分为有返回值的程序和无返回值的程序。通过return语句返回。
9.列表和树有着同样的属性,元素都可以被插入,删除和检索。列表,栈,队列,树都仅仅是容器结构,而图更加复杂,有图论作为支撑。
第九章
1.本章主要介绍面向对象设计和高级程序设计语言。本章内容最接近当代人语境下的编程。
2.抽象是人类解决问题的基本法宝。良好的抽象策略可以控制问题的复杂程度,增强系统的通用性和可扩展性。抽象主要包括过程抽象和数据抽象。结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。这种抽象级别对于软件系统结构的设计显得有些武断,并且稳定性差,导致很难准确无误地设计出系统的每一个操作环节。一旦某个客体属性的表示方式发生了变化,就有可能牵扯到已有系统的很多部分。而数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。
3.自顶向下设计实际上是面向过程的程序设计,通过对任务进行分层,每个任务通过其参数列表操作传递给它的数据来生成想要的输出。自顶向下设计的重点是任务。面向对象设计则不然,它采用对象的独立实体生成解决方案的问题求解方法,对象由数据和处理数据的操作构成,因此面向对象的重点是对象以及他们在问题中的交互,当一个问题的所有对象都被收集,意味着解决方案的产生。在面向对象程序设计中对象有两个含义,一个是数据一个是动作。通过封装将二者结合在一起,仅仅留一个外部接口,这样极大的提高了程序的重用性,互不干扰性以及多态性。类描述了一组相似的对象,可以看作是对象的抽象。不同的类要承担不同的责任,并要为此设计责任算法。一般自顶向下设计算法的方法通常也适用于设计动作责任算法。
4.可复用性是面向对象设计的一大优点,为一个问题设计的类还可以用于解决另一个问题,因为每个类是自约束的。
5.在高级语言与低级语言之间的转化中,翻译过程扮演了重要的角色。汇编器将汇编语言翻译成机器语言。编译器将高级语言翻译成汇编语言。而解释器则不然,解释器在翻译过语句之后会立即执行这个语句,可以把解释器看作理解编写程序所使用的语言的模拟器或虚拟机,模拟器的特点是直接执行输入的程序。高级语言分为要编译的和要解释的,java是一种热门的要编译的语言,为了达到最佳的可移植性,java被编译为一种标准的机器语言——字节码,后者是编译java源代码使用的标准机器语言。
6.程序设计范型:分为命令式和声明式,前者包括面向过程和面向对象。面向过程中语句被分组成子程序,一个程序是子程序分层次构成的,每一层执行整个问题求解的一个必要的特定任务。面向对象范型中每个对象负责执行他自己的动作。选择和重复是命令式语言的标志。声明式范型仅仅描述结果,而完成结果的过程则不被描述。分为函数式和逻辑式。函数式模型的基本原理是函数的求值,逻辑编程基于数理逻辑的原则,该模型包括了一系列关于对象的的事实与对象间关系。
7.数据类型描述一组数值和一组可以应用在这种类型的数值上的基本操作。在强类型语言中,每个变量只能有一种类型,python不属于强类型语言。大多数语言固有四种类型:整数,实数,字符和布尔型。声明是将实体与标识符关联起来的语句。数据类型决定了如何解释位模式。
8.控制结构是确定程序中其他指令的执行顺序的指令。结构化程序设计的理念认为程序中的每个逻辑单元都只能有一个入口和一个出口,程序不应该随意跳入或跳出这些逻辑模块。控制结构之间可以进行嵌套。
9.异步处理也叫事件驱动处理。不同于传统的流处理。异步处理常常可以处理一些意外情况。
10.类是一种语言结构,对象是类的实例。类提供了用于封装的结构。操作类的数据域的唯一方式是通过类中定义的方法。如果一个类想让其他的类中的对象调用自己的方法,就必须声明这个方法是公共的。以上的特性极好的实现了隐蔽的设计理念。
11.一个类可以继承另一个类的数据和方法。类构成了继承的体系结构,其中所处的层次越低,对象越专门化。
12.调用单元将把类的方法应用于类的一个实例。语言在运行时确定给定调用将执行哪些可能方法的能力叫做多态。
13.在面向对象的版本中,类对象的实现通过封装来实现对用户的隐藏。
学习规划:
1.认真完成老师布置的各项作业,包括各种选做作业和阅读作业。多上机实践
2.完成牛客网的130道oj题,C语言熟练度有较大的突破
3.完成算法竞赛导论一书,重点掌握学习c++与STL部分,能够实现一些简单的算法,了解c++的基本语法。
4.如能再有时间,多多练习python编程,提高python编程能力,动手实践一些项目,包括面向对象的内容。
5.在适当的时候(很可能未必下周),可以启动对网络空间安全导论的阅读。并以此准备信协新生赛。

posted @ 2021-10-17 21:08  20212401王烨程  阅读(64)  评论(1)    收藏  举报