OO第三单元(最后几周)作业总结
0.前言
这个博客是在完成第三阶段作业后,这个学期的Java课程快结课了,为了总这个学期Java课程而写的,这个阶段的题目题量较少,但难度比之前高了很多,最大不同是没有给出类图了,类的设计要自己做了,这个阶段新东西很多,而且很重要,比如图啊i,树啊,栈啊,但都是浅浅的讲了大概的最基础的用法,我觉得这次作业最主要的还是对之前的内容对这个课程的复习和总结。
1.作业过程总结
①总结三次作业之间的知识迭代关系;
与其说是这三次作业的知识迭代,不如说说这三次作业和之前所学的全部的关联,第九次作业的雨刷程序是从第一次开始接触Java就提出的雨刷程序一步一步进化而来的,考察的是Java最基本的那些编程思想,也是从学习Java开始就一直在接触能使代码变得更好的思想,主要是“开-闭”原则即对扩展是开放的,对修改是封闭的,主要思考能够在不修改原本的程序基础上使程序能添加任意个雨刷,雨刷程序从一开始全在一个类里一修改就要动全部类似c语言的写法进化到了可以添加无数雨刷不影响之前的功能。
第十次作业和第十一次作业虽然分别用到Map和栈这些新东西,但只用了Map和栈的基本方法其本质还是和之前很多题一样考察对字符串的处理,怎么把输入的字符串处理后得到想要的结果,第十次要求的还是把字符串分成一部分一部分然后对比,但第十一次除了这些还要去对分好的部分排序运算。第十次重要的分成一部分一部分第十一次重要的是把分好的部分排序。
②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性;
封装性最主要的是信息隐蔽,即尽可能隐蔽对象的内部细节,只提供这个类能实现的功能。封装性的好处在写代码的时候最直观的就是先写完比较简单的类之后就可以不用去修改比较简单的类,只要知道这个类其他类能用他来干嘛以及怎么用的就行。写出的代码不容易出错,也便于维护。
多态性是靠继承性实现的,继承可以使得子类具有父类的各种属性和方法,当需要处理一连串不同的类而需要处理的部分有很多的相似,特别是处理的类的数量不确定的时候,多态特别好用。
这些技术都是为了实现Java的编程思想而存在的,比如开闭原则要用到多态性。
③作业过程中遇到的问题及解决方法
雨刷题遇到的问题是怎么设计类可以在不改变原代码基础添加新的雨刷种类,改变雨刷类型之后,获得雨刷速度的方法一定不同,当要在不改变这个方法基础上添加雨刷,通过思考发现这两个雨刷系统根本不是一个类型,当都是这个系统的雨刷系统,这样使不同的雨刷系统继承自同一个父类但它们是不同的类,这样可以利用多态性,声明时用父类,实例化用对应系统的类型,这样在操作时就不用考虑是那种雨刷系统,反正都是雨刷系统。
找关键词遇到的问题是怎么分成一部分一部分和去掉注释,去掉注释可以预处理,用正则表达匹配到注释后换成空格,但是,分成一个单词一个单词却有很多干扰,单词间有空格有符号,我是一行一行处理的,发现即使是一行按全部符号去分割也太麻烦,于是干脆用正则表达式一次性把所有的符号都变成空格,然后按空格来分割,但这样还是有我不知道的情况没处理
表达式的问题主要出现在怎么算表达式,我一开始用的是老师在群里发的方法,转换成代码后发现能过样例但过不了测试点,测试了一些式子比如连续减并把得到的顺序输出后发现这个方法在一般情况没办法把中缀表达式变成正确的后缀表达式,但是去括号是可行的,在试过一些乱七八糟的方法比如+-不同级和思考这种错误的结果会在什么情况下出现之后,发现中缀表达式是从左到右运算,但是后缀表达式不是,算后缀表达式部分没错,根据从左到右运算同一个符号并不同级,先进去的符号优先级大于后进去的但是这样改之后直接不能运行报错了,debug发现判断栈顶是否为空写在了把栈顶符号拿出比优先级后面导致栈顶为空的时候也会把栈顶元素拿出(空的时候没东西拿就会出错),把顺序交换就可以正常运行了
④每次作业花费的时间比例
雨刷题用时最短,雨刷大部分时间都在思考类的设计,找关键词用时最长,比其他两次加起来都长一直在考虑怎么分割,表达式测各种式子花的时间最多
⑤对编程过程的严谨性的认识及教训
这个阶段最大的教训就是在表达式那题把判断栈顶是否为空写在了把栈顶符号拿出比优先级前面,因为是写在同一个括号里面用并且链接,所以测了好多例子没发现问题所在,中间还怀疑这个方法不行换了其他方法,其他方法也不行但是不报错,但是从逻辑上就错了。这个问题花了很长时间才发现,在写正则表达式时也经常没注意应该匹配的顺序而匹配出错误的结果,我得到的教训是顺序很重要,一定要注意顺序
2.OO设计心得
①对面向对象三大技术特性之间关系的理解
封装性是面向对象编程一切的基础,继承是实现多态的基础
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
单一职责原则会使代码写起来更简便,在写这部分时考虑的东西只是这部分完成的,考虑的东西会更少,这样更容易写,在这个功能需要重复实现时可以不用再写,直接用,代码会更简洁,可读性会更高。
“开-闭”原则,对扩展是开放的,对修改是封闭的,比如雨刷,未来出现新的车,这个系统还能用不用开发新的就可以省很多资源
③OO编程思维的理解
考虑类的设计时要考虑到未来,要考虑好未来有更多功能时和出问题时,如果不按这些思维来写,未来付出的成本很快就会超过考虑这些花的成本
④类设计心得
在设计类的时候主要考虑类的物理意义和功能
类是一个一个完成的。不能把代码全部写完之后在去调试,在完成一个功能后就要去试这个功能是否已经实现,不然到全写完错了之后要知道自己错的地方就会很麻烦。
3.测试的理解与实践
如果测试不严谨,在实际应用时遇到了没测试的情况就会产生不可预料的结果,结果不可控的代码是没有质量的
4.课程收获
通过这次课程,我对Java更加了解,知道了Java的基本语法,体验用Java写了东西,知道了Java编程的基本思路,尝试过用Java编程思维写程序,会写一些基本的正则表达式,知道了字符串的基本处理方式。我觉得最大的收获是尝试了之前没有尝试过的东西,在一次次尝试后每次新的尝试都会更大胆,更敢放手去写。同时也深刻体会到了写代码的严谨性和测试的重要性。不严谨没测过的代码写出来是没有意义的,只是浪费时间。
5.对课程的建议
我没有什么经验,老师觉得行就行,个人比较希望在作业结束后讲讲大家都错的比较多的地方,以及这题怎么思考是比较合理的
浙公网安备 33010602011771号