面向对象程序设计Java-结课总结
对面向对象程序设计Java课程的结课总结
24201915(24201501)吴雨芊
🟢前言
1.关于工作量
- Blog作业与PTA作业
每一次pta作业大概3~5题,题量适中,除了最后一题思考时间较长,其他的题目都较为简单,花费时间较少。印象最深的是第一次大作业中,最后一题因为涉及电梯算法,且测试点较多,花费时间较长,超过了一周时间,但是老师之后拉长了提交时间,并且提供了算法流程思路,给予了我很大帮助,最终还是满分完成,之后的大作业基本在两三天内就能做完,所以题量不算很多,但要用心善于思考去认真完成,并且在此基础上优化代码。Blog作业花费时间较长,整体篇幅较长,是对每一次由于在特定的大作业的总结,以及对代码的评估与优化,整体前后会改两三次。
- 实验及报告
实验的工作量较大,因为在特定的系统上编写程序,不可以复制,也看不到错误,基础的getter和setter函数以及构造函数也不能直接生成。所以调试和修改也会比较麻烦,考验的是我们编写代码的基本功以及打字速度。在此之后,再进行实验报告的攥写,因此会对自己的错误印象深刻,以及对每一章的内容进行总结巩固。
- 线上课程
课程较多,认真听下来时间较长,所以对于一些实验的讲解就没有仔细去看了,其他的课程包括封装、继承、多态、抽象类、接口还是讲的很清楚易懂的,加上课后习题的巩固。
- 线下课程
段老师讲课很认真也很有趣,会结合生活中的一些例子进行解释,因此课上听懂后,课后除了练习,不用再花太多时间去学习。线下课程还包括翻转课堂,内容主要是Javafx的一些基本知识,内容不是很难,但是为了讲好和编写创新的案例,还是花了不少时间和精力的。
2.关于难度
- Blog作业与PTA作业
正如之前所说,PTA整体难度并不大,除了个别题目,比如第一次大作业的LOOK算法,在写的时候对于算法流程不严谨,逻辑上存在漏洞,导致测试点一开始不能全部通过,后期不断地调试,找到问题后,才得以改正。在正确代码的基础上又做了优化,因为写Blog作业时,学会使用了SourceMonitor这个工具,发现代码的问题后,进行迭代优化。
- 实验及报告
实验的题目难度适中,就是篇幅较长,编写代码的时间较长。实验报告同样,操作比较繁琐,出现问题的时候最好截图留有证据。
- 线上课程
课程听起来较为简单,正则表达式那一章花了点时间课后去扩展学习了,线上课程的课后题目难度也较为基础,主要用于巩固。
- 线下课程
段老师除了讲解书上的一些基本知识,包括封装、继承、多态、抽象类、接口、集合框架、异常处理等等以外,还会讲解一些设计模式,这些部分因为目前没有接触过相关的练习和实践,其实不是掌握的很好,其他书本上的课程内容我觉得较为简单。
🟢面向对象技术总结:
一、课程学习概述
本学期的面向对象程序设计课程通过PTA作业、实验和Blog作业等多种形式,系统地教授了Java语言的核心特性,包括封装、继承、多态、抽象类、接口、集合框架、异常处理以及JavaFX图形界面开发等内容。课程设计循序渐进,从基础概念到综合应用,使我对面向对象编程有了全面而深入的理解。通过实践环节的不断练习,我逐步掌握了面向对象的设计思想和Java语言的实现方式,编程能力得到了显著提升,当然通过这一学期的学习,我认识到了自己某些方面能力的不足以及踩坑的心得。
二、核心技术掌握情况
🔸1. 封装
封装是面向对象编程的三大特性之一,通过将数据和对数据的操作封装在类中,隐藏内部实现细节,仅暴露必要的接口。在课程学习中,我深刻理解了封装的重要性:
-
在PTA作业中,我学会了如何设计合理的类结构,将属性设为private并通过public方法提供访问控制
-
实验环节强化了我对封装的理解,特别是在不能自动生成getter/setter的情况下,手动编写这些方法让我更加明白其作用
-
通过Blog作业中的代码优化过程,我认识到良好的封装可以提高代码的可维护性和安全性,通过SourceMonitor检测代码的质量,重构代码使类的设计其符合Java的设计原则
掌握程度:我对封装概念理解透彻,能够熟练应用,是面向对象基础中最扎实的部分 90%
🔸2. 继承与多态
继承允许创建分等级层次的类,子类继承父类的特征和行为;多态则允许不同类的对象对同一消息做出响应。
-
通过动物类、图形类等案例,我理解了继承关系的设计原则
-
在航空货运系统等较复杂作业中,我尝试使用继承来减少代码重复
-
多态的应用主要体现在方法重写和父类引用指向子类对象上
-
实验中的多种动物和电器设计让我实践了继承与多态的结合使用
掌握程度:能够设计合理的继承体系并在适当场景应用多态,但对复杂继承关系的设计仍有提升空间。 80%
🔸3. 抽象类与接口
抽象类和接口是Java中实现抽象的两种机制,也是面向对象设计的重要工具。
-
理解了抽象类与普通类的区别,知道何时应该使用抽象类
-
掌握了接口的定义和实现方式,了解了接口的多继承特性
-
在图形面积计算和动物进入不同的容器等作业中应用了抽象类和接口,图形有计算面积和体积的接口,动物有
eat和agggressive等接口。 -
理解了"面向接口编程"的设计思想,但实际应用经验还不足
-
还学习了java中自带的一些特殊接口:

