OOP课程总结性Blog
( 一 )前言:
-
Blog作业总结
- 工作量:从类的设计到接口的实现,从 UML 图的绘制到代码的调试,每一个环节都需要反复推敲,这当然不是简单的文字堆叠,而是将心路历程与理解具象化的思维升化。
- 难度:论及难度,他不像是让你觉得无法完成,而是需要你静下心来思索自己在这个阶段的历程然后以精简的语言记录下来。所以写工程日志是一个好习惯。
- 从长远来看,养成一个写Blog的习惯无疑对程序员的思维组织,能力提升,避坑体会都有极大的提升。这样的作业,难在思维的跃迁,却也妙在成长的可见。它让你在写代码解析时,不得不深挖 “里氏替换原则” 的底层逻辑。而当你最终提交那篇充满类图、代码片段 Blog 时,会突然懂得:所谓面向对象的精髓,或许就藏在这一遍遍拆解、重构、实践的过程里。
-
PTA作业总结
- 工作量:总体上来说,pta的工作量虽然乍一看好像短时间难以完成,但是其实平时的要求都按质按量完成的话。潜心下来你会发现一天亦或是两天大部分的得分点已经收入囊中了,至于有几个让你一直纠结过不去的测试点,本人的建议是先放下或者换个思路,不要死磕,因为本人就享受一次性打通关的快感,所以力求拿下所有的得分点,但实际上这样会浪费很多时间但其实可能是南辕北辙的努力,对于个人的提升意义不是很大。可以询问同学思路之后再独立尝试解题,这样对自己帮助是更大的,而且也节约了自己的时间。
- 难度:难度的话除了第一次对算法理解的要求有点高之外其他的其实都还行。如果只想要拿到的得分点的话那可能做PTA作业的意义遍大打折扣了。面向对象的核心并不是要求实现需求,而是采用一种怎样的模式实现需求,是否易于可扩展性,是否易于维护,在面临变化性大的要求是否能较快调整,这才是面向对象设计的内核。所以在做pta作业时,拿到的分点并不难,但是如果你看见给出的类图还能辩证的思考为什么要这样设计,有着精益求精的精神的话,那还是很有难度的,但只有这样,才能苦中作乐,“梅香自寒来”。
-
实验作业总结
-
工作量:此次实验作业的工作量真是一场耐力考验!在代码编写环节,强制要求手动逐字输入,没有代码补全功能辅助。光是输入基础类定义与方法声明,就得耗费比往常多两三倍的时间,那些反复出现的括号、分号,稍不留神就会遗漏。调试时发现的拼写错误,又得重新一行行观看代码错误,这种机械性输入大幅拉长了整体作业时长,原本可以专注于类结构设计与逻辑实现的精力,却大量消耗在基础语法的精准录入上,与面向对象编程追求的高效复用、抽象封装核心理念背道而驰,着实令人感到无奈又疲惫。但是还是坦然接受吧,程序员之路必定是枯燥的,唯有扛过一个个枯燥下午与日夜,才能一步步成长,从小白变为大佬。
-
难度:从难度层面来看,作业设置对初学者还是比较友好的。任务围绕类的创建、对象的实例化、方法调用,javaFx的基础使用等基础要点展开,循序渐进引导掌握面向对象编程的基本使用方法。继承、封装等核心概念通过大象装进冰箱的具体案例步步递进,即便初次接触也能逐步理解。虽然代码手打增加了实操的繁琐度,但就知识理解与技能掌握而言,难度上升平缓,恰好能帮助新手夯实基础,每完成一个小任务,都能有一步的收获与成长。
-
-
线上与线下课程总结
- 工作量:课程的总体工作量属于能接受的范围吧,老师在课堂上讲解一些实例与重要框架实现以及面向对象核心技术,而线上课程则将技术概要浓缩为视频便于学生预习,复习,达成互补效果。
- 难度:要学会这门课程难度其实不高,但是想要学懂并贯彻面向对象的核心理念实际编程还是具有一定的难度的,所以这也反映了学习编程语言的秘诀其实就是多练多实践才能一步步理解怎么用,再接合所学习的理论才能了解为什么这么用,而不是纸上谈兵。
上面就是在面向对象程序设计这门课程中学习阶段的一些总结,接下来分享本人在对封装、继承、多态、抽象类、接口、集合框架、异常以及JavaFX等相关内容掌握情况的总结心得,以及踩坑心得,欠缺等等。😊
( 二 )面向对象技术总结:
1.📦封装
- 核心思想: 将数据(属性/状态)和对数据的操作(方法/行为)捆绑在一起,形成一个独立的单元(类),并隐藏对象的内部实现细节,只对外暴露有限的、可控的接口进行交互。
点击查看具体案例

