OOP学习小结-2

0x00 前言

本次作业分为两部分,一部分为基础知识的练习。另一部分为基于GOF的常见设计模式的初探。
作业在发出来后就及时完成了,保证了知识的连贯性。练习的内容接近现实生产环境,但是并不完全是,所以质量较高认真完成,优化后有较大的收获。


0x01 作业过程总结

①三次作业的迭代关系

第一次作业,对于知识点的及时复习,熟练。第二次作业,加入现实生产环境的需求,得运用合理得设计模式,这样才能较好得的实现需求,面向的拓展复用性强。第三次作业,有个加分题。具体是素数筛的运用。根据相关的资料,了解了时间复杂度,空间复杂度的关系。空间换时间,时间换空间。最后运用了近似线性的算法(欧拉筛)。

②如何通过作业逐步理解面向对象的三大特性

正确的解读是,如何通过作业学习面向对象程序设计。面向对象的程序设计,三大特性是他久经不衰的原因之一。所以,作业中如何体现呢?前面的作业,主要是涉及简单的继承(封装试试必须的)。后面涉及了接口,需要自己涉及类图,完成需求还是有难度的。所以必须了解特性,才能做出设计。

③作业过程中遇到的问题以及解决方案

遇到的问题主要是在①对设计模式的实际运用不够好,虽然知道有这个设计模式,但是实操起来就会出现问题。②正则表达式的构造需要花费的时间较长。③作业完成的时间不连续。对于前两者的解决方案-多练。。。后者-借口,少在碎片的信息停留长时间不就有了?鲁迅说过,时间是挤出来的。

④每次作业花费的时间比例

大概是,遇到正则时间就长,前两次作业时间长,后面涉及基本的业务流程的时间把控的还行。时间比列占Java学习时间的20%左右。下次作业计时。

⑤对编程的严谨性认识及教训

编程严谨性的认识,在于本地样例测试都过了,完全想不到测试端会出的测试数据。分析了每个测试的数据发现,边界条件,无厘头的非法操作,看似合法的非法操作,半对半错的非法操作。极大值,极小值是每个代码测试的必需品。教训是,多练出真知。熟悉业务流程,在业务流程的各个节点考虑。客户输入的任何数据都是想让你致命的Bug导火索。


0x02 OO设计心得

①面向对象的三大技术特性之间的关系的理解

三大特性,封装性,继承性,多态性。 笔者认为,这三种的层序为左边的顺序。
封装性,保证了类是一个独立的整体,对数据域,方法域,等进行封装。对于外部而言,这个类就是一个整体,独立的存在。具有属性,行为。继承在封装的基础上对类进行拓展,让另一个整体具有超类的特性,但是具有自己的相关行为决策。多态性,在一种层面上是某个类被多次继承了以后具有的特性。也就是说,对于一个类,具体类或者抽象类,接口等的不同存在形式。形象而言,交通工具是抽象类或者是接口,具有载荷的属性,运输的行为。飞机实现交通工具或者继承,火车,汽车,轮船等都可以。这些同样可以为抽象类或者接口。最后到具体隔壁老王家的那辆XXX牌的汽车对象。交通工具的不同存在形态就造成了多态。

②面型对象设计的基本原则理解(单一职责原则及“开-闭”原则)

1)单一职责原则 简而言之,一个方法只做一件事。之前的文章已经说过了。我有个榨汁机,虽然是电器,你用它榨香蕉还能理解,你用他下火锅底料,吃火锅就过分了啊!
2)开-闭 原则 对拓展开放,对修改关闭。
此原则是单一职责,里氏代换,依赖倒置等原则的确切实现。但是我们只能说尽力做到开-闭原则。其中依赖倒置原则尤其重要,面向抽象,接口编程。能够很好的实现这个开-闭原则。形象地说。我们有个CYQ牌汽车,但是他地功能不仅仅是在地上跑了,还能在天上飞。我们不能对此修改,汽车这个抽象的接口。而是让CYQ汽车实现汽车的接口,然后在内部实现飞的功能。这样就做到了对汽车的修改闭合,对拓展开放。说白了,接口就要看成是最基本的数据类型,不能修改基本的数据类型,这样会导致需要或者依赖这个接口的类等等会受到影响。为了更好的实现,我们做的是提高内聚度。

③OO编程思维的理解

OO编程思维,站在造物主的角度看待世间万物。我们的自然是多么的井然有序!面向抽象编程,将抽象的类完善最后实现到具体的类。如果需求出现了变更,只要对抽象的类进行修改即可。抽象是一切类的基石。

④类设计心得

类要根据抽象的类进行拓展,尽量不要依赖具体实现。类的设计尽量符合依赖倒转原则。也就是继承的时候要真正符合继承,不要随便的继承。对于一个类进行拓展的时候,也是依赖抽象,不依赖具体实现,符合开-闭原则。


0x03 测试的理解与实践

①测试对于编码质量的重要性

测试对于编码质量的重要性在于,测试能够将编码时尚未考虑的地方暴露出来,便于软件的完善。就此而言,更像是接近于现实用户操作的操作,用户的行为不可预测,所以测试能够尽可能的模拟用户操作,提高真正上线的时候的程序质量,用户体验。同时能够保护计算记的稳定性,安全性。

②查阅资料,假设使用Junit进行程序的测试是否可行

Junit进行的是单元测试,所以能够在小范围的测试程序的基本的完整性以及稳定性。下面我自行摸索了使用Junit进行单元测试的过程。

1)首先可以在Github上下载Junit的文件,之后再进行环境变量配置。

2)单元测试,选择好索要测试的包。如图操作。

3)需要测试的类必须使用注解@Test这样才能进入测试环节。需要注意的是
setUp();tearDown(); 这两个函数,前者为每次测试前都进行的操作,后者为每次测试后进行的操作。

4)其中我们能看见,通过的数量。双击错误的测试样例可以自动定位到该测试样例第一次错误出现的位置。


0x04 课程收获

面向对象的程序设计课程(Java)开课后,了解了面向对象的特性,我认为比较接近现实生产环境,而且拓展能力较强。动手实现比较得心应手。


0x05 对课程的建议

①第三阶段作业难度、题量的建议

第三阶段的作业,难度方面和知识点挂钩,不存在难度的问题。题量稍微有点少了,尤其是在后面的过程中,实践是很重要的,多出些贴近现实业务逻辑的题,能够提高阅历,还能锻炼业务逻辑代码的编写能力。

②课程内容讲解方面的建议

我建议课程能够在关键的知识点加入老师的看法,不同的知识有不同的理解。一来能够拓展我们的思考角度,二来能够加深映像,这样的学习环境还是不错的。

猜你喜欢

转载自www.cnblogs.com/LeapYear/p/12811344.html
OOP