面向对象课程总结
Java课程三次大作业总结Blog
- 前言
本门Java课程以“理论+实践”为核心,通过PTA作业、5次迭代实验、线上视频学习和线下课程构建了完整的知识体系。总体工作量较大,需要课后花很多时间来完成。
PTA作业:覆盖基础语法到类的设计,单题代码量几百行,调试耗时长,大作业往往难度最大,花费时间非常多。
实验环节:从控制台程序到JavaFX应用开发,迭代式代码可以很好的锻炼我的工程能力,但是实验系统输入代码十分麻烦,不如平时使用的idea调试程序自动标红报错、展示修改方案功能完善,平白降低工作效率。
PTA作业从基础语法训练到复杂系统设计循序渐进,单题代码量常常达到几百行,特别是期末的航空系统大作业,调试过程尤为艰辛。实验环节采用迭代开发模式,从简单的控制台程序逐步升级为功能完善的JavaFX应用,这种渐进式的学习方式让我深刻体会到软件工程的思想。不过实验系统的代码输入界面真的很不够友好,缺乏IDE的智能提示和实时错误检查功能,大大降低了我的效率。
课程:系统化理论化学习面向对象设计和Java知识,为后续任务开展奠定基础。 - 面向对象技术总结
(1) 基础语法强化和异常处理(PTA1-2 & 实验2)
核心内容:变量/循环/数组/字符串处理等基础语法,方法封装
典型实践:
PTA1-2:多个计算等题目训练方法我们的基础语法能力
实验:控制台实现的大象入冰箱题目从文件输入,强化文件I/O处理能力以及初步方法拆分设计能力。
自定义异常需包含足够诊断信息,可以大大降低维护成本和调试时间
掌握程度:语法基础扎实,但初期花费很多时间调试程序,解决基础语法错误。
(2) 算法与模块化设计与封装技术,以及比较器的选择(PTA3-4)
核心内容:多方法协作解决复杂问题,基础算法实现
PTA3-4:首次实践单一职责原则,主要锻炼基础算法和方法拆分能力,以及初步的封装能力
实验多种排序实现动物的不同规则不同方法的排序,让我巩固了排序的各个算法(包括归并排序、插入排序、冒泡排序、选择排序)知识,同时还学会了两个不同的比较器Comparator和Comparable:Comparable 接口(内部比较器),定义在类内部:实现Comparable接口的类,需重写compareTo(T o)方法,定义该类对象的 排序”规则。
Comparator 接口(外部比较器)通过实现Comparator接口创建独立的比较器对象,
针对同一类定义多种比较规则,无需修改类的代码。当需要为类定义多种排序规则时、对没有实现Comparable的类进行排序时使用
优先实现 Comparable:若类有明确的 “自然排序”(如数值、日期),应实现Comparable,保证排序逻辑的一致性。
用 Comparator 扩展:当需要多种排序规则时,使用Comparator
掌握程度:掌握方法拆分技巧,理解模块间低耦合的重要性
(3) 面向对象核心:继承与多态(PTA6、7、10 & 实验3)
核心技术:类层次设计、运行时多态、抽象类应用
案例:
PTA6、8:题目雨刷和点线的迭代,新增改变使得我注重类设计,锻炼我继承多态的掌握能力,认识到其重要性
PTA10将 Java 的三大核心特征(封装、继承、多态)与集合框架相结合进行考察。在处理大量数据时,我根据数据特点选择合适的集合类型,如使用ArrayList存储有序且可重复的数据
实验3:动物叫声模拟(接口Animal + 实现类Cat/Dog)
掌握情况和认知:
特性 关键实践 认知提升
封装 PTA图形类:private坐标+getArea() 隐藏实现细节,暴露安全接口
继承 雨刷和点线题目 super复用,protected控制权限
多态 动物模拟:Animal a = new Tiger() 运行时绑定
封装可以防止暴露安全接口,目前掌握较良好
我掌握了继承关系的合理设计以及多态在实际场景中的运用技巧,但对于复杂继承层次结构的优化和多态方法调用的细节处理,还需要进一步加强练习。
多态可以使得新增功能只需添加类而非修改逻辑,大大降低成本,掌握比较全面,使用的时候比较得心应手
同时,在集合操作过程中,灵活运用三大核心特征,例如通过封装集合操作方法,保护数据的安全性;利用继承和多态,实现不同类型集合元素的统一处理。
(4) 抽象类与接口
技术 核心区别 应用场景
抽象类 包含抽象方法+具体方法+成员变量 为相关类提供共性实现
接口 纯抽象方法 定义跨继承体系的行为契约
在航班系统的大作业中,计算费率实现使用接口,顾客类使用继承;在实验中动物“叫”使用接口,动物和具体大象类使用继承,根本原因是它们和其关联对象的耦合程度不同,即耦合度是使用抽象或接口选择的判断因素,优先用接口实现解耦。掌握程度良好。
掌握耦合度决定选择原则:高内聚场景用抽象类(如航班顾客继承体系)低耦合需求用接口(如实验3动物行为扩展)
(4) 集合框架
主要通过pta5-7,8-9两次大作业考察
ArrayList主要用于动态数据存储(电梯请求队列),初始容量优化(new ArrayList<>(100))
HashMap主要用于快速检索(订单系统商品缓存以及动物排序实现),要求键对象必须重写equals()/hashCode()
自定义Comparator实现排序逻辑(动物排序规则自定义),可以优化排序性能,自定义排序规则
学习之后集合选型能力提升(随机访问vs插入效率)
(5) 设计原则实践
单一职责原则(SRP)要求每个类专注单一功能,避免"上帝类"提升可维护性;开闭原则(OCP)强调对扩展开放对修改关闭,通过多态降低系统耦合;里氏替换原则(LSP)确保子类无缝替换父类,保障继承体系健壮性;接口隔离原则(ISP)主张按需提供精细接口,避免强制实现冗余方法;依赖倒置原则(DIP)要求高层不依赖底层细节,通过抽象实现模块解耦;迪米特法则(LoD)限定对象间保持最小知识,减少不必要依赖链;合成复用原则(CRP)提倡优先组合而非继承,实现灵活扩展避免继承污染
这七大设计原则主要在航空系统中考察,用于类设计,可以很好地锻炼我的类设计能力,帮助我处理复杂问题,但是我有时候会为了眼前实现而违法某个原则,这也导致了迭代时候的工作量增加
(6)javafx
此知识点主要在线下课程翻转课堂讲解和第五次实验(将大象放入冰箱题目的图形界面设计与实现)以及javafx大作业(航空系统的迭代以及图形界面设计实现)中考察
对于布局容器如VBox、HBox等掌握情况良好,能灵活构建复杂界面结构
对于基础图形使用绘画如circle、rectangle等类掌握情况良好,能自主使用其各个方法
对于属性绑定,能实现UI与数据的动态同步,但是不够熟练
对于事件处理机制,能自主处理各类用户交互事件,但是调试需要花费时间
对于动画效果能比较熟练运用Transition类创建平滑动画。
(3)采坑心得
1.对象引用陷阱,要注意是否需要创建新的实例而不是每次都指向同一个对象,若多个变量指向同一对象实例,一处修改会影响所有引用,导致逻辑错误 - 静态方法在编译时绑定,不可对象实例中多态。应当把其改为实例方法(去掉static,static修饰的成员属于类本身,不依赖对象实例,适用于工具方法或全局共享数据;而实例方法和变量则与具体对象相关。),才能实现预期的多态
3.使用equals必须重写hashCode,保证其一致性,否则得到结果不符合预期,多次调用hashCode时,结果需一致(除非对象状态改变)。这也是哈希的关键
4.类型转换问题需要多加注意,在使用集合框架时,我曾错误地认为List在运行时依然保留着类型信息。但是将List赋值给List

浙公网安备 33010602011771号