南昌航空大学-软件学院-24201625-梁少康-第三次blog作业
前言
一.对于Blog作业
Blog作业通常涉及理论总结或项目反思,工作量可能取决于字数要求和深度,难度在于理论理解和表达能力。这几次的Blog作业对于从来没有接触过这方面的同学来说是一个很大的挑战。首先,我们需要自学MarkDown语法,以及了解博客的格式以及需求,这需要有一定的前期准备。其次,如何完成一篇好的博客也是一个比较大的难题。我们需要对在PTA平台完成的作业有一个自我的了解,哪个地方是难点,哪个地方比较容易踩坑,这都需要每个人做题时的自我发现,杜绝抄袭的可能。最后,作为一个理科生,这也极大的反映了自己的语言表达能力。就像写作文一样,怎么把自己的疑惑用他人能够理解的方式表达出来,怎么表达的形象贴切,这对文笔也有一定的要求,对我们的综合素质要求提高。
二.对于PTA作业
PTA对于我们学过C语言的学生并不陌生,无非就是针对题目的需求进行编程,输入样例得到想要的结果。而本学期改为使用JAVA语言,形式的不同和代码量的提高对我们的编程能力以及能过熟练掌握多种语言是一个巨大的挑战。这几次PTA作业各不相同,主要是以迭代的方式呈现。而考虑我们作为初学者,并没有在算法方面对我们要求高,则是考验我们编程的基础功夫,以及对面向对象思想的学习效果的检测。迭代的方式也符合就业需要对产品不断优化的需求。
三.对于实验
这五次实验就相当于一次PTA迭代作业,从基础逐渐深入。但值得考量的是,本次实验系统不能够复制粘贴代码,自己在编译器编写的代码需要自己手动一个个输入进实验系统,没有任何提示及补写,对此想必各位同学和我一样对此深感痛苦,好不容易把代码全部输入,还需要自己再重新检查一下有没有错误,总的来说这个实验系统饱受争议。但好的是实验题目是符合我们课程进度和课程需求的,并且有效的扎实了我们的学习成果。
四.对于线上课程以及线下课程的工作量
线上和线下的结合是一个很不错的方式,既有线下老师亲手教授,又有线上课程对知识点的补充,这一点我是比较认可的。线上课程总共分10章附加一次期末考试,线上课程一个视频最多不超过半个小时,这对课外的学习时间占用并不是很大,是有空余时间来完成的。同时每节课后附加的课后作业也即是巩固了学到的知识点。线下课程每个星期两节,其实是比较适中的,每次课堂教授的内容不是很多,处于可吸收的范围。总的来说工作量比较适中。
五.对于难度
主要体现在PTA作业和Blog作业难度的体现。难度大小我已经在前文提过,这里不多赘述,总的难度是中等的。
面向对象技术总结
一、封装:从数据隐藏到模块隔离
在 PTA 作业中,通过编写基础类(如Student类)掌握了封装的核心 —— 用private修饰属性,通过getter/setter控制访问,例如实现成绩属性的范围校验。实验中设计冰箱装动物时,将冰箱信息、动物信息封装为独立类,通过接口暴露操作方法,理解了封装对代码安全性和可维护性的价值。但在复杂项目中,对封装层次(如业务逻辑与数据访问的隔离)的设计仍显生疏,缺乏对final修饰符在封装中的深层应用理解。
二、继承与多态:代码复用与动态行为
继承在 PTA 中通过 “动物类继承体系” 实践,明确了extends关键字的使用及构造方法链调用规则;实验中设计 “电器 - 微波炉” 继承结构时,通过重写login()方法实现权限差异化。多态的应用则体现在用父类引用(如User)指向子类对象,结合接口(如Operation)实现不同角色的操作逻辑,例如user.execute()会动态调用子类实现。但对多态中 “动态绑定” 原理的底层机制(如 JVM 方法表查找)理解不深,在复杂继承关系(如多层继承、方法覆盖冲突)处理上易出错。
三、抽象类与接口:规范定义与契约设计
PTA 中通过抽象类Shape定义绘图接口,强制子类实现draw()方法;实验中用接口规范数据操作行为,实现类解耦业务逻辑。认知到抽象类适用于 “部分实现 + 部分扩展” 场景,接口则用于 “纯契约定义”。但在设计模式(如工厂模式、策略模式)中对抽象类与接口的组合使用不够熟练,缺乏对 “接口隔离原则” 的实际应用经验。
四、集合框架:数据结构与容器应用
PTA 中常用ArrayList处理线性数据(如货物信息列表),HashMap实现学号到学生对象的映射;实验中用LinkedList存储借阅记录,通过Iterator遍历实现数据展示。掌握了常用集合的基本操作,但对底层原理(如HashMap的哈希冲突解决、ConcurrentHashMap的并发机制)理解有限,在大数据量场景下的集合性能优化(如容量预分配、泛型类型安全)意识不足。
五、异常处理:错误流程与程序健壮性
PTA 中处理输入异常(如NumberFormatException)时使用try-catch块;实验中在文件读写时通过finally确保资源关闭,并自定义LibraryException封装业务异常。但对异常链(cause传递)、Checked Exception 与 Unchecked Exception 的应用边界仍模糊,未系统掌握 “异常封装 - 传播 - 处理” 的完整流程,例如在多层调用中未正确向上抛出异常。
六、JavaFX:GUI 开发与交互设计
实验中完成过简单登录界面,使用SceneBuilder拖拽控件(Button、TextField),通过EventHandler处理按钮点击事件。掌握了基础控件的布局(VBox、HBox)和样式设置,但对复杂交互(如表格数据绑定、动画效果Timeline)、MVVM 架构在 JavaFX 中的实践缺乏经验,未接触过 FXML 与控制器的解耦设计。
总结:掌握与欠缺
通过 PTA 和实验,对面向对象核心概念(封装、继承、多态)形成了实践认知,能完成中小型系统的类设计与模块整合。但在技术深度上,缺乏对底层原理(如 JVM 多态机制、集合数据结构)的探究,复杂场景(如高并发、GUI 框架设计)的应用能力不足。后续需结合设计模式实战,深入理解接口与抽象类的架构价值,强化集合性能优化与异常处理的系统性思维。
采坑心得
一. 概念模糊导致的代码逻辑混乱
初期误以为 “继承就是复制代码”,在 PTA 作业中设计 “交通工具” 类时,让子类过度继承父类无关方法(如飞机类继承汽车的 “轮胎磨损” 属性),导致代码冗余。教训:继承需遵循 “is-a” 原则,优先用组合(如 “飞机包含引擎”)替代不合理继承。后来在实验中设计用户权限系统时,通过接口组合(AdminRole implements UserRole, Privilege)解决了职责分离问题。
二. 忽视封装边界引发的调试噩梦
实验初期为图方便,将类属性全部设为public,结果在电梯管理系统中,对电梯请求的输入以及完成电梯请求和完成下一步古电梯的升降,配合final修饰不可变属性,代码健壮性显著提升。
三. 多态应用中的类型转换陷阱
PTA 有题要求用 “Shape” 父类引用调用子类特化方法,曾直接强制类型转换导致ClassCastException。经验:通过instanceof先判断类型再转换,或在父类中定义通用接口(如Shape.getArea())避免强制转换。后续在实验的 “图形编辑器” 中,用多态直接调用draw()方法,无需关心具体子类类型,代码扩展性大幅提高。
四. 架构设计缺乏前瞻性的返工教训
第一次实验实现 “航空货物管理系统” 时,未分层设计(将 UI、业务逻辑、数据访问混写),后期添加 “支付订单” 功能时不得不重构整个代码结构。反思:开发前需绘制类图与架构图,遵循 “单一职责原则”,如分离StudentService(业务)与StudentDAO(数据访问)。后来在 JavaFX 界面开发中,用 MVC 模式分离视图与逻辑,维护成本降低。
五. 异常处理草率引发的程序崩溃
早期 PTA 作业中直接忽略IOException,导致文件读写失败时程序直接终止。经验:必须区分 Checked 与 Unchecked 异常,对可预见错误(如文件不存在)用try-catch处理,不可恢复错误(如内存溢出)通过finally释放资源。实验中自定义SystemException封装业务异常,配合日志记录,调试效率提升。
总结:面向对象的 “坑” 多源于 “重编码、轻设计”,需在实践中强化 “封装隔离、接口抽象、多态扩展” 的思维,每一步代码都反问:“是否符合 OOP 原则?” 才能避免重复踩坑。
改进建议及总结
面向对象编程课程综合性总结与改进建议
一、课程综合性总结
本课程通过线上线下结合、作业与实验联动的模式,系统培养了面向对象编程能力。Blog 作业强化理论总结与表达能力;PTA 作业聚焦语法实践与逻辑训练;实验项目推动综合应用;课程教学提供理论支撑。整体形成 “学 — 练 — 用” 闭环,但部分环节存在优化空间。
二、改进建议
Blog 作业优化
降低入门门槛:提前提供 MarkDown 语法教程、博客模板及优秀案例,帮助零基础学生快速上手。
明确写作方向:结合具体知识点或项目难点布置主题(如 “多态在 XX 场景的应用”),减少学生选题困惑。
增加互动反馈:开放博客互评功能,或教师选取典型案例点评,提升写作质量。
PTA 与实验改进
优化实验系统体验:支持代码粘贴、语法提示或补全功能,减少手动输入耗时;增加自动保存功能,避免因系统故障丢失代码。
细化实验指导:提供分步骤伪代码框架或测试用例,帮助学生理清思路;实验后增加代码评审环节,强化代码规范意识。
调整迭代策略:PTA 作业可增加 “选做挑战题”,满足学有余力学生需求;实验题目可引入真实场景(如小型电商系统),增强实践价值。
教学组织优化
线上课程:在视频中插入随堂小测验或互动问答,提高学习专注度;针对复杂知识点(如集合框架底层原理)增加拓展文档。
线下课程:预留课堂时间进行代码实操演示,结合学生作业常见错误现场调试;增加小组讨论环节,鼓励学生分享解题思路。
考核方式:适当降低 Blog 与 PTA 作业的分数占比,增加实验答辩或设计文档的考核权重,更全面评估综合能力。
三、总结与展望
本课程在知识体系搭建与实践能力培养上成效显著,但需在工具便利性、教学互动性和个性化需求满足上进一步优化。建议教师结合学生反馈动态调整教学节奏,例如针对薄弱环节(如异常处理、JavaFX)增加专项练习;作业设计可引入 “错题复盘” 机制,帮助学生深化理解。通过以上改进,有望让课程更贴合学生需求,实现理论与实践的深度融合。

浙公网安备 33010602011771号