南昌航空大学面向对象第三轮作业总结

面向对象第三轮作业总结

前言

  • 关于作业及实验
      对于Blog作业来说并没有什么难度,但是工作量会有一点,因为需要复盘去思考哪里做的不好,要琢磨挺久,不仅要思考哪里做的不好还要进行完善,怎么才能做的合理。
      PTA作业总共11次,其中影响最深刻的就是第一次的压轴题,难度大,而且复杂,很考验逻辑思维,需要花大量时间去修改,因为比较花时间所以写的比较仓促,代码的结构也不太好,后续迭代的难度会有所下降,但是工作量也是有。后续的PTA作业难度会有所下降,不太考研逻辑思维,考验类设计,工作量适中,能有较为充裕的时间去完成。
      实验总共5次,是逐步迭代的,总的来说难度并不大,但是工作量会有点大,因为不能复制,手写到试验系统里不可避免地会出错(希望实验系统的字体能改清晰一点,有些符号区分度不大,分辨不出来),并且很花费时间。
  • 线上课程及线下课程
      线上课程时长并不是很多,算是作为线下课程的一个前置课程,做一个大概了解,和线下课程配和,听起来会更容易一些。线下课程课时适中,总体而言难度并不高,但需要花费时间去练习。

面向对象技术总结

  • 封装
      封装是java三大特性之一,是将属性和方法封装到一个类中,能够设置其内部属性和方法的适用范围,属性一般使用private修饰,方法一般使用public修饰,访问属性一般需要通过get-set来访问,重点是为了保护数据不被外界轻易更改。封装很好的封装提升了代码的安全性和可维护性,通过统一接口控制数据操作,减少了程序漏洞。封装是一个基础,所以在每次pta和实验中都会涉及,掌握的比较好。
      对封装是基本掌握了,但在复杂项目中怎么合理的分装哪些属性和方法到一个类中这方面的经验比较匮乏,需要配合单一职责进一步了解。

  • 继承
      继承也是java三大特性之一,其可以实现代码复,通过extends关键字,可以使一个类继承父类的属性和方法(前提是属性和方法不是私有的),这个类就是子类,子类中可以有父类没有的方法和属性,如果复写了父类中的方法和属性那么继承下来的属性和方法就会被隐藏,如果复写的使静态方法和属性那么就不是被隐藏而是被重新定义。在子类中可以使用super调用父类的方法(包括被隐藏的方法)。通过十几次pta和实验我深刻理解到了继承带来的好处,这大大提升了我的效率,可以不必写重复代码,并且使用继承结构更加清晰,但是耦合性会较高。继承不仅仅是复写,我认为其重在和多态配合使用。
      对final类和final方法与继承的限制理解不够透彻,例如在什么场景下应该将类或方法声明为final,以及这样做会对继承体系产生哪些具体影响,还需要进一步学习和实践。对于 java 不支持多继承导致的问题,虽然知道可以通过接口实现来替代,但在实际应用中,如何巧妙地运用接口实现多继承的效果,还缺乏足够的经验和技巧。

  • 多态
      多态是基于继承基础上引申出来的,同样也是java的三大特性之一。学习过程中,掌握了父类引用指向子类对象的向上转型操作,以及通过instanceof运算符进行类型判断的方法。同时,理解了动态绑定机制,即在程序运行时根据对象的实际类型来确定调用哪个类的方法,而不是在编译时就确定。在PTA的迭代中深刻理解到了多态和继承的好处,可以使代码具有更强的扩展性和可维护性。当新增子类或修改子类的行为时,无需修改调用方的代码,这能够很好的符合开闭原则。

  • 抽象类
      抽象类是包含抽象方法的特殊类,它不能被实例化,必须由子类实现其抽象方法。由abstract关键字定义抽象类和抽象方法,且抽象类中可以包含非抽象方法和属性,为子类提供公共的实现逻辑。 这是当父类中的方法不做具体实现时使用,将方法定义为抽象交由子类实现,相当于提供了一个规范。在pta作业中有一次需要定义Shape抽象类,Shape只有其子类的共同属性-颜色和他们的共同getArea方法,由Circle、Rectangle等子类继承Shape类并实现getArea方法。
      在实际应用中,对于抽象类和接口的适用场景区分不够清晰,有时会错误地选择抽象类或接口来定义类的行为规范,还需要提高这一方面的经验。

  • 接口
      接口就像一份 “行为说明书”,里面写着类必须要完成的任务(也就是抽象方法)。需要通过interface关键字声明,接口是对方法的抽象,里面不能包含属性。具体实现类需要使用implements来实现接口。接口是实现 “行为抽象” 的重要工具,它变相让java实现了多继承,使类能够实现多个接口,从而具备多种行为。通过接口,可以将不同类的共同行为提取出来,实现代码的解耦和复用。在实验中,通过接口实现添加新功能来实现扩展。也学习了一些java自带的接口例如Comparable和Comparator接口,用于实现排序。

  • 集合框架
      Java 集合框架提供了丰富的数据结构和操作方法,用于高效地处理数据集合。我系统学习了Collection接口体系(包括List、Set、Queue)和Map接口的特点和使用场景,掌握了常用实现类如ArrayList、LinkedList、HashSet、HashMap等的适用场景。在pta作业中会经常使用ArrayList和LinkedList,Map来存储数据。集合框架极大地简化了数据处理的流程,不同的集合类适用于不同的场景。例如,ArrayList适合频繁查询操作,LinkedList适合频繁插入和删除操作,HashMap适合快速查找键值对。

  • 异常处理
      异常处理机制用于捕获和处理程序运行时出现的错误,确保程序的稳定性和健壮性。掌握了try-catch-finally结构的使用方法,以及如何自定义异常类来处理特定的业务逻辑错误。同时,明确了throw和throws的区别,throw用于手动抛出异常,throws用于声明方法可能抛出的异常。异常处理使程序能够优雅地应对运行时错误,通过合理地捕获和处理异常,可以避免程序因错误而崩溃,同时为用户提供友好的错误提示信息。

  • javaFX
      javaFX 是 java 用于构建图形界面的强大框架,我学习了各种界面组件的使用方法,包括按钮、标签、文本框、列表视图等,掌握了布局管理器如BorderPane、GridPane、FlowPane的布局原理和应用场景。同时,学会了通过事件监听器和 Lambda 表达式处理用户交互事件。在实验5中就是用了Shape,ListView,Timeline等组件来实现动物进电器。

