2021-2022-1 20211420《信息安全专业导论》第八周学习总结
作业信息
|作业属于|2021-2022-1信息安全专业导论
|作业要求|2021-2022-1信息安全专业导论第八周作业
- 学习目标
- 功能设计与面向对象设计
- 面向对象设计过程
- 面向对象语言三要素
- 汇编、编译、解释、执行
|班课作业链接|
链表
教材学习内容总结
- 面向对象设计
- 底层概念:类和对象
- 对象:在问题背景中相关的事物或实体
- 对象类或类:一组具有相似的属性和行为的对象的描述
- 字段:表示类的属性
- 方法:定义了类的一种行为的特定算法
- 设计方法
- 头脑风暴:一种集体求解的方法,包括集体中每个成员发言
- 过滤:筛选去除重复
- 场景:分配责任并封装数据与动作
- 责任算法:为责任编写算法
- 自上而下设计方法与面向对象设计的区别
- 自上而下的设计方法重点在于把输入转化为输出的过程,结果将生成任务的体系结构(树结构)
- 面向对象设计的重点是要转换的数据对象,结果生成的是对象的体系结构(类)
- 底层概念:类和对象
- 翻译过程
- 编译器:把用高级语言编写的程序翻译成机器码的程序
- 解释器:输入用高级语言编写的程序,指导计算机执行每个语句指定的动作的程序
- 字节码:编译Java源代码使用的标准机器语言,任何具有JVM的机器都可以运行编译过的Java程序
- 翻译过程:将汇编语言输入到汇编器中,汇编器会将汇编语言翻译为机器语言,然后机器再执行机器语言
- 汇编,编译,解释和执行的区别
- 汇编:将汇编语言翻译为机器语言的行为
- 编译:将高级语言翻译为机器语言的行为,如DevC++时,输入的C语言代码需要先通过编译翻译为机器语言后才能运行程序
- 解释:对于源代码中的每一条指令,都依次翻译成目标指令,并且执行,这个行为是不会输出机器语言的,而是直接执行目标指令的
- 执行:即运行所写的代码或算法
- 面向对象语言的三要素:封装,继承,多态
封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏。
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式有三类:实现继承、接口继承和可视继承。
1.实现继承是指使用基类的属性和方法而无需额外编码的能力;
2.接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
3.可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。
抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。
OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
实现多态,有二种方式,覆盖,重载。
覆盖,是指子类重新定义父类的虚函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。”
那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
- 四种不同的范型:
- 命令式范型:
- 面向过程的范型:是一种命令式模型,语句被分组为子程序,数据是被动且被程序所操纵
- 面向对象的范型:是与对象交互的一种方式,数据是活跃的
- 声明式范型:
- 函数式模型:基于函数的数学概念,计算通过对函数求值来实现
- 逻辑式模型:基于数理逻辑的原则,包括一系列关于对象的事实和一系列关于对象间关系的规则
- 命令式范型:
- 数据类型和强类型化:
- 数据类型:一组值以及能够应用于这种类型的值的基本操作集合的说明
- 强类型化:每个变量都有一个类型,只有这种类型的值才能存到该变量中
教材学习中的问题和解决过程
问题:在学习教材上异步处理的内容时,我想到了异步加载(ajax)。但是我并没有分清这两个的区别。
解决过程:我到网上搜寻了异步处理和异步加载这两个概念,得到如下结果
异步处理,就是按照不同步的程序处理问题。异步处理与同步处理是对立的,而产生他们的是多线程或者多进程。
异步处理的好处是提高设备使用率,从而在宏观上提升程序运行效率,但是弊端就是容易出现冲突操作和数据脏读。同步则刚好相反,同步是一种降低设备使用率,在宏观上降低了程序的运行效率,而且很多系统或者是运行环境在处理同步的时候为了维持同步的有效性也会付出许多格外的系统资源开支,对性能影响相当大。但是同步保证了程序运行的正确性与数据的完整性。
异步加载(AJAX)= 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
所以这两个专业术语看起来很像,实际上却有很大的区别
代码调试中的问题和解决过程
问题:这周在寻找某个网站的加密方法,加密方法是找到了,是在一个js文件中,我尝试用python语言编写一次代码,发现代码运行不了,如下图
解决过程:我在网上查到了解决方法,js文件中的代码虽然语法与python不同,但是代码的意思是差不多的,图中的错误是str与int不能进行位运算,我在想如果都变为int就能进行,但是如果说加密内容有文字或者字符的话这一招就行不通,于是我又找到了一些博客,说python中有一个模块叫execjs,可以直接在python中运行js代码,于是我安装了这个模块,问题自然也解决了,结果如下
代码托管
使用execjs模块对hello world和诗句实现加密
上周考试错题总结
1.A record is a named heterogeneous collection of items in which individual items are accessed by position.
记录是一个命名的异构项集合,其中各个项由位置访问。
本题错误
2.Letters within quotations are called strings.
引号中的字母称为字符串。
本题正确
3.The general case of a recursive solution determines when the recursion stops.
递归解决方案的一般情况决定了递归何时停止。
本题错误
4.During top-down design, a concrete step is one that needs to be expanded further.
在自上而下的设计中,具体步骤需要进一步扩展。
本题错误
学习感受
我觉得这周学习了爬虫入门的一些东西,发现其实各类编程语言都有交汇的地方,比如爬虫与网页有很大的联系,就有涉及到js等等语言。所以说学习是无止境的,我也会继续努力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 50/50 | 4/4 | 20/20 | |
第二周 | 100/150 | 2/6 | 15/35 | |
第三周 | 150/300 | 2/8 | 12/47 | |
第四周 | 1000/1300 | 5/13 | 36/83 | |
第五周 | 300/1600 | 4/17 | 30/113 | |
第六周 | 1400/3000 | 3/20 | 36/149 | |
第七周 | 1500/4500 | 4/24 | 40/189 | |
第八周 | 1200/5700 | 3/27 | 30/219 |
计划学习时间:30小时
实际学习时间:30小时
改进情况:这周的学习任务完成的速度很快,但是在学习新知识的理解上还需要加强
参考资料
《计算机科学概论》
[《看漫画学Python》]