面向对象编程设计总结-blog

1 前言

    经过本学期的java教程我受益匪浅,课程讲解上,本门课程采用了线上课程,线下课程相互结合的教学方法,让我受益匪浅,在线上课堂中有多位老师分类讲解基础概念,在线下课堂中由我的班主任亲自为我们传递面向对象编程设计的编程思想,让我们不仅学习到了如何编程,更让我们会编程;作业布置上,本门课程通过实验,pta作业,blog作业让我们总结并应用课程中所学习到的知识,实验作业通过迭代的程序,让我们享受到了程序功能逐步完善与丰富的成就感,pta作业既有针对课程内容学习的实践应用也有让我们扩展编程思维的迭代作业,是我成长的不可或缺的教学内容,通过blog作业,自己被迫地总结代码,也让我不仅仅只是完成代码作业,更让我增进了自己的代码思维,但当一周同时出现实验,pta作业,blog作业布置的情况下,我还是会手足无措(尤其是当这周正好满课的时候,写代码时往往直接先写,再修改,跳过了思考类与类相互协作的过程,导致写出的代码太过“屎山”了)。难度方面中规中矩,都不是很难,当然除了fx,自学内容太多了,训练时间太少了。再之后的时间里我要更加刻苦的训练与学习java的更多内容。

2 面向对象技术总结:

    在本门课程的学习中主要学习了:封装、继承、多态、抽象类、接口、集合框架、异常以及JavaFX等相关内容。

     封装是面向对象编程的核心特性之一:封装的核心在于通过访问控制修饰符(如 private)将类的内部状态(属性)和实现细节隐藏起来,仅通过精心设计的公共方法(如构造方法强制初始化、Getter 方法安全读取、Setter 方法加入验证逻辑来安全修改)对外提供交互接口。这不仅确保了对象数据的安全性和完整性(防止非法访问和无效状态),更重要的是实现了接口与实现的彻底分离,使得类的内部逻辑可以独立变更而不影响依赖它的外部代码,极大地提升了代码的模块化程度、可维护性、可测试性和复用性,是构建健壮、灵活软件系统的基石。既是本门课程的基础,也是学习java的基础。

     继承是面向对象编程的核心机制,继承通过 extends 关键字建立类之间的 “is-a” 关系,使子类自动获得父类的非私有成员(属性和方法),实现核心代码复用和层次化扩展。子类可重写父类方法(遵循签名相同、访问权限不更严格等规则)以定制特定行为,通过 super 显式调用父类成员(尤其是构造方法,必须在子类构造器首行调用),并新增特有属性和方法。虽然 Java 严格限制单继承(一个子类仅一个直接父类),但通过 protected 访问控制实现父子间受保护成员的共享,并借助接口弥补多重继承需求。继承是构建对象层次结构、实现多态和进行模块化分层设计的基石,极大提升了代码的可维护性、扩展性和复用性。在面向对象编程设计上有手足轻重的意义,也令我对面向对象编程设计有了更加深刻的认识。

       多态是面向对象编程的核心特性,多态作为面向对象的核心支柱,通过父类引用(或接口)指向子类对象(向上转型),并调用被子类重写的方法,实现了“同一操作作用于不同对象产生不同行为”的能力。其本质依赖于动态绑定(后期绑定)机制——在运行时(而非编译时)根据实际对象的类型确定调用哪个方法版本。这使得程序无需修改父类代码,仅需扩展新的子类并重写方法,即可灵活添加功能(开闭原则的体现)。多态分为:1.编译时多态(静态多态):主要指方法重载(同一类中同名不同参),在编译期确定具体调用;2).运行时多态(动态多态):基于继承和重写,在运行期动态解析。它极大地解耦了调用方与具体实现,提升了代码的扩展性、可维护性和模块化程度,是设计灵活、可复用架构的关键,也让我体会到了java编程中的灵活性与多样性。

       抽象类:抽象类(是使用 abstract 关键字定义、无法直接实例化的特殊基类,它通过声明抽象方法(无方法体)强制子类提供具体实现,从而定义行为契约;同时,它可包含已实现的具体方法、成员变量和构造器,为子类提供可复用的公共逻辑。抽象类在继承体系中扮演“部分实现+强制规范”的角色,平衡了代码复用与灵活性要求,是模板方法模式的理想载体,并为基于父类引用的多态提供了重要基础,深刻体现了面向对象设计中约束与扩展的平衡艺术,是构建灵活且可复用架构的关键工具。用法与继承中的父类类似,但所用情况不同,也是提升对面向对象编程设计理解的开始。

      接口:接口(interface)是 Java 中定义纯粹行为契约的抽象类型,通过 interface 关键字声明。它强制规定实现类“能做什么”(抽象方法),而完全不涉及“如何做”(无具体实现或状态)。类通过 implements 关键字可实现多个接口,突破单继承限制,实现灵活的功能组合(多重继承效果)。接口引用指向实现类对象是实现运行时多态的关键基石,支持“面向接口编程”的设计思想,极大提升系统的解耦性、可扩展性和组件化程度(如可插拔架构)。

       集合框架:在学习中主要学习到了数组集合与链表集合,也体验到了各自的实用与便利,但在最近的一次pta作业中我了解到集合框架的能力不仅如此,我在集合框架上的认知并不完善,仍然需要在日后的学习中不断地增强自己在集合框架上的不足。

       异常:异常是程序运行时可能出现的错误或意外情况,通过异常处理机制可优雅地处理这些异常,避免程序崩溃。异常机制基于面向对象设计,所有异常类继承自Throwable,分为错误、受检查异常和运行时异常。可以针对代码自动抛出异常并接受异常,也可以被动的接受异常,通过异常可以使制作的项目代码更加健全。

       JavaFX:通过日常学习自以为学会了很多但在写实验五与互评作业的时候才知道自己的学习只是皮毛,仅仅只是靠课程中的那一点点知识储备并不能写出一个好的界面,也无法达到心理的预期表现,要想完整地写出一个好的项目仍然还要更加一步地学习与思考,以更好地提升自我的编程能力。

3 踩坑心得:

  经过从开学到现在大pta作业中最让我印象深刻的是第一次大作业《电梯调度问题》,当时因为不知道题目中要求的电梯的运行逻辑就先按照自己的片面认知乱写一通导致一直是Wrong Answer,也是知道老师在课堂上为我们具体的讲解了电梯的具体运行逻辑后,我才把问题解决;我从这次的失败中我明白了在编写代码之前一定要认真地做需求分析,只有做好了需求分析才知道我要怎么处理问题而不是连想都不想直接根据自己的主观臆断盲目猜测,这样的最终结果也只会是白忙一场,活生生地给自己增加工作量。

 除此之外,我经常犯一个毛病—-对于没有给出类图的作业时,第一步做的不是思考要建设什么类才合理,类与类之间该怎么协作,类里面要放置哪些方法最简洁,而是拿上手就开写,边写边想,常常导致我的代码出现方法深度过于深了,一个方法有50-60行,不仅不美观而且读代码是也不流程,尤其是第一次大作业《电梯调度问题》,因为刚刚从面向过程编程转为面向对象编程,思维一下子没有转变过来,就很容易出现上述问题,比如在代码中的electric类的run方法就融合了太多逻辑,一下就来到了158行,我当时直接将所有的判断一起放进去了,所以在之后的pta中额外地注重这个问题,在后面的代码也有了一点好转,基本上都将代码逻辑拆分进多个方法里,代码质量也有所提高。

4 改进建议及总结:

  经过本门课程我深刻地理解了面向对象编程,但是纵观本门课程的所有学习中,javafx的学习是最困难的,在课堂中讲解后并满意充分的进行随堂练习(类似于pta作业,针对这一周的学习进行适量的训练),除此之外,javafx的扩展内容太多了,大量的未知UI组件让人迎接不暇,而且在翻转课堂设置在javafx中很不合理,在翻转课堂中存在讲解声音小听不清讲解内容,ppt准备不充分不合理大大增加了我学习javafx的难度,应该将翻转课堂设置在前面的容易的课程中,即便没听懂同学的讲解,也可以从容地通过自学来完成课程要求。当然也可以为我们多发一些javafx的相关资料,这样的话,也可以方便我们学习javafx,也不至于对javafx一知半解。对于javafx的设计思路我们也普遍缺失,有时候知道怎么创建却不知道怎么编排。

posted @ 2025-06-17 19:45  天司  阅读(14)  评论(0)    收藏  举报