踩坑心得

  最开始踩得大坑就是第一次电梯程序,对题目的解读不清晰就去做题,不不仅效率低下而且理解出现误差,耗费了大量时间却做的是无用功,后续还要修改逻辑,并且代码结构不合理,对功能的划分不清晰,一个方法解决多个问题,不仅嵌套多而且不易读懂,维护也更加困难。其次初始化也踩过坑,再设计类中的属性时没有对ArrayList进行初始化,直接调用方法添加数据导致报错。

  • 经验教训
      经过第一次电梯系统设计,深刻理解到了对需求得分析和把握十分重要,不按照需求做即使写出来也是竹篮打水一场空,并且对于功能的划分要清晰,要符合单一职责原则,这样可以便于维护和阅读。
      注释问题,在设计航空货运时并没有写多少注释,开始是能够记住,过了一个星期之后再来进行扩展时就看不太懂了,还需要从头开始梳理代码,但因为拆分的比较合理,没有太多if-else嵌套,梳理起来会较为容易。所以注释问题要重视,这对阅读帮助很大,并且进行迭代和修改时也会更加容易。
      经过这么多次迭代训练,知道了客户的需求不是一尘不变的,好的代码需要能够进行扩展,代码的设计是否符合开闭原则就显得尤为重要,并且要对一些可能会扩展的功能做好设计,比如提前设计好继承关系,使用多态,后续进行扩展就事半功倍。
      还有就是初始化的问题,这个出过两次错,并且第二次没有第一时间意识到,调式时也没有注意到。对于类内的属性类一定要牢记初始化,或者要对其进行判断是否为空

改进建议和总结

  • 改进建议
      1.首先是希望实验系统的字体换一下,实验系统的中英文字符看起来差别不是很大,并且字符也小有时候写错了也看不出来,后续调试也很麻烦。
      2.javaFX教学希望能够更完整一些,上课笼统的听一遍记忆并不是很深刻,没有使用过用起来也会各种出错,并且后续还有javaFX的大作业,希望难度能降低一点,不仅是javaFX使用不熟练而且临近期末有各种考试还要复习,时间比较紧凑。
      3.希望能够深入讲解一下集合框架或者是pta里加入一些使用集合框架的题目,目前使用的只有ArrayList,LinkedList,Map,对其他的集合不太熟悉,只是有一个大概的了解。
  • 总结
      总的来说,通过这门课程我学习掌握了 java 面向对象编程核心技术,包括封装、继承、多态的应用,以及抽象类、接口的设计;熟练运用集合框架处理数据,掌握异常处理机制保障程序健壮性,还初步具备 javaFX 图形界面开发能力。并且对于oop的7大设计原则都了解和掌握了,写出来的代码能够较好的符合这七大原则。并且还了解到了23设计模式的几种,例如单例,工厂模式,观察者模式等。
posted @ 2025-06-18 21:16  0486  阅读(23)  评论(0)    收藏  举报