掌握程度:理解概念并能基本应用,但在设计模式层面的高级应用还需加强。 75%
🔸4. 面向对象设计原则的理解与应用
在Java面向对象程序设计中,有几个重要的设计原则,它们构成了良好软件设计的基础。通过本课程的学习,我对这些原则有了不同程度的理解和应用经验。

- 🌿1. 单一职责原则(SRP)
理解程度:掌握较好
单一职责原则要求一个类只负责一项职责。在PTA作业中,我逐渐养成了将不同功能拆分到不同类的习惯。例如,在电梯模拟作业中,我将电梯控制逻辑、状态管理和请求处理分别放在不同的类中实现。
应用实例:在Blog作业的代码优化过程中,我在电梯算法中重构了一个原本同时处理楼层方向和计算下一楼层类,将其拆分为CaculateDirection和CaculateNextFloor两个类,使每个类的职责更加清晰。
收获:遵循SRP使代码更易于理解、维护和修改,也降低了各个功能间的耦合度。
- 🌿2. 开闭原则(OCP)
理解程度:基本掌握
开闭原则强调软件实体应对扩展开放,对修改关闭。通过使用抽象类和接口,我学会了如何设计可扩展的系统结构。
应用实例:在图形计算的作业中,我定义了一个Shape抽象类,然后通过继承实现Circle、Rectangle等具体图形类。当需要添加新的图形类型时,只需扩展新的子类而不必修改现有代码。
不足:初期设计时往往难以预测所有可能的扩展点,导致后期仍需修改原有代码,还需要不断积累经验,认真思考。
- 🌿3. 里氏替换原则(LSP)
理解程度:理解较深入
子类必须能够替换其父类而不影响程序的正确性。这要求子类不能改变父类原有的行为约定。
应用经验:在动物进容器的实验中,Lion和Elephant都继承自Animal基类,在任何使用Animal的地方都可以安全地替换为子类对象。
- 🌿4. 依赖倒置原则(DIP)
理解程度:正在实践中掌握
认知:高层模块不应依赖低层模块,二者都应依赖抽象。抽象不应依赖细节,细节应依赖抽象。
学习过程:初期我习惯直接在高层类中实例化需要的对象,现在更倾向于通过构造函数注入或方法参数传递依赖。
- 🌿5. 接口隔离原则(ISP)
理解程度:不够熟练
客户端不应被迫依赖它不使用的接口。接口应该小而专一,而不是大而全。
问题实例这个原则我用的还不是很多,因为题目涉及的需要用到接口的次数较少,没有一次性出现大量的接口。
- 🌿6. 迪米特法则(LoD)
理解程度:理解较好
也称为最少知识原则,一个对象应当对其他对象有尽可能少的了解。
实践应用:在实验作业中,我有意识地减少类之间的直接交互,通过引入中间类或使用外观模式来降低耦合度。
效果:遵循LoD使我的代码结构更清晰,类之间的依赖关系更简单,单元测试也更容易编写。
🔸5. 集合框架
Java集合框架提供了一套性能优良、使用方便的接口和类,位于java.util包中。
-
学习了List、Set、Map等核心接口及其常用实现类
-
能够使用ArrayList进行基本操作,但对更复杂的集合操作不熟练
-
在作业中应用集合的场景不多,导致实践经验有限
-
对集合的遍历、排序等高级操作掌握不够
-
对HashMap等键值对集合的使用经验较少
掌握程度:这是我认为比较薄弱的部分,仅能完成基本操作,需要更多实践来熟悉集合框架的高级特性。
🔸6. 异常处理
Java的异常处理机制提供了程序错误处理的有效方式。
-
理解了检查型异常和非检查型异常的区别
-
掌握了try-catch-finally的基本语法结构
-
能够自定义异常类,但对异常处理的最佳实践理解不深
-
在实际编程中主动使用异常处理的意识不强
-
对异常链、异常包装等高级特性不了解
掌握程度:基本语法掌握,但实际应用经验不足,异常处理策略不够系统化。
🔸7. JavaFX图形界面开发
JavaFX是Java的现代GUI工具包,用于构建丰富的客户端应用程序。
-
学习了基本的舞台(Stage)、场景(Scene)和节点(Node)概念
-
能够使用FXML进行界面布局设计
-
掌握了按钮、标签、文本框等基本控件的使用
-
实现了简单的事件处理和控件绑定
-
对动画、CSS样式、复杂布局等高级特性接触较少
-
缺乏完整项目开发经验,仅限于课堂示例规模
掌握程度:之前掌握了基础组件的使用,能够构建简单界面,但综合应用能力有待提高。在做了javafx的航空货运管理系统后,对此有了更深刻的认知,运用也更加熟练。
以下是我做的航空货运管理系统的几个基础界面,包括登录界面,创建订单,历史查询和物流追踪等等。




