Java面向对象程序设计课程总结

一. 前言:
本学期的Java面向对象程序设计课程构建了一个多维度的学习体系,通过理论教学与实践训练相结合的方式,使我系统地掌握了面向对象编程的核心思想和技术实现。课程的整体架构科学合理,各教学环节环环相扣,形成了完整的学习闭环。
从工作量角度看,课程安排张弛有度。PTA作业共12次(加上期中考试),平均每周1次;实验5个,每个平均需要6-8小时完成;Blog总结3篇。总体体量比较大,需要花费的时间也比较久。
难度梯度设计方面,课程呈现出明显的渐进式特征:前期侧重Java语法基础和简单类设计;中期深入面向对象三大特性;后期聚焦高级特性和JavaFX应用开发。最具挑战性的当属JavaFX图形界面开发部分,需要同时处理界面设计、事件响应和业务逻辑,对综合能力要求较高。
各教学环节的优点与作用:
• PTA作业:从简单的算法题到小型的系统设计,题目设计既考察基础又培养工程思维,由简入难,我的编程能力也在这个过程中得到了提升。
• 实验项目:围绕动物进入电器展开,依次考察面向对象的特征以及图形界面的设计,通过实验进一步巩固我们在课堂上学习的内容。
• Blog作业:迫使我对知识进行系统梳理,形成了结构化认知,对所学内容进行复盘。
• 线上课程:可反复观看的优质资源,特别是多态和正则表达式的讲解非常透彻。
• 线下课程:互动性强,能及时解决个性化问题,案例讨论环节特别有价值
二. 面向对象技术深度总结
2.1 封装技术实践与思考
通过"图形面积计算"等作业,我对封装有了立体化的理解。封装不仅仅是简单的private修饰符使用,更是一种设计哲学。在日期类设计中,我学会了:
• 通过私有化成员变量防止非法状态
• 使用访问器方法控制数据访问
• 用不变式(invariant)保证对象始终有效
遇到的挑战是:在继承体系中如何合理使用protected访问权限?经过探索,我认识到protected应该谨慎使用,仅暴露子类真正需要的方法和属性,否则会破坏封装性。一个典型案例是在图形类继承体系中,将绘图方法设为protected而非public,既保证了扩展性又不暴露内部细节。
2.2 继承体系设计与优化
继承的理解经历了三个阶段:
1.初期:简单看作代码复用工具
2.中期:理解为类型层次构建手段
3.后期:认识到其设计约束和责任
在"图形类继承"作业中,我构建了Shape->2DShape/3DShape->具体图形的层次结构。关键收获包括:
•合理使用抽象类定义通用行为
•遵循LSP原则(里氏替换原则)
•避免过度继承导致的脆弱基类问题
特别有启发性的是发现继承不是"银弹"——当遇到"正方形是否是长方形"的经典问题时,认识到有时组合优于继承。
2.3 多态应用场景剖析
多态能力通过三个典型场景得到强化:
1.菜单系统:使用接口定义标准,不同菜品实现统一计价方式
2.图形渲染:父类引用处理异构图形集合
3.事件处理:JavaFX中的统一事件接口
深入理解了多态的实现机制:
•方法表(vtable)概念
•动态绑定与静态绑定的区别
•接口多态与继承多态的性能考量
仍待提高的是:在复杂系统中如何设计恰到好处的抽象层次?过度的抽象会增加理解难度,而不足的抽象又会降低灵活性。
2.4 抽象类与接口的辩证关系
抽象类实现的是与子类之间的“是”的关系,更偏向于属性,而接口则是子类的“can do”,是一种行为的关系;抽象类只能单一继承而一个类可以继承多个接口。
2.5 异常处理的最佳实践
从初期的"try-catch满天飞"到后期的合理分层处理,形成了系统的异常处理策略:
1.受检异常用于可恢复错误
2.非受检异常用于编程错误
3.自定义异常携带丰富上下文
4.异常转换保持抽象层次
2.6 JavaFX的深入探索
图形界面开发是最具挑战也是收获最大的部分。掌握了:
•FXML布局:使用Scene Builder可视化设计
•CSS样式:分离外观与逻辑
•数据绑定:双向绑定简化状态同步
•并发处理:Task和Service封装后台任务
三. 采坑心得
3.1 设计模式的应用误区
在首次尝试实现观察者模式时,犯了典型错误:

改进后的版本支持多个观察者:

