java-面向对象程序设计课程总结
java-面向对象程序设计课程总结[*]前言
转眼见四个月的时间已然逝去,我们队java的学习也要告一段落了,这一路走来有初见java时的盎然兴趣也有乍遇难题时的迷茫与无措,快乐、兴奋、不甘、烦躁许许多多的情感交织在一起,让我开始回视起这段曲折的学习之旅。
从最基本的概念学起到逐步的提高与深化,我们学类与类间的设计,学设计模式,学复杂多样的语法结构,我们从懵懂小白到逐步独立的设计师,java的学习给我开启了一扇新世界的大门,java的宏伟蓝图从此在眼前展开。
[*]曲折的学习之旅
从开始的按照类图写代码,到我们自由的设计来满足程序的要求,我们有算法难度较高的电梯三件套,也有逐步深入的雨刷系统,更有设计全面而复杂的航空管理系统等等......。
[*]面向对象技术总结
封装
在 PTA 作业和实验中,封装的应用十分广泛。我学会了将类的属性私有化,并通过公共的方法来访问和修改属性,这不仅保证了数据的安全性,也使代码的结构更加清晰。例如在设计一个学生类时,将学生的成绩属性封装起来,通过设置合理的 get 和 set 方法来操作成绩,避免了外部对数据的不合理修改。对封装的认知是它是面向对象的基础,能够有效隐藏内部实现细节,提高代码的可维护性。目前对封装的基本应用掌握较好,但在一些复杂场景下,如何合理地设计封装的层次和方法还需要进一步学习。
继承
通过课程的学习和作业实践,我理解了继承是实现代码复用的重要手段。在 PTA 作业中,通过创建父类和子类的关系,子类可以继承父类的属性和方法,减少了代码的重复编写。比如设计一个图形类作为父类,圆形、矩形等作为子类,子类继承父类的共同属性和方法,再添加自己特有的属性和方法。对继承的认知是它建立了类之间的 is-a 关系,使代码的组织更加合理。不过在多重继承的处理和继承关系的设计上还存在不足,有时会出现继承层次过于复杂的情况。
多态
多态是面向对象的重要特性之一,在实验和作业中,我体会到了多态的强大作用。通过父类引用指向子类对象,实现了同一方法在不同子类中的不同表现。例如在一个计算图形面积的程序中,使用父类图形的引用调用计算面积的方法,根据实际指向的子类对象,会调用相应子类的计算方法。对多态的认知是它提高了代码的灵活性和可扩展性。但在理解多态的底层实现原理以及在复杂场景下如何正确运用多态还需要进一步深入。
抽象类
在学习抽象类时,通过 PTA 作业和实验,知道了抽象类不能直接实例化,它为子类提供了一个模板。抽象类中可以包含抽象方法,子类必须实现这些抽象方法。这有助于规范子类的行为,保证代码的一致性。比如设计一个抽象的动物类,包含抽象的进食方法,不同的动物子类实现各自的进食方式。目前对抽象类的基本使用掌握得不错,但在抽象类与接口的选择和搭配使用上还需要更多的实践和思考。
接口
接口是一种特殊的抽象类型,它定义了一组方法的签名,而不提供实现。在课程中,接口的应用让代码的耦合度降低,提高了系统的可维护性和可扩展性。例如在实现一个排序功能时,定义一个排序接口,不同的排序算法类实现该接口,这样可以方便地更换排序算法。对接口的认知是它实现了代码的松耦合,使系统更加灵活。不过在接口的设计和多个接口的组合使用上还存在一些困难,需要进一步提升。
集合框架
集合框架在处理大量数据时非常有用,通过实验和作业,学习了 List、Set、Map 等常用集合的使用方法。例如在存储学生信息时,使用 List 来存储多个学生对象,方便进行添加、删除和查询操作。对集合框架的认知是它提供了丰富的数据结构和算法,提高了编程效率。但在集合的性能优化和不同集合类型的选择上还需要更多的经验积累。
异常
异常处理是程序设计中不可或缺的一部分,在课程中,学会了如何捕获异常、处理异常以及自定义异常。通过合理的异常处理,使程序在遇到错误时能够优雅地处理,而不是崩溃。例如在文件读取操作中,使用 try-catch 块来捕获可能出现的 IO 异常,并进行相应的处理。对异常的认知是它提高了程序的健壮性。但在异常的分类和异常处理的最佳实践方面还需要进一步学习。
[*]JavaFX
JavaFX 用于图形界面的开发,在实验中,用 JavaFX 来设计简单的界面,如向冰箱加入动物系统的界面。通过学习,了解了 JavaFX 的基本控件和布局方式,能够实现一些简单的界面功能。我感觉JavaFX 它为 Java 程序提供了丰富的图形界面开发能力。但在复杂界面的设计和动画效果的实现上还存在很大的不足,需要更多的学习和实践。
[*]踩坑历程
搭建谷仓
“搭建谷仓” 题目主要涉及类的设计和封装。我设计了谷仓类,将谷仓的属性如尺寸、材料、容量等进行私有化封装,并提供相应的 get 和 set 方法。在实现过程中,加深了对封装概念的理解,明白如何通过封装来保证数据的安全性和一致性。但在继承关系的运用上有所欠缺,没有考虑到是否可以通过继承来实现谷仓的不同类型,比如不同形状的谷仓,这使得代码的复用性不够高。
图形卡片排序游戏
这个题目让我对多态和集合框架有了更深入的应用。首先,设计了图形卡片的父类和不同形状的子类,利用多态实现了不同图形卡片的排序方法。在排序过程中,使用 List 集合来存储卡片,并根据不同的排序规则对卡片进行排序。通过这个题目,我更加清楚地理解了多态的作用,它使得程序在处理不同类型的对象时具有更强的灵活性。然而,在接口的设计方面存在不足,没有定义一个统一的排序接口,导致不同的排序算法之间的耦合度较高,不利于代码的扩展和维护。
航空货运管理系统(类设计)
“航空货运管理系统” 的类设计涉及到多个类之间的关系,包括货物类、航班类、机场类等。在设计过程中,我运用了封装的思想,将每个类的属性私有化,并提供公共的方法来操作这些属性。同时,通过合理的类之间的关联,实现了系统的基本功能。但在集合框架的使用上,只是简单地使用了 List 来存储货物和航班信息,没有考虑到数据的查询效率问题,比如在查询特定航班的货物时,可能需要遍历整个 List,这在数据量较大的情况下会影响系统的性能。
雨刷程序功能扩展设计
这个题目主要是对已有程序进行功能扩展,在扩展过程中,我体会到了接口的重要性。通过定义新的接口,实现了雨刷的不同工作模式,使得程序的扩展性得到了提高。同时,在扩展功能时,也注意到了对原有代码的修改要尽可能少,遵循了面向对象的设计原则。不过,在抽象类的运用上还不够熟练,没有充分利用抽象类来提取共同的功能,导致有些代码重复。
点线面问题重构(继承与多态)
“点线面问题重构” 题目是对继承和多态的很好实践。我将点作为父类,线和面作为子类,通过继承点的属性和方法,并添加自己特有的属性和方法,实现了点线面之间的关系。在重构过程中,利用多态实现了不同图形的面积和周长计算方法。这让我更加深入地理解了继承和多态的本质,以及如何通过它们来优化代码结构。但在重构过程中,对类的层次结构设计不够合理,导致有些子类之间的关系不够清晰,增加了代码的维护难度。
蒙特卡罗方法求圆周率
在使用蒙特卡罗方法求圆周率的题目中,主要运用了集合和异常处理的知识。通过生成大量的随机点,并判断这些点是否在圆内,来估算圆周率的值。在这个过程中,使用 List 来存储随机点的坐标,并处理了可能出现的随机数生成异常。通过这个题目,我对集合的操作更加熟练,也认识到了异常处理在程序中的重要性。但在代码的封装方面做得不够好,将所有的功能都放在一个方法中,导致代码的可读性较差。
销售步枪问题
“销售步枪问题” 涉及到类的设计和业务逻辑的实现。在处理销售业务时,要考虑异常情况,比如库存不足时的处理。不过,在多态的运用上比较少,没有充分发挥面向对象的优势,使得代码的灵活性不够。同时,在集合的使用上也比较单一,没有根据业务需求选择合适的集合类型。
单部电梯调度程序(类设计)
单部电梯调度程序的类设计需要考虑电梯的状态、乘客的请求等多个方面。我设计了电梯类、乘客类和调度类,通过封装来管理电梯的运行状态和乘客的请求信息。在调度算法的实现上,主要是电梯的移动逻辑叫难处理上,处理大量乘客请求时,调度算法的效率不高,可能会导致电梯的响应时间变长。
[*]对课程的一些建议
1.可视化教学工具:
使用动画演示继承关系中的构造函数调用流程、多态的动态绑定过程,如用 PPT 动画展示 “点→线→面” 的继承链初始化顺序。
通过代码调试工具(如 IDEA 的调试模式)实时展示对象的创建、方法的调用栈,帮助学生理解抽象概念。
2.课堂编程实战:每节课预留 15-20 分钟进行 “代码即时练习”,如讲解完接口后,现场让学生用接口重构 “雨刷程序” 的部分功能,并邀请学生分享代码思路,及时纠正问题。
然后再学习的资源上:比如案例库建设:整理并提供丰富的案例代码库,按知识点分类(如 “封装案例”“策略模式案例”),每个案例包含设计思路、UML 图和完整代码,如 “王者荣耀伤害计算” 的策略模式实现案例。
还有常见问题与解决方案手册:汇总学生在 PTA 作业和实验中常见的错误(如空指针异常、继承关系混乱),提供详细的错误分析和解决方案,如 “在‘关键词统计’中如何避免 HashMap 的 null 值问题”。
[*]未来学习和展望
在一些基础的知识之后,当对今后的学习有更强的信心了,比如一些高效学习方法:像刻意练习:针对薄弱环节(如接口设计、异常处理)进行专项练习,可参考 LeetCode 等平台的面向对象相关题目,有针对性地提升技能。
代码 review:阅读优秀的开源项目代码(如 Spring 框架的部分设计),学习其中的面向对象设计思想和编程规范,同时将自己的代码分享给同学或开源社区,获取反馈并改进。
然后也应该认识到在线课程与工具的重要性:哔站上的高质量课程以及课程,系统学习 Java 和面向对象编程。
IDEA 的重构工具和静态代码分析插件(如 SonarLint),帮助发现代码中的设计问题和潜在 bug,有很强的实用性,但同时也不应该有太强的依赖(最好体验一下找不到错误的无奈和无助,有利于锻炼心态哈哈)。
[*]结尾
最后感谢老师和同学们一路的陪伴与支持,贴心的答疑解惑,不厌其烦地一遍一遍的教导我们解决问题,老师们的一言一行都深刻影响着我们,引导我们逐步成长,感谢与各位老师的相遇,祝未来的我们都更上一层楼!!!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]