面向对象课程学习总结

前言

本次bolg对本学期面向对象课程的总结,更多的是这一学期下来的心得体会。

课程工作量

课程包含5次实验,11次PTA题目集,学堂在线线上课程,Java翻转课堂等,内容很多但是收获也很大。

课程难度

刚开始接触面向对象时感觉挺难尤其是在做pta电梯的题目,当时都快搞崩溃了,写了几天都没写出来,但是逐渐的也适应了这种模式,学的越来越轻松,也爱上了这门课程。

  • 实验:对学习的知识进行应用,围绕大象装冰箱一步一步迭代,从单一职责到抽象类接口,还有最后的JavaFx。难度都不大,在做实验和写实验报告的过程中巩固了知识点

  • PTA题目集:有一定难度,每次题目集的最后一题会进行迭代,从刚开始的电梯调度航空货运管理系统,难度有所降低。

  • Blog作业:总共三次blog,对前面题目集的总结,学到的东西,明白自己的不足,在写blog中对自己掌握和未掌握的东西知道更加深刻,总结自己的错误,避免重蹈覆辙。

面向对象技术的总结

本学期通过面向对象课程学到了面向对象的六大设计原则(SRP,OCP,LSP,DIP,CRP,LOD),课程核心内容 封装,继承,多态,抽象类,接口,集合框架,异常,JavaFx,还有一些设计模式如单例,工厂等。

  • 封装:

    1.封装是面向对象的基础,能提高代码的安全性和可维护性。使用private对类中属性进行修饰(一般)避免外界直接访问,需要访问则是通过get和set方法,提高了安全性。

  • 继承:

    1.子类通过extends继承父类属性和方法,使用super关键字调用父类构造器和方法,理解继承的层次结构(如Object是所有类的基类)。

    2.继承实现了代码复用,但也可能导致类耦合度高(如 “is-a” 关系的误用)。例如,子类不应盲目继承父类的所有方法,需遵循 “里氏替换原则”。

    3.对继承的使用场景了解不到位,有些类中有相似的属性和方法,纠结要不要做成父类。本质上还是对里氏替换原则的理解不够

  • 多态:

    1.与抽象类,继承,接口,搭配使用,子类重写父类方法,使用时通过上转型,通过一个方法名即可调用所需任一子类中的这个方法,实现 “一个接口,多种实现”。

    2.多态是面向对象设计的核心,能提高代码扩展性(如策略模式中通过多态切换算法)。

    3.对运行时多态编译时多态理解不够深入。

  • 抽象类:

    1.抽象类包含抽象方法(无实现)和普通方法,不能直接实例化,需子类继承并实现抽象方法。例如,定义AbstractAnimal抽象类,强制子类实现move()方法。

    2.抽象类适用于 “部分实现,部分扩展” 的场景,允许包含构造器和成员变量,比接口更灵活,增加代码的复用性和可扩展性

  • 接口:

    1.学习了接口全由抽象方法(Java 8 后支持默认方法和静态方法)组成,类通过implements实现接口,支持多实现(如class Car implements Driveable, Serializable)。

    2.接口是 “行为契约”,适合定义标准(如Comparator接口),实现解耦和插件化设计。

    3.一般一个接口就放一个方法,除非方法之间的耦合性非常强,比如是做事情的步骤,缺一不可,这时可以将多个方法放入一个接口。

  • 集合框架:

    1.学习了集合框架中的ArrayList,LinkedList,并在平常编程中熟练运用。

    2.对其他如Map,set等使用不多,只停留在了解上。

    3.集合框架是非常好用的工具,要对其进行深入学习提高编程效率

  • 异常:

    1.掌握异常体系(Throwable→Exception→RuntimeException/ 受检异常),使用try-catch-finally处理异常。

    2.异常处理应遵循 “捕获具体异常”“不吞噬异常” 等原则,受检异常(如IOException)强制调用者处理,运行时异常(如NullPointerException)用于程序逻辑错误。

    3.对异常链(initCause)和异常日志记录(如结合Logger)的规范使用不足,未掌握try-with-resources语法(自动关闭资源,如文件流)的底层实现原理。

  • JavaFx:

    1.了解 JavaFX 的基本控件(Button、Label、TableView)、布局(BorderPane、GridPane)和事件处理(匿名内部类或 lambda),能开发简单界面

    2.JavaFX 是 Java 的官方 GUI 框架,相比 Swing 更现代化,支持 FXML(类似 HTML 的声明式界面)和数据绑定。

    3.JavaFx主要是通过翻转课堂来学习的,通过同学们讲解的例子能明白JavaFx中组件的使用方法,和使用场景,自己也需要上去讲解,在学习知识的过程中也锻炼了自己的表达能力

  • SRP(单一职责):

    1.单一职责原则强调一个类应该仅有一个引起它变化的原因,即一个类只负责一项职责。在学习过程中,我掌握了判断职责的方法,例如通过分析类的方法功能,如果多个方法功能差异较大,就可能存在职责不单一的问题。同时,学会了将职责拆分到不同类中,以降低类的复杂性。

    2.该原则能有效降低类的耦合度,提高代码的可维护性和可扩展性。当需求变化涉及某一职责时,只需要修改对应的类,而不会影响其他类。比如在电梯调度中电梯和队列分开,在航空货运管理系中,将商品信息管理和订单处理分别放在不同类中,若后续需要调整商品信息的展示逻辑,不会干扰订单处理流程。

    3.容易出现过度拆分拆分不足的情况。对于复杂业务逻辑,如何合理划分职责,仍缺乏足够的实践经验

  • OCP(开闭原则):

    1.开闭原则要求软件实体(类、模块、函数等)对扩展开放,对修改关闭。通过抽象和接口,将可变部分封装在实现类中,当需求变更时,通过新增实现类来扩展功能,而无需修改原有代码。比如定义一个支付接口,后续新增微信支付、支付宝支付等实现类,不影响已有的支付调用逻辑。

    2.极大提升了软件的可维护性可扩展性,减少因需求变化带来的代码修改风险,降低维护成本。在长期迭代的项目中,遵循开闭原则能使系统架构保持稳定。

    3.在应用开闭原则时,对抽象的设计能力不足,有时难以准确预判未来可能扩展方向在航空货运管理系统中深有体会,导致抽象层次不够合理,影响后续扩展。

  • LSP(里氏替换原则):

    1.里氏替换原则指出,所有引用父类对象的地方必须能透明地使用其子类的对象,即子类必须完全实现父类的抽象方法,并且行为要与父类保持一致或更严格。例如,正方形是长方形的子类,但从数学定义上,正方形不能完全满足长方形的所有行为,这种继承关系就违反了里氏替换原则。

    2.保证了继承体系的正确性和稳定性,避免因子类行为异常导致程序出错,提高了代码的可靠性可复用性

    3.在复杂的继承关系中,对子类行为与父类行为一致性的判断不够准确,容易忽略一些特殊情况,导致违反该原则。

  • ISP(接口隔离):

    1.接口隔离原则倡导客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。将庞大的接口拆分成多个小接口,让不同类只实现其需要的接口。比如将用户操作接口拆分为用户查询接口、用户修改接口等,避免类实现不需要的方法。

    2.减少类与接口之间的不必要依赖降低代码冗余,提高系统的灵活性可维护性

    3.在拆分接口时,对接口粒度的把握不够精准,可能会导致接口数量过多,增加管理成本。

  • LOD(迪米特法则):

    1.迪米特法则也叫最少知识原则,一个对象应该对其他对象有最少的了解,对象之间的交互应尽量降低耦合度。在代码中,避免对象直接访问其他对象内部复杂的成员或方法,而是通过该对象提供的公共方法进行交互。

    2.降低对象间的耦合度,提高系统的可维护性和可扩展性,减少因对象间过度依赖导致的修改风险。

    3.在实际项目中,有时为了追求功能实现的便捷性,会忽视该原则,导致对象间的依赖关系过于复杂。

  • CRP(依赖倒置原则):

    1.依赖于抽象不依赖于具体,针对接口编程,可以说其他原则都是为了实现依赖倒转,他是六个中最为重要的一个,也是编码的最终目的。

    2.降低模块间的耦合度,使系统更灵活,便于替换不同的实现。

    3.对依赖关系的梳理不够清晰,有时会出现高层模块直接依赖低层模块实现细节的情况,破坏了依赖倒置原则。

