面向对象课程总结

前言

转眼间就到了学期末,这学期的面向对象过程课程也要接近尾声了。通过这一学期的学习,我感觉到我所掌握到的不仅仅是一门语言的学习,更是掌握到面向对象设计的核心与内涵。与上学期所学的C语言不同,我认为面向对象更侧重于如何去设计,通过一个合理的设计去得到一个能解决问题的最简单、最具有实效性的方法。在设计过程中,我们不仅仅只是考虑当下它能解决的问题,更要考虑未来这个设计的实用性(即扩展),以及一些未知因素的干扰。

从本学期的学习内容与任务来看,显然比上学期的难度要大,对于学生的自主学习能力有了很大的要求(语法基本靠学生自学),PTA题目的数量虽然不如上学期多,但代码量却大大增加了,往往是几百行的代码。除了题目集五、六、七的电梯题目有较大的算法难度外,作业大部分也更侧重于设计。实验二到实验四虽然都是相同的题目背景,但是题目难度和设计要求则逐层递进,从简单的类与对象的设计,再到继承和多态再到抽象类和接口,体现了知识的由易到难,与PTA的作业一起,帮助我巩固对面向对象知识的掌握。这学期除了平时课堂老师的讲解(线下课程),还添加了学堂在线的(线上课程)课程,在课后也对我的学习有了很大的帮助。Blog的作业也帮助我对每一阶段学习进行了总结。

面向对象技术的总结

首先,通过面向对象课程的学习,我主要学习到了以下内容,并对面向对象技术有了以下认识:
1.首先,通过本学期面向对象课程的学习,我主要学会了如何使用面向对象技术进行编程,了解到了面向对象的七大原则:单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)、迪米特法则(LoD)合成复用原则(CRP)等,这七大原则贯穿了我整个面向对象的学习过程。在这几个技术中,我认为开闭原则(OCP)单一职责原则(SRP)是最总要的。开闭原则(OCP)的核心思想:软件实体应 “对扩展开放,对修改关闭”。即通过抽象和多态设计系统,允许新增功能时无需修改原有代码,仅通过扩展(如新增类、接口实现)实现。这恰好与面向对象的核心思想相吻合,而单一职责原则(SRP)则为这个技术提供了重要的前提,除此之外,合成复用(CRP)、依赖倒置(DIP)、里氏代换(LSP)等原则也很重要,它们让代码更具可维护性、可扩展性以及可复用性。在几次PTA的作业中,题目也都着重强调了要使用这些原则在代码中。在平时敲代码的时候不难发现,如果在写代码前有一个良好的设计(比如充分考虑了开闭原则、单一职责等的实现),就会发现代码的结构就会很清晰、代码的运行效率就会很高、复杂度就会很低。如果后面要对代码进行修改,也不必对之前的进行修改,从而可能增加工作量。除此之外,在几次的实验中,也体现出来对这几项原则的运用。通过学习并运用这些原则,对代码的质量有了很大的提高。当然,在实际应用中,应充分考虑当下背景,需根据场景权衡使用,避免过度设计。例如,过度依赖接口隔离可能导致接口泛滥,而过度追求组合可能增加系统复杂度。这样才能设计一个良好的代码。

2.在这个面向对象学习过程中,从细化的知识点上讲,主要学习了封装、继承、多态、抽象类、接口、集合框架、异常JavaFx等相关内容。在封装里,主要学习了使用private、public的 getter/setter 方法来对类内部的属性及方法进行保护,保护数据不被外部随意修改,降低类之间的耦合度,便于代码维护。继承里则学会了使用关键字extends,使子类继承自父类的属性和方法,实现代码复用和层次化设计。在多态里面则通过继承和接口的使用,调用同一方法表现出不同行为,同样也实现了代码的复用。而抽象类也常和上面的继承和多态相联系,通常写一个抽象的父类,通过不同的子类继承该父类的属性方法,实现了多态,提高了代码的复用性。在接口里,则学会了使用implements实现相应的接口,从而实现多继承,定义行为规范,实现解耦。在集合框架里面,主要学会了List(LinkedList,ArrayList),在平时的题目中多有用到这个来储蓄数据,十分的便捷方便。在异常这一块,主要了解了有哪些异常,以及如何通过通过异常处理优雅的处理错误。JavaFx的相关内容则通过同学们的翻转课堂有了大致的了解,在大作业中也通过航空物流界面的设计也有了深入的了解和掌握。