🔸8. 常用设计模式 新
段老师在教材基础之外与我们扩展了几个常用的设计模式,如下:
🍂1. 单例模式
原则:确保一个类只有一个实例,并提供全局访问点。
特点:
-
私有化构造函数,防止外部实例化
-
提供静态方法获取唯一实例
-
延迟初始化或饿汉式初始化可选
-
适用于需要全局唯一对象的场景(如配置管理、线程池等)
-
多线程环境下需要特殊处理保证线程安全
这里有一个例子:

🍂2. 简单工厂模式
原则:将对象创建逻辑集中管理,客户端不直接实例化具体类。
特点:
-
通过一个工厂类根据输入参数创建不同对象
-
客户端与具体产品类解耦
-
违反开闭原则(新增产品需修改工厂类)
-
适用于对象创建逻辑不复杂的场景
🍂3. 工厂模式
原则:定义一个创建对象的接口,但让子类决定实例化哪个类。
特点:
-
将对象创建延迟到子类
-
每个产品对应一个具体工厂
-
符合开闭原则(新增产品只需添加新工厂)
-
适用于对象创建逻辑较复杂的系统
-
避免了简单工厂的条件判断逻辑
🍂4. 状态模式
原则:允许对象在其内部状态改变时改变其行为。
特点:
-
将不同状态的行为封装到不同状态类中
-
上下文对象委托当前状态对象执行行为
-
消除大量条件判断语句
-
状态转换逻辑可以放在上下文或状态类中
-
适用于行为随状态改变而改变的场景(如订单状态、游戏角色状态等)
🍂5. 策略模式
原则:定义一系列算法,封装每个算法,并使它们可以互换。
特点:
-
将算法与使用算法的客户端解耦
-
可以在运行时切换算法
-
通过组合而非继承来扩展功能
-
消除条件语句,提高代码可维护性
-
适用于有多种算法变体的场景(如排序算法、支付方式等)
三、实践环节回顾
🌳1. PTA作业 ↑
PTA作业是本课程的重要组成部分,通过编程练习巩固理论知识:
-
题量适中,通常3-5题,除最后一题外难度适中
-
第一次大作业的电梯算法印象深刻,我花费超过一周时间
-
老师提供的算法思路以及类图对解决难题有很大帮助
-
后续作业通常能在2-3天内完成,效率明显提高
-
最后一题通常需要更多思考时间,但很有收获
经验总结:PTA作业培养了我分析问题、设计算法和调试代码的能力,特别是复杂问题的解决能力得到了显著提升,使课本的理论知识运用于实际题目,巩固了知识的掌握与应用。
🌳2. 实验环节
实验环节是对基础知识的严格检验:
-
实验环境的限制严格,不能复制粘贴,也看不到错误提示
-
我们需要手动编写所有代码,包括基础的getter/setter
-
工作量较大,考验编程基本功和打字速度,而且我的打字速度较慢
-
在调试过程中很困难但印象深刻,所以自己犯的错误不易遗忘
-
实验报告的撰写利于帮助我巩固知识点
经验总结:实验环节虽然挑战性大,但极大地提高了我的编码准确性和独立解决问题的能力。
🌳3. Blog作业
Blog作业是对学习过程的系统反思:
-
篇幅较长,需要对大作业进行全面总结
-
包括代码评估、优化思路和实现过程
-
通常需要修改2-3次才能达到满意效果
-
培养了我对代码质量的追求和持续改进的意识
经验总结:Blog作业不仅巩固了技术知识,还培养了我的文档写作能力和批判性思维。
四、学习收获与不足
🔷(一)主要成长与收获
经过一学期的面向对象技术学习,我在多个方面获得了显著的进步,这些成长不仅体现在技术层面,更体现在编程思维和工程能力的全面提升上。
-
完整的面向对象思想体系的建立
-
我从最初的"面向过程"思维成功转型为"面向对象"思维,在此基础上,还可以去扩展学习C++和python,这些都是面向对象语言
-
我在编写程序时能够自然地运用封装、继承、多态三大特性设计程序
-
在不断的实践中形成了"高内聚、低耦合"的设计理念
-
我开始关注设计模式和架构层面的思考,五种设计模式的初步学习对我今后的学习内容有了启迪,更要关注代码的质量和编写程序时每一步的精心考虑。
-
-
Java技术栈的扎实掌握
技术领域 掌握程度 典型应用案例 核心语法 ★★★★★ PTA基础编程题 集合框架 ★★★☆☆ 查找Java中的关键字并排序后输出 异常处理 ★★☆☆☆ 文件读取异常处理 JavaFX ★★★☆☆ 航空货运管理系统 -
工程能力的全面提升
-
算法设计:通过电梯调度等复杂问题,锻炼了系统分析能力
-
代码质量:学会使用SourceMonitor等工具进行代码质量检测
-
调试能力:不断通过设置断点进行调试来解决错误,比之前运用的更加熟练了。
-
文档写作:技术博客写作能力也显著提升,以前从来没有做过类似的任务,是对我的一个锻炼。
-
🔷(二)现存不足与改进方向
虽然取得了一定进步,但在学习过程中我也暴露出一些明显的短板,这些不足将成为我下一阶段重点突破的方向。
-
技术短板分析
-
集合框架:仅掌握ArrayList和List的基本操作,对map的使用较少,对Lambda表达式在集合中的应用不熟练
-
异常处理:异常处理策略缺乏系统性,常出现捕获过泛或遗漏重要异常的情况
-
JavaFX:界面布局和事件处理能力薄弱,无法独立开发复杂的GUI应用
-
-
设计能力不足
在PTA的多次迭代中可以发现问题,若是初次的代码类设计完善的话,下一次需求改变时,对于代码的改动就较少,也就是要符合开闭原则,对扩展开放,对修改关闭。也就要求我们要合理的应用抽象类与接口。
-
具体改进计划
-
集合框架:通过LeetCode专项练习,找自己不足的标签,从简单的开始练习。
-
异常处理:研读《Effective Java》异常处理章节,建立异常处理checklist
-
设计模式:课外找相应的课程学习,或是在今后的实践中逐步加深理解,进行套用
-
持续优化代码质量:在每次编程练习中注重代码的可读性、可维护性和扩展性,培养良好的编程习惯。
-
这些不足提醒我,编程能力的提升是一个持续的过程。同时我希望通过在凌云班的实际项目积累工程经验,努力成为一名更优秀的Java开发者。
🟢采坑心得:
1. 明确需求然后设计 重要
首先最重要的一点就是一定要确定题目的要求,在今后的工作中也就是一定要理清客户的需求,然后进行设计,再写代码。本人在这一点上吃了大亏,这也是在第一次题目集中浪费了大把时间的原因。刚接触电梯这道题,我就想着先敲代码把正则表达式读取内部与外部的请求队列先写出来,之后,由于对题目理解有误,将外部队列分成了上行和下行两个队列,这样就丢失了外部队列的进队顺序,无法通过比较正确的队头来判断电梯下一层的位置,如下代码:
else if(line.matches("<(\\d+),\\s*(UP|DOWN)>"))
{
Pattern pattern1=Pattern.compile("<(\\d+),\\s*(UP|DOWN)>");
Matcher matcher1=pattern1.matcher(line);
if(matcher1.find())
{
int floor=Integer.parseInt(matcher1.group(1));
if("UP".equals(matcher1.group(2)))
left.addoutaskUP(floor);
else
{
left.addoutaskDOWN(floor);
}
由于逻辑差距比较大,代码很难修改,所以从头写了一遍,而且要重新考虑之前没考虑的东西,浪费了大量时间与精力。
2. 注意团队意识
其实在需求分析的时候,如果我能先于小组成员或其他同学一起探讨一下算法的流程,也不至于会犯上述低级错误,正所谓团结力量大,个人的单打独斗不仅效率低下,甚至会出现考虑问题不全面的时候。而且可能有问题是团队中都有出现的,如果每个人都独自去解决,会大大降低时间效率,列如我们有一部分人都出现了Non-zero Exit Code的问题,应该一起解决。

3. 注意代码高效性
在编写第一次电梯程序时,因为还没有学习动态数组ArrayList,所以用的是静态数组int [],
private int[] outasknum;
private String[] outaskdir ;
OuterRequest(){
outasknum = new int[40];
{
Arrays.fill(outasknum, -1);
}
outaskdir = new String[40];
{
Arrays.fill(outaskdir, "IDLE");
}
}
其实在后续操作中就发现插入请求队列和出队的操作比较困难,也使得平均复杂度升高,浪费了时间与空间。并且我这里固化了数组大小为40,会存在风险,并且对于需求改变的话,要重新调整,之后设计动态问题,应该优先考虑ArrayList,Queue或者TreeMap。
4. 注释太少
每次代码注释率都在正常水平以下,减少了可读性,因此当我准备更改之前的代码时,总要先花一段时间理解,降低了效率。在今后的团队开发项目中,代码的低注释率也会给我的组员带来不必要的麻烦,因此现在不管是编写Java的程序,还是现在正在做的飞机仪表盘项目,我都牢记要标注清楚易懂的注释。
🟢改进建议及总结:
课程概览
通过一学期的Java程序设计课程学习,我从零基础到能够独立完成一些题目以及javafx的GUI界面,系统掌握了面向对象编程思想、Java核心语法以及常用开发工具的使用。
学习时长
16周 包括线上课程和线下课程还有实验课
改进建议
线上课程的占比可以小一点,PTA的题目难度可以再提升一点,像电梯的那种算法题可以多涉及一点,不断练习和迭代最终得出结果的成就感比较大
1. PTA作业
实战演练
完成情况
- 完成11次PTA作业集和一次期中检测
- 平均得分100/100
- 最早在截止日前5天提交
收获与反思
- 锻炼了算法思维和调试能力
- 熟练使用IDE进行调试
- pta迭代过程中使我认识到初期对于类的设计很重要
2. 线上课程
自主学习
通过线上平台补充学习了以下内容:
集合框架和正则表达式的运用
3. 线下课程
互动学习
- 1 老师讲解详细且有趣,课后不用花太长时间
- 2 Javafx的翻转课堂让我深刻理解了知识内容,并且锻炼了表达能力。
- 3 边听课边编写代码,提高了效率和实践能力
4. 实验作业
综合应用
🔧 实验1-3
基础语法练习:
- 大象进冰箱实验(封装)
- 多出了不同的动物和容器(继承与多态)
- 容器和动物有不同的行为(抽象类与接口)
Java程序设计课程总结 •2025 • 学生:吴雨芊
浙公网安备 33010602011771号