第三阶段作业总结
0.前言:
本阶段作业是JAVA这门课程的最后一个阶段,作业难度较大,三次作业得分都不高,总体来说本次作业完成情况不是很好,但是在写的过程中,查了很多资料,虽然不咋会写但是对代码的重构,代码的设计,代码的复用性都有了更好的理解和掌握,在JAVA这门课程的最后阶段,本次作业是前面知识内容的整合和总结,并且也为之后有关java的学习打开了新的大门。
1.作业总结过程:
这三次作业难度提升非常明显,大量的知识结构和代码数量,让我有些难以暇接。
第一次作业要求对程序进行重构,在题目中所给的雨刷器基础代码的上,对代码功能进行拓展和升级。
第二次作业是统计Java程序中关键词出现的次数,检测一段代码中,53个java程序出现的次数。
第三次作业是表达式求值,要求使用数据结构的栈,从键盘输入一个合法的表达式,对该表达式进行求值并输出。
之前上课,老师有提到过雨刷器相关的代码,但是内容其实大多是简单的继承为主,也提交过能实现雨刷器基本功能的课堂作业代码,比较特殊的是介绍了一种开放封闭原则,其核心思想是:软件实体是可扩展的,而不可修改。也就是说,对扩展开放,对修改封闭。开放封闭原则主要体现在两个方面:1.对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况;2.对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。 实现开放封闭原则的核心思想就是对抽象编程,而不对具体编程,因为抽象是相对稳定的。让类依赖于固定的抽象,所以修改就是封闭的;而通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过覆写其方法来改变其固有行为,实现新的拓展方法,所以就是开放的。所以就需要用封闭开放原则来封闭变化满足需求,同时还能保持软件内部的封装体系稳定,不被需求的变化影响。 面向对象编程的三大技术特性在每一次的编程中都能加深理解,第一次的代码重构中,要添加新的雨刷系统类,要在新的类基础上添加功能,但是两种类又有很多相似之处,这时就体现了继承的必要性和实用性,新的雨刷类继承旧的雨刷类,然后再在主函数中选择不同的雨刷系统,从而选择不同的雨刷类别。多态体现在方法的重载和重写中,第三次作业中,有一个判断是否为数字的方法,参数类型是char,但是在代码中参数类型不一定是char,有可能是String,所以就需要用到重载,则需要些两种不同参数的方法,来解决这个问题。例如可以像下面这样写:
public static boolean isOperator(char chr) {
if (chr == '+' || chr == '-' || chr == '*' || chr == '/')
return true;
else
return false;
}
或是
public static boolean isOperator(String str) {
if (str == "+" || str == "-" || str == "*" || str == "/")
return true;
else
return false;
}
当然也可以用枚举,然后把关键词都专门放在里面,并设计计数的方法,不过相较于上面的方法,则没有那么简单明了了。
本次周期的作业需要自行设计程序,所以花费的时间较以往来说更多一些,设计代码思路花费一到两天时间,实现代码则更难,之后则要反复不断的进行Debug。编程的严谨性依旧是不容忽视的一个问题,但第二次作业中,Java的53个关键字若不够严谨,很容易导致传入HashMap时多几个空白符,导致多次出现错误,不深入去看去探索跟本找不出问题所在,需要多次测试才能找到最终问题所在。第三次作业中甚至还需要用到逆波兰表达式,正则表达式判断输入错误情况。其中逆波兰表达式刚开始一点也不懂,上网查资料、找博客、找例题,才懂了一点皮毛,东拼西凑地去写,但还不是很明白其中的原理。
2.OO设计心得:
(1).在这个学期里,我们依次学习了,单一职责、开闭原则、封装、继承、多态、接口、正则表达式、数据结构栈、ava里的map、list、还有最后学的图形界面设计,总之这个学期学到的东西挺多的,都会那么一点点但是都不是很精通,这样好在都懂一点、不至于完全不知道,但不好就在于多而不精,还要深入学习了解才行。
(2).在这么多次的作业中,对oo的设计有了一定的了解,也知晓了一点static关键字的用法,比如在第三次作业中,处理表达式的类是一个工具类,则可以把方法定义为static,在调用方法的时候使用“类名.方法名”的方式来调用它,减少了创建一些不必要的对象。
(3).对类进行功能性详细性的分类,在实现代码上的效率会事半功倍,这几次大作业均是由我们自己设计类,比如在设计的时候,可以根据前几次的给的UML类图,可以总结一些对类的分类方法,尽量满足单一职责,并且让类更加丰富,不仅仅只是一两个类就用来解决一个问题。例如对表达式求值,就可以设计测试类,表达式处理类,表达式判断类,表达式输出类。每个类都有自己相对应的职责。这在我们对代码的维护上也很有帮助。例如测试类里出错了,我们可以迅速找到这个模块进行修改,大大地提升了效率、节省了很多找错的时间。
(4).接口隔离原则也是一个重要的点,其核心思想是:使用多个小的专门的接口,尽量避免使用一个大的总接口。 百度上是这么来介绍它的:“使用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。”

这样的话就能很好的满足接口隔离的原则了,调用者只能访问它自己的方法,不能访问到不应该访问的方法。这对于接口来说是一个很小的知识点但是很有必要。
3.测试的理解与实践:
测试总是每次代码实现后总要面临的一个问题,我们只有在测试的过程中才能发现代码的问题所在,在我们编程的过程中往往会为了实现某个步骤而去写某段代码,但不知这样的思维模式下,往往可能会忽略很多特殊情况和细节,导致程序的运行中出现错误甚至崩溃。我们也可以设置system.out.print来寻找错误,但是要真的实现精准测试,我们必须要学会和熟练运用Debug,一步一步检查每一个值,表达式的变化,找到异常的数值,进行修改,debug是编程中的一大利器,能够掌握的话那能使我们的效率大大提升。
4.课程收获:
这一学期学习JAVA有了差不多快半年了,对于面向对象这样的程序设计思维有了更深一步的了解了,培养了面向对象的编程思维,学习到了java语言的特点之处,之前学C语言,现在这两个语言都一知半解,一个面向对象,一个面向过程,这样互相促进,但又各有各的特点,很是考验我们对这两大思维的理解,作为软件专业的学生,很是锻炼我们的思维能力。虽然JAVA学习暂时告一段落,但是真正的JAVA学习之路还任重而道远。
5.对课程的建议:
没有什么其他新的建议,就是和之前的一样,希望老师在加深JAVA学习难度和进度的同时,能兼顾一下基础知识,毕竟我觉得编程基础打好了,学什么语言都不困难,基础就是基石,有了“基石”,“房子”才能修起来,才能盖得更高!

浙公网安备 33010602011771号