当然,在面向对象的学习过程中,也存在一些欠缺,比如,对于单一职责原(SRP)则并没有掌握的很好,没有很好的实现代码的复用,这导致在使用SourceMonitor进行代码质量检测时,代码的复杂度很高,代码的行数也很多,所以这是我今后学习仍要加强的地方。然后对于使用编译器进行调试也不太熟练,导致在寻找代码问题的地方时就比较麻烦、费力。还有就是对于集合框架里面的Set(如HashSet、TreeSet)、Map(如HashMap、TreeMap)没有很好的掌握,只处于了解的阶段,应在今后的代码里面多进行使用从而掌握它们。

采坑心得

在面向对象学习过程中,经过几次PTA的作业、实验和考试,我踩了不少的坑,也总结了一些心得

  1. 对于没有类图的题目,应该先充分理解好题目意思,理清题目间的类的关系,设计好类后再敲代码。在题目集八的雨刷程序功能扩张设计题目中,因为没有仔细读题目,也没在敲代码前设计好类,就直接上手写代码,结过导致本来可以直接使用上次的代码的,结果就修修改改了一大堆,还引发了上次没有的问题,修改了好多次才改对。其实仔细阅读题目与真正了解开闭原则后,其实就会发现完全可以服用上次的代码,通过继承、多态、抽象等技术重新设计另外一个雨刷系统和代理类,这样既能避免上次修改好的代码因为被修改而造成新的问题的出现,还减少了代码量,对于以后雨刷系统的再扩展也更方便。在这次惨淡的经历中,我也收获了另外一个采坑心得:那就是开闭原则很总要,要深刻领会其内涵,才能真正做到使用它
  2. 代码注释、属性方法命名很重要。Java的代码量通常的很多,如果不加上注释的话,在代码出现了问题的话并且你已经很久没有去看这个代码的话,这导致修改代码会很吃力,在电梯迭代题目的时候,因为主要是在PIA那上面敲的代码,几百行的代码堆在一起,并且也有一堆的if-else语句(主要考虑电梯运行的不同情况)没标好注释,导致每次去找代码的逻辑错误,都很吃力,眼睛都要看花了。所以,代码注释很重要,这能大大提升代码的可读性和可维护性。另外,代码在各种属性、变量命名上也很重要。记的在第三次电梯迭代的时候,因为在判断条件时打错变量命名(当时有两个相似的变量名,一个命名p,另外一个命名p1),导致在哪里找了好久的错误,最后自己误打误撞设置了一组测试数据才发现问题,所以在设计这些名字时不能图方便省事,要设计好能区分名字,才在敲代码的时候不容易出错。
  3. 单一职责(SRP)很重要。在电梯迭代题目中,由于没有细化好职责,导致有的方法里面代码很长,if-else语句很多,有的时候因为代码过长而运行不了(PTA有限制),在测试代码质量的时候也发现代码的复杂度很高,在后面的题目集的时候,因为在敲代码的时候有重复考虑了单一职责原则,这一点就改善了很多。所以敲代码前一定要把思路理清,能拆开的方法尽量拆开,减少耦合度,真正实现单一职责。
  4. 学会使用Eclipse、IDEA等编译器敲代码。学会使用这些编译器敲代码,会十分省时省力
  5. 遇到不会的问题时可以寻求同学的帮助,总比自己一个人死磕在哪里好。我在电梯迭代的时候,常常会碰到题目上的测试点过了,但是题目还是没过,于是便找同学测数据,或者找同学询问不懂的点。同学间的互帮互助可以很快的解决问题,但是不能完全依靠同学,可以找他们测数据,或者有疑问的地方可以向他们请教,这样才能真正提升自己的能力。
  6. 学会设置测试用例。在电梯迭代题目的时候,就经常出现测试用例都过了但是提交后代码整体还是没过,后面还是自己试了好多测试数据才通过的。如果学会正确设置测试数据,学会设置边界测试数据,可以很快的找到代码的问题所在

改进建议

通过学习面向对象这门课程,我对这门课程的改进有以下建议:

  1. PTA后期的题目可以不用给出类图,更能考验同学们对面向对象设计原则的掌握
  2. PTA题目的测试数据可以多设置几组,考虑到各个方面的问题
  3. 实验的题目要求可以阐述清晰一些,这样更方便同学去敲代码

总结

通过面向对象这门课程的学习,我收获了不少。主要是学会了面向对象的设计方式和学会设置测试用例,虽然前期的题目集有时候比较难解决起来也比较吃力,但总体上对我的编程能力上有了很大的提高,总之收获不少,对于今后的学习有很大的帮助。

posted @ 2025-06-21 10:22  qiyiguo198  阅读(22)  评论(0)    收藏  举报