理解面向对象思想
面向对象程序设计的基本认识
0.前言:
接触面向对象程序设计这门课程已经有四周有余了,经过四周的网课,直播课,pta作业题等的练习,我对面向对象程序设计有了自己的理解和兴趣。前三次的pta作业让我逐渐从面向过程思维逐步转变为面向对象思维,作业由自己独立思考独立完成,总体完成效果良好。
- 作业过程总结:
1) 第一次作业的题目较为简单,个人感觉更偏向于面向过程的思路,第二次作业和第三次作业的关联较大,第二次作业的7-2,7-3,7-4都是关于日期的问题,
第三次作业的日期类设计更是第二次作业的拓展和衍生,
此外第三次作业的7-1和第二次作业的7-1都是求解一元二次方程,第三次在第二次的基础上,更加贴近于面向对象,更加精妙。
2) 在第一次作业时,面对题目下意识的去一步一步解决,只去解决题目的要求,去设计解题的过程,并没有实际上理解以及运用面向对象的思维,到第二次作业时,开始有类的大致认识,并可以按题目要求写出相应的类和方法来解决问题,并且第一次在解题过程中用到了对象,到第三次作业,已经能够清晰地按面向对象的思路去思考问题,能够读懂类图,并体会到了面向对象的优点。
3) 作业中遇到了很多很多的问题,主要的解决方法是向老师同学求助,和自己网上参考资料解决问题。如:
第一次作业的7-4:输入三角形三条边,判断该三角形为什么类型的三角形。
这个题目中因为三条边长都是双精度浮点型数据,判断的直角三角形时,勾股定理并不适用,在多次报错后,我求助同学,学习到了(a*a + b*b - c*c)<1e-6的方法,解决了这个问题。
第一次作业的7-5:编写程序读取一系列整数,找出它们的最大数,然后计算该数的出现次数,假定输入以0结束。
这个题我想到了用数组来解决,但是没有具体的数组长度,所以我在不断地查找后,学习了arraylist类的基本使用方法,问题迎刃而解。
第三次作业7-2: 日期类设计
这是我目前遇到的最大的一个难题,死磕了三天才解决,
向老师和同学求助,后决定优化算法,在之前的算法中,我使用了多次循环,每次循环都会创建新的数组,导致内存占用过多,内存超限,在简化过后,大大减少了循环次数,使得程序有更好的可用性。
4) 第一次作业和第二次作业我只用了一天的时间,第三次由于算法的复杂,花费时间较多,尽早地做完作业可以更好地拿出时间来研究网课,品味编程的乐趣。
5) 编程是一个极其严谨的事情,在作业的完成过程中,我因为不够严谨出现了各种各样的bug。如:括号的位置不对,循环的内容不对等等,很多时候一个由于不够严谨导致的bug足以让人抓狂!!!
编程一定要养成良好的习惯和严谨的态度,谨小慎微,只有严谨地对待代码才能高效的提高进步速度!共勉!
2.面向对象设计心得
1) 我认为面向对象与生活更加贴切,就比如一个老旧的例子:洗衣服。面向过程来写需要写洗衣服的整个步骤,取衣服,加水,倒洗衣液等等……
而面向对象更像是我写一个人的类,这个类有一个洗衣服的方法,我只需要new一个人的对象就可以实现,而且我如果需要新的一些动作,只需要在类里面加新的方法,相对于面向过程来说大为简便;
2) 面向对象有五大基本原则,目前只接触到了一部分,我分享一个链接,有关五大原则的内容,供日后学习掌握:
3) 面向对象编程思维我还处在一个渐悟的过程中,在学习到面向对象的编程思维后,我发现万事万物都可以归为类,每一个类都是由属性和方法构成的。代码中写的每一句话都不能超过类的范围,很是条理清晰。每一个类都有自己的单一职责,当需要使用类的时候,需要new一个类的对象来实例化,由对象来实现类的方法,就好比类是女娲造人的模具,而对象是一个个活生生的人,具有模具的种种特性。(可能个人的理解并不是那么确切,在日后的学习中会不断完善自己的思维)
3.测试的理解与实践
1) 测试对编码来说是重中之重,检验一个代码的可用性,交互性,准确性等都和测试密不可分。而且很多时候,测试不单单是检测代码是否准确,结果是否无误,而且也在检测代码的实用性,如第三次作业7-2,有个测试点是int最大值2147483647的测试,我最初的代码测试的结果并没有错误,但在计算最大值时,明显感觉耗时长,且电脑负荷变大,这样我开始对自己的算法产生怀疑。经过多次改进,最终在测试时计算速度明显简短,内存也不再超限。
在课上也学习了junit的测试方法,了解了一点简单的白盒测试知识,在日后也会多加关注这方面的内容。
2) 关于测试点,我认为我会设计很多方面,最基本的是边界值,特殊值,普通值,还要设计代码运行的时间,所占的内存,是否按要求输入输出,输入非正常的值的结果,以及我认为可以加一些关于结构的测试点,测试结构是否符合规范。
4.课程收获
面向对象给我打开了新世界的大门,我认为自己最大的收获就是对编程产生了浓厚的兴趣,我开始自发地去学习以及思考,在作业的过程中我的思路也逐渐清晰缜密,自己发现了自己的进步。这是我认为最大的收获。兴趣是最好的老师,在这样一个线上授课的特殊时期更是如此,没有强有力的监督,而这门课程带给我的乐趣是我不断学习的强大动力。
5.对这门课程的建议
个人认为每次直播课的内容要更详细一些,多一些和同学的互动,最好可以设置一个专门的时间用来答疑,因为在同学们自己看慕课以及完成作业时,会碰到各种各样的问题,设置一个专门的时间来答疑,可以给同学提一点建议,减少同学盲目探索的时间。
6.未来一段时间的计划
1) 每次的作业保证质量,保证速度,保证掌握,保证收获;
2) 每天拿1-2小时练习java,学习java的课程;
3) 及时回顾知识,总结每一段的学习内容;
4) 键盘敲烂