这个教训使我认识到设计模式不是生搬硬套,必须理解其本质意图。
3.2 程序运行逻辑的混淆
在完成电梯系统迭代系统的设计时,我在这个相较来说复杂的逻辑上吃了大亏:由于在没有完全搞懂电梯运行的底层逻辑的情况下就急于构架代码结构接着完善代码,后期测试提交时一直处在运行超时的情况下,没有一个测试点通过。尽管这让我直接意识到这是代码逻辑的问题,面对这一大堆代码,我想要再修改已经非常困难了。为此我耗费了大量的时间。

四.学期学习内容回顾
4.1 面向对象编程
类与对象:
类的定义:学会定义类,包括成员变量(字段)和成员方法。理解访问修饰符(private、default、protected、public)对类成员的访问控制。
对象的创建与使用:使用 new 关键字创建对象,并通过对象来访问类的成员。掌握构造函数的概念和用法,用于初始化对象的状态。
封装:将数据(成员变量)和操作数据的方法(成员方法)封装在一个类中,通过访问修饰符隐藏内部实现细节,只对外提供必要的接口,提高代码的安全性和可维护性。
继承:一个类可以继承另一个类,从而获得父类的属性和方法。通过 extends 关键字实现继承关系,理解 super 关键字的用法,用于访问父类的成员。同时,掌握方法重写(override)的规则和应用场景。
多态:包括编译时多态(方法重载,即同一个类中多个方法具有相同名称但参数列表不同)和运行时多态(通过方法重写和对象的向上转型实现)。理解多态性如何提高代码的灵活性和可扩展性。
4.2 集合框架:
List 接口:有序且允许重复元素的集合,常见实现类有 ArrayList 和 LinkedList。了解它们在性能、内存使用和适用场景上的差异。
Set 接口:无序且不允许重复元素的集合,如 HashSet、TreeSet 等。掌握不同实现类的特点和使用场景。
Map 接口:存储键值对的集合,如 HashMap、TreeMap 等。理解如何通过键来获取对应的值,以及不同实现类的特性。
4.3 抽象类与接口:
抽象类:抽象类是一种不能被实例化的类,它通常包含抽象方法(没有方法体的方法)和具体方法(有方法体的方法)。使用 abstract 关键字来声明抽象类和抽象方法。
接口:接口是一种特殊的抽象类型,它只包含抽象方法(JDK 8 及以后可以包含默认方法和静态方法),且所有方法默认都是 public abstract 的(可以省略不写)。接口使用 interface 关键字声明。
4.4 面向对象设计原则:
单一职责原则:一个类应该只有一个引起它变化的原因,即一个类应该只负责一项职责。
开闭原则:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即当软件需要变化时,应该通过扩展代码来实现变化,而不是修改现有的代码。
里氏替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。即子类对象必须能够替换掉它们的父类对象,而程序的行为不会发生可察觉的变化。 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。即要针对接口编程,而不是针对实现编程。
这些设计原则相互配合,共同指导软件设计和开发过程,帮助开发者创建高质量、健壮的软件系统.
五. 改进建议与课程总评
5.1 建设性建议
1.在PTA题目集方面:我认为老师在上课的时候可以挑选一些比较难或者比较有意义的题目讲解,这样对一些没有完全搞懂的同学来说可以再学习一次;而对于已经会了的同学来讲,他们可以参考老师的思路,体会到一个与自己不同的角度,从而拓展自己的思维。这样可以提高教学质量,同时也能增强同学们的学习积极性。
2.在日常教学方面:自学无疑是对于一名学生来讲至关重要的能力,但老师没有必要过分地强调学生自学的能力(大家都知道),淡化课堂学习的作用;相反,老师要教学生如何让去自学,应该引导学生培养良好的自学习惯。否则学生会容易产生怨气,这非常不利于建立良好的教学环境。
5.2 个人学习总结
这门课程不仅教会了我Java语言,更重要的是培养了面向对象的设计思维。主要收获包括:
1.从过程式思维转向对象思维
2.掌握设计原则
仍需加强的方面:
1.设计模式的应用熟练度
2.大型项目的架构能力
3.团队协作开发经验
课程的最大价值在于:它不仅是编程技术的传授,更是软件工程思维的培养。通过不断的实践-反馈-改进循环,我不仅学会了编写Java代码,更学会了如何设计可维护、可扩展的软件系统。这些经验将成为我后续学习和职业发展的坚实基础。

posted @ 2025-06-18 02:14  愿君久悦  阅读(15)  评论(0)    收藏  举报