前言
本次博客主要是针对面向对象编程学习(Java)课程的总结,作为最后阶段的反思,我会以PTA平台的练习作业、各次实验与网络课程为评估对象,望未来能更上一层楼。
一.作业过程总结
①总结三次作业之间的知识迭代关系
第一次作业是关于之前课上的雨刷换挡的实例,这次的试题添加的新元素是结合所学的“开-闭原则”,对原代码进行重构,以使其实现多重功能。本次考察的重点是抽象类与多态在“开-闭原则”中的应用。
第二次作业是统计Java程序代码中的关键字,与之前的Java特性不同的是,本次试题重点在于数据结构部分(Map、List、Set等接口),也使我们对于字符串的使用运用多了一种更加快速高效的“武器”,配合部分正则表达式的设计,使本题被赋予了从基础特性到深层结构的深度。
第三次作业是使用栈对简单的四则运算表达式求值,难点在于对栈结构的掌握和表达式的各层次处理,所以这一次是上一次作业的进阶版,从基础结构到更深层一些的结构。
②如何通过作业逐步从面向过程过渡到面向对象
本学期课程从第一次Java语法+面向过程思想开始,一点一点降低面向对象的整体流函数代码设计方式,取而代之的是类的设计、继承、多态、“单一职责原则”、“开-闭原则”等面向对象的思想方式,通过一次一次的讲解和实践,让我们在短时间熟悉理解并掌握。如今我们已经习惯于通过类间关系处理不同功能的问题。
③作业过程中遇到的问题及解决方法
第一次作业中遇到的问题是一开始并不知道如何很好的运用“开-闭原则”,以达到不同功能的叠加操作。在后期的不断思考和学习中,我想到了可以使用之前学习了抽象类与多态处理,使用一个抽象类控制代理,而不同的模式继承统一的抽象类,则成功实现了功能。
第二次作业中的问题是在关键字统计时,对于注释的处理一直无法达到要求,因为我是对每一个单词进行切割识别,那么当多行注释时不易识别,后来换成了对单词的每个字母切割并且更换了正则表达式的捕获方法,最后获得了成功。
第三次作业遇到了问题在于中缀表达式中符号和整数入栈后的分析比较与计算,在搜索了栈的原理和相关算法后,还是有一些表达式无法正确计算,在后期对算法中括号、加减与乘除关键部分算法不断的分析与测试,终于发现了问题在于优先级与括号的入栈弹出以及计算次数不正确,发现问题后正确地修改也达到了功能需求。
④每次作业花费的时间比例
第一次作业大约用了5小时左右,第二次作业大约用了15小时,第三次作业前后大约用了15小时左右。
⑤对编程过程的逻辑严谨性的认识及教训
对于编程逻辑严谨性来说,首先在于对题目需求的正确理解,如果没有完整的理解题意,最终的结果只能是南辕北辙。其次在于题目功能要求中的输出要求,比如第三次的表达式求值:输出要求中是“表达式 = 结果”,也就是等号两边还有两个空格,这里导致我一开始总是无法通过测试点,这个坑是必须要注意的。最后也是最重要的是,在代码对功能的实现上,应遵循各原则对代码的效率进行优化,在逻辑上尽量简化以及保持健壮性,否则在用户的使用过程中一旦发生问题难以维护,或者是一个逻辑漏洞,在修改时可能要极大的工程,是十分不应该发生的。
二.OO设计心得
我们从“面向过程”思维而来,即注重代码内部功能如何实现算法设计的过程,对于整体来说统一性较高,向“面向对象”而去。“面向对象”注重的是对整体的选择分类处理,先决逻辑性更高,每个分类专注自身功能,对于整体更易解决与处理不同功能的关系。
通过本课的讲解和练习,我体会到最基本的原则是“单一职责原则”:对于分配好的类来说,每个类的逻辑上是负责其某职责的,只能执行应有的功能,不能越界干扰其他类,这也是存在的底层逻辑。在编写代码时,对于类的设计,应贯彻各原则,使得自己的代码得到不同程度的优化。
在具体设计中,除了最基本的代码规范,原则应用,还应做到尽可能的效率提高与简洁度并存,因为面对不同的功能需求,我们除了要不同的方式去应对,还要做好可复用的打算,降低类间关系的耦合性,又有利于我们完成高质量代码的编写。
三.测试的理解与实践
①测试对于编码质量的重要性
(一)对基本功能是否能够实现的判断。由于具有完整的测试功能,我们才能找到错误并解决错误,否则部分逻辑错误极难发现;
(二)在于对已经完成基本功能的程序的执行效率的提高。基于测试的时间等指标,我们通过改进算法来优化执行时间,减少存储空间的消耗;
(三)不断的测试,也是在测试代码的健壮性,如何应对未来不同用户的复杂使用情况,为了提供更优质的体验,代码测试是必不可少的。
②假如让你设计测试用例,你会如何做
第一,基本功能的测试点必须面面俱到,如果连基本功能都无法满足,那么此工程显然是不合格的;
第二,我会考虑在基本功能之外的交互设计,编程应用的本质就是面向人类与制造提供更友好更智能高效的处理能力。基于人性化考量,可以对人机交互的层面对提交代码给予更高的宽容度,也更有利于课程兴趣的培养和学员思维的创造。
四.课程收获
在本课程开始前,我是充满了信心和期待,但当真正进入课程的学习,我才体会到没有什么专业技能是可以呢轻轻松松掌握的,学会基本的Java语法并不难,想要学好,能够利用Java语言和面向对象思想去处理各种复杂问题则需要我们坚持不懈的毅力。
本课最大的特点是采用翻转课堂的教学模式,自主学习加教师指导,使我们学习效率变高,也对我们的自学与自律提出了更高的要求,我们必须积极跟上并怀抱着良好的求学态度。
对于作业试题而言,测试难度按层级递增,对我们来说富有挑战性,可也是最高效的提升能力的方法,面对困难是暂时的,就更加需要我们想尽办法去花时间学习,去掌握应用知识。
总体而言,通过本课程,我不但掌握了Java的大部分基础语法,同时也养成了面对困难迎难而上的积极态度。即使有暂时的阻碍,我们通过不断的尝试与知识汲取,总是能够克服的。在学习中我也意识到,我们都是很渺小很简单的个体,在编程之路上,未来还有很长的时间要度过,我们只有不断学习不断思考与实践才不会被时代抛弃。
五.对课程的建议
我的建议是:为了提高学习效率与团队协作能力,可通过对课程进度与学生自觉性的判断,尝试创立小组学习,在每周在独立完成作业的情况下,对作业错误与优化的处理进行针对性交流,并整理文本,提供难以解决的共性问题给老师,再通过老师的讲解可以提升整体的学习效率。