💯解释与分析:
- 此例子虽然简单但是包含了封装的核心思想,即将一个单元整体封装在一起,隐藏具体的实现类,本例就是将Point类与Line类封装成独立单元,只留下getter与setter访问修改。这就好比想象一个胶囊。胶囊的外壳将内部的药物(数据)和保护/释放机制(方法)包裹起来。用户(外部代码)只需要知道“服用”(调用公共方法)就能达到治疗效果,完全不需要知道胶囊壳是什么材料做的、药物如何混合、如何在体内释放(内部实现细节)。通过对封装的理解与深入我也了解到这是面向对象设计的基石之一,是实现“高内聚、低耦合”的关键手段。
2.🧬继承
- 核心思想: 允许一个类(称为子类或派生类)获取另一个类(称为父类、或超类)的属性(数据成员) 和 行为(方法成员),并可以在其基础上进行扩展或修改。它建立了一种 “is-a”(是一个) 的关系。
- 易错辨析:不适用于“has-a”(有一个)关系: 例如,Car 有 Engine,应该用组合(Composition) 或聚合(Aggregation) 而非让 Car 继承 Engine。再拿上面的点线作为案例,线 has 点 所以他们并不是继承而是聚合,之所以不是组合是因为组合的关联性相对较强即部分不能离开整体单独存在就好比部门与公司之间的关系,部门不能离开公司而单独存在。
3.🌀多态
- 核心思想: “多种形态”。它允许你使用统一的接口来操作不同类型的对象,并且在运行时能够自动调用该对象所属类型的特定实现。简单来说就是:“一个接口,多种实现” 。
点击查看具体案例

💯解释与分析:
- 依旧拿点线题目作为例子,将Point类与Line类抽象出共同父类Element类,在Element类中声明抽象方法display(),在子类中对方法进行重写实现其特有功能。但是在我编写时发现一些问题即 private 方法: 对子类不可见,无法重写。好比一个万能遥控器 (父类引用/接口引用),匹配的是谁就调用谁,遥控器(接口或抽象方法)不变,按下的按钮(方法名)不变,但产生的效果(行为)由实际配对的设备(对象类型)在运行时决定。通过学习继承与多态我了解到他们共同构成了面向对象灵活性和可扩展性的核心支柱,但是在使用时必须遵守里氏代换原则(LSP)子类必须能够完全替换父类而不破坏程序逻辑。
4.📐抽象类
- 核心思想: 抽象类是不能被实例化的类,它充当一个蓝图或模板,用于定义其子类必须遵循的结构(抽象方法) 和可以共享的通用实现(具体方法、属性)。
- 为了易于大家理解我再拿点,线,面,Element类来举例子,Element是抽象出来的具有所有子类共同特征的父类,所以再设计时抽象类好比是一张蓝图,它并不需要你创建时将具体的细节实现但是它衍生出的子类具有蓝图(抽象类)所有的特性并且实现具体细节,就好比动物是个抽象的概念,但是它具有名字,体重等等,它的子类如大象,狮子等就可以继承这个抽象类实现细节和特有的方法。
5.🔌接口
- 核心思想:抽象的做什么,而不是是什么。
- 本人理解到的接口就是一个万能钥匙,它与抽象类相似但是又存在区别,就拿最近的GUI航空货运管理系统为例子,先定义抽象支付接口,再根据不同的规则实现微信,支付宝等不同的支付规则。但是抽象类更多的是代码上的继承关系,接口更多的偏向于方法的实现。然后类可以实现多个接口,但是不能继承多个父类。
6.🗃️集合框架
- 本人认为集合就是封装好的工具类,在使用过程中可以根据不同的使用场景来创建不同的集合容器类。如在电梯调度算法使用LinkedList实现楼层的顺序添加,再查找关键字中Map的键值对形式有效帮我们简化了代码。但是对于Set与Map的使用本人不是很熟悉,对于迭代器的使用也需要进一步的加强理解。
点击查看集合框架细节


