南昌航空大学-软件学院-19201527-袁瑾瑜JAVA课程学习总结
0.前言
本次博客针对该学期面向对象程序设计所有学习情况作出总结,结束了这一学期的JAVA课程学习,让我越发感到自身学习速度以及学习热情的不足,我在这11次作业中取得的成绩并不理想,其中甚至有接近三分之一只做出了其中一题,虽然在作业结束后,我通过自学已可以完成作业要求,但这远远无法满足学习的需要,在接下来的学习中,我会更加努力,高效地学习知识。
1.作业过程总结
①.知识迭代关系
第一次作业:题目主要考察了我们对运算符、判别式、逻辑关系的运用,也在某种程度上考察了我们对C语言基础知识的运用,告诉我们C语言对JAVA学习的帮助,以及JAVA和C语言之间的不同。
第二次作业:题目开始渐渐深入,从主函数的编写进入到方法中,该次作业让我意识到JAVA与C语言之间存在很大的差异,C语言函数与JAVA方法之间存在千丝万缕的联系,但又有很多不同。
第三次作业:开始由面向过程改为面向对象,对类的设计也是本次作业的重点,拥有一个设计良好的类,不仅能让代码简洁明了,减少冗杂的变量名,而且能减少错误的出现,让程序更稳定且易于修改。
第五次作业:题目开始考察java编程的深入用法,特别是第一题水文数据效验,考察了正则表达式的使用,为我们深入学习java拉开了序幕
第六次作业:第一题考察的是类的继承,而第二题考察的是正则表达式的运用,类的继承能使代码更加简洁高效,而正则表达式则是验证数据的有效性,替换文本内容,从字符串中提取子字符串的重要手段。
第七次作业:题目开始深入至类的继承与类的多态性,以及正则表达式的运用,通过这次作业,我明白了如何通过编写类来规范自己的程序,使程序更加简洁明了,便于利用。
第九次作业:从这次作业开始,题目不仅仅是考察如何编写一个程序,而是开始考察如何在现有程序基础上对程序进行改写,在未来的工作学习中,我们不可能对每个问题都重新从头开始编写一个崭新的程序,这时,如何对现有程序进行合理的改写便显得十分重要,如何在现有程序基础上添加、修改、删除内容是重中之重,而在改写后保障程序的拓展性和可读性也是十分重要的一环,经过这次作业,我更加体会到了编程规范的重要性,它能大大提高编程的效率,以及未来的重复利用。
第十次作业:统计Java程序中关键词的出现次数,该次作业我至今仍无法独立完成,在使用自己算法时会出现漏算或超时的问题,我会继续努力学习,早日完成该次作业的要求。
第十一次作业:表达式求值,这次作业难度不是很高,但是考察的范围很广,从正则表达式到栈,再到基本的逻辑能力全都有很高的要求,但在花费大量时间后,我还是完成了这题,并可以利用栈的知识去解决其他问题。
②.如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性
在以往的作业中,我可以从主函数入手,先想好如何去调用函数来实现目标,再编写函数与方法来实现目标,就连输入输出的格式都是通过主函数来控制的,这也导致了我程序的拓展性与通用性极其之差,通过这几次作业,我明白了可以通过类与类之间的联系来控制,修改程序,而不必使主函数变得又长又难以阅读。通过使用学到的类的继承,多样性,以及接口,让复杂的问题简单化,即简洁又明了的写出了题目所需的程序。而通过第九次作业,我又认识到了面向对象的封装性、继承性与多态性这三大技术特性在编程中的重要性,通过修改题目给出的样例程序,我明白了使用这三大技术特性能给编程带来的便利,一个良好的程序,不仅能方便人阅读,更方便人修改已有的内容,添加新的内容,删除旧的不便利内容,让程序在使用过程中不断地完善、充实。
③.作业过程中遇到的问题及解决方法
在整个作业中,遇到的最多也是最严重的的问题便是程序出现的逻辑错误,逻辑错误是编程错误里最严重的错误,它不会报错,不会有提示,甚至有时会反馈出正确的结果,但一旦遇见复杂的情况,就会离预期的结果相差十万八千里,在第十一次作业中,我的程序便出现了一个十分严重的逻辑错误,它导致我虽然能通过所有样例的检验,但在复杂的情况下会得到出乎意料的结果,它直接导致了我完成作业的时间翻倍,在通过单步调试的不断排查后,我才发现是其中一个判断条件出错,导致结果出错。
④.每次作业花费的时间比例
在作业过程中,作业花费时间比例在逐渐递增,不仅仅是因为题目变难,更是因为越学习,便越是能体会到自身能力的不足,除非能超越题目的限制,所以,在后续的作业完成过程中,我去自主学习在写作业中发现的自身知识缺陷,不断进行查漏补缺,完善自身的知识储备。
⑤.对编程过程的逻辑严谨性的认识及教训
在渐渐深入的编程中,我越来越意识到逻辑严谨性的重要,现在的代码不过几百行,将来进入工作环境中所要接触的代码要远远超出这一数量成百上千倍。显然,我不能继续像现在这样,通过单步调试和仔细观察来一步步修改,所以,在以后的编程生活中,我会认真的编写每一行代码,保证代码中不出现逻辑错误,让程序在任何情况下都可正常运行。
2.OO设计心得
①.面向过程与面向对象的比较
在我看来,面向对象相比面向过程最大的差别便是通用性,面向过程编写的代码只在该源码中起作用,后续进行类似编写时无法重复利用,浪费了很大的精力与时间,而采用面向对象编程,一次编写便可以在后续需要类似方法时直接调用,节省了时间,也让代码与代码间连接的更加紧密。而且,在程序的拓展性上,面向对象的拓展性要远远大于面向过程,面向对象可以很方便地对已有对象类进行修改,让我们可以十分方便地将已有程序进行拓展修改。
②.面向对象设计的基本原则理解
面向对象的基本原则:单一功能、开闭原则、里氏替换、接口隔离以及依赖反转,分别是指1.类的职责要单一,不能将太多的职责放在一个类中。2. 软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能。3. 在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象4. 要针对抽象层编程,而不要针对具体类编程。5. 使用多个专门的接口来取代一个统一的接口。在目前的学习过程中,我已经深刻体会到了接口隔离和依赖倒转原则的重要性,它们能大大提升编程效率以及程序结构规范性,是编程过程中必不可少的帮手。
③.OO编程思维的理解在我看来,面向对象与面向过程好比是做一把斧头,面向过程是往模子里倒模来制作斧头,虽然一次成型,但模子已经固定,无法再用作其他用途,而面向对象则是制作斧柄,斧刃等等部件,斧柄不仅可以用来做斧子,也可以做木棒或其他工具的把手。在我看来,面向对象的通用性是其优点所在,各个对象之间相互独立,但又相互统一,共同构成一个整体,让程序变得更加完整,实用。
④.类设计心得
在这期间的作业中,我了解了类的继承,多态性,尝试了接口,类的封装,以及工厂模式等类设计模式,在这其中,我认为,对类的设计最重要的一点,便是确保类的层次。在我看来,类之间不应该是平行关系,而是从上往下的层层递进关系,像这样构建类,不仅能让编程过程更加简单,更方便了后续的修改与补正,受益无穷。
3.测试的理解与实践
①.测试对于编码质量的重要性
在编写程序时,我经常会遇到我自己输入的数据测试无误,但在输入测试样例时有误的情况,这是由于问题不仅仅只是表面那么简单,在数据量大起来的时候会出现许多特殊情况,如果不进行测试,写出来的代码便只是一个经常出现错误的废码,对自己以及使用代码的人造成不必要的麻烦。
②.假如让你设计测试用例,你会如何做
如果让我设计测试用例,我会挑选那些比较特殊的值作为测试点,学生在编写完代码后一般会进行普通数据的测试,而那些特殊样例往往不会被注意,所以我会选择特殊数据作为测试样例。同时也需要做一个巨大数据的测试,这样可以筛查出那些效率低的代码,提高程序效率。
4.课程收获
通过这一个学期的学习,我已经从一个对java一窍不通的人,逐渐开始能够运用java进行简单的程序设计,对编写中的java程序进行单步调试,对已有的java程序进行补充和修正,还学习了事件驱动编程以及javafx,拓宽了我对java编程的眼界,更关键的是,我现在拥有了更加完善有效的编程思想,从以前的面向过程步入到面向对象这一个实用的编程思想中,让我能更高效完善地编写出更好的程序。这种思想上的提高是我编程学习生活中的无价之宝,我会深刻记住从课程中学到的知识,并在未来用它创造更多的价值。
5.对课程的建议
在我看来,本课程老师教学水平高,学生也能认真学习内容。但是,我觉得该课程的学时还是有些不足,有许多内容在课上没有时间讲述,需要在课后进行大量自主学习,虽然这也是对我们自主学习的一个训练手段,但过多的自主学习内容难免会留下一些知识缺陷,希望以后类似的课程能够增加更多课时,让我们能有更多时间来思考、学习知识。