踩坑心得

  • 代码注释率不高,这是我写代码的一个通病,不喜欢写注释,可能过几天之后自己都看不懂了,一定要养成良好的注释习惯,这是编码的基本素养。

  • 写题目做事情过于纠结,总在考虑用这种方法还是那种方法,那种方法更好,是不是还有更好的设计,总有想把自己的代码重塑的感觉,导致编码是犹豫不决,浪费大量时间。

  • 总是畏难面对新的题目,新的知识点,心里会打退堂鼓,走不出舒适区,这样很难获得提升,要勇敢的走出舒适区,有敢于直面困难的勇气。

  • 对细节考虑不到位,如在用链表时没有判断是否为空就直接使用,导致错误。

  • 审题不仔细额,需求分析不到位,如在电梯调度中没有意识到是先进先出等逻辑,航空系统中的货物计费体积。

改进建议和总结

这一学期的面向对象课程学习下来,有坎坷也有喜悦,我很庆幸自己坚持下来了,没有退缩,守得云开见月明。Java课题组用心制作的PTA,一直坚持原创,我们努力写PTA,老师努力出PTA,然后实验、线上慕课、翻转课堂....环环相扣我看到了这门课程设计的用心,老师的负责。通过这门课程学到了很多编程知识与编码规范,培养了抽象思维和解决问题的能力,为日后专业学习,编码打下了坚实的基础。

最后要感谢段老师这一学期辛勤的教导和辛苦的付出!!!

posted @ 2025-06-22 00:28  zz君不见  阅读(45)  评论(0)    收藏  举报