7.⚠️异常
- 异常捕获的使用对于代码的可调试性与健壮性带来了极大的便捷。在航空货物管理系统中,本人经常发现找不到文本路径或者图标的情况,但是在使用Try catch等语句后可以有效地维护代码,避免空引用访问等问题的出现,但是在使用异常捕获时候本人经常忘记一些语法细节,还得多实践增强记忆理解。
点击查看⚡关键API与方法

8.🖥️JavaFX
- JavaFx在图形界面的完成与实现人机交互逻辑方面展现强大的功能。相比于C语言的EGE图形库,JavaFx封装了更多实际的布局,容器,等等。他是基于舞台(Stage)-场景(Scene)-节点(Node)的层级模型,通过声明式FXML布局与面向对象编程结合,实现现代GUI开发。下面分享本人在航空货物管理系统中的两个界面来展示JavaFx的强大与便捷。
点击查看登陆界面

点击查看主界面

- 然而,JavaFX的布局管理和样式设置相对复杂,本人在布局容器的使用和样式的个性化定制方面遇到了不少困难。对于JavaFX的动画效果和多媒体处理功能以及3D效果还没有深入学习和实践,掌握程度有待提高。
( 三 )采坑心得:
1.理解需求后再编码
- 本人在编码过程中总是因为各种原因想要加快编码速度,但是很多时候的效果却是南辕北辙。无论是一开始的电梯调度算法,题目明确电梯是否停下,转向等操作只考虑两个请求队列的头部队列;还是到后来的搭建谷仓明确为立方体,再到最后的关键字统计只有[]以及,分隔,本人都因为想快点拿到满分而急于求成忽略了代码的质量可维护性以及没有理解题目真正的意思。
往往急功近利带来的却是南辕北辙。
2.实践大于理论
- 相信大家在学习过程中听一遍或者看一遍就觉得自己会用了,但是在实践构成中其实有很多细节是在理论考虑不到的,就好比本人在学习集合框架时候认为很简单就没有动手实践,但是在考试过程中运用采用集合框架实现冒泡排序的时候却忘记了list.set(),交换方法的使用,加上有点紧张卡了许久,亦或是抽象和类和接口的实现,实践都是必不可少的。
“理论上,理论和实践没有区别。但实践上,是有区别的。”
3.精益求精的精神贯彻
- 在学习完成面向对象设计这门课程之后,我深刻理解到了这门课最重要的从来不是完成需求,而是怎样的完成需求。在迭代训练中,如果完全违背七大设计原则就会发现代码的可维护性与扩展性极差,后续再增加新的功能时候就会重新来过。在开发航空货物管理系统时亦是如此,一开始本人并没有按照MVC设计模式进行开发以至于代码十分冗长,可扩展性极差,这绝对不是面向对象设计所追求的,后来经过大改特改也算是知道了规范代码的重要性。
“写代码时,每次都要告诉自己:最后负责维护代码的,会是一个知道你住在哪的变态暴力狂。”
( 四 ):改进建议及总结:
1.改进建议
- 在一次总体迭代完成后可以给出出题组所期望的设计思路(类图)或部分源码,即“标准答案”,这样可以让做题者走出“当局者迷”的困境,更有利于提升设计思维。😊
- 在起初的作业设计上让同学们偏重于思考为什么要设计给出的类图,为什么要实现这种规范模式以及怎样举一反三等等,而不是让学生一味地体会实验平台纯受敲代码的枯燥,这样会减弱一部分同学学习的热情。
2.总结
- 通过学习本门课程,无论是在一次次的迭代训练中体会客户需求的可变性,还是在一次次代码的修改中体会语法与理论使用的合理性都提高了本人对这门课程的理解与掌握。
- 通过翻转课堂让同学们自己当一回老师,分工讲解案例与理论,制作ppt提高了同学们自身的理解也增加了课堂的趣味性。
代码之路必定有想不出算法逻辑的苦恼💻😫,也有面对庞大工作量的迷茫📚🌪️,但是也交杂着完成目标的成就感🏆✨!路就在脚下🛣️,只要肯走👣💪就能走出自己的康庄大道!🌈🚀🌟感谢您的阅读!

浙公网安备 33010602011771号