面向对象课程总结blog

软件工程课程学习总结与反思

在完成软件工程这门课程的学习后,回顾这段充实而充满挑战的学习历程,无论是 Blog 作业、PTA 作业、实验,还是线上与线下课程,都给我留下了深刻的印象,也让我在专业知识与实践能力上有了显著的成长。下面我将从课程整体概况、面向对象技术掌握情况、采坑心得以及改进建议等方面进行详细总结。

一、前言:课程学习概要性总结

(一)作业方面

Blog 作业:

Blog 作业贯穿整个课程学习过程,其目的在于引导我们对所学知识进行系统梳理、总结与反思。每次完成 Blog 作业时,都需要对特定的知识点、学习过程或项目实践进行深入思考,构建知识体系,并以文字形式清晰地表达出来。blog作业在我一开始看来并没有什么很大的意义,直到我发现每次做完blog作业后我对这个题目及其中的用法有了更加清楚的认知,知识点都会得到很好的梳理,让我的专业能力从一次次的错误总结中得到提升。

PTA 作业:

PTA 作业侧重于对编程知识和技能的训练,尤其是面向对象编程技术的实践应用。题目类型丰富多样,涵盖了从基础语法到复杂算法实现的各个方面,每次题目集中题目从简单运用到基础实践。初期的 PTA 作业主要围绕 Java 基础语法和简单的面向对象编程概念展开,难度相对较低,有助于我们巩固课堂所学的基础知识;随着课程的推进,作业难度逐渐加大,涉及到封装、继承、多态等复杂的面向对象特性,需要我们灵活运用所学知识,深入分析问题并设计合理的解决方案。完成 PTA 作业的过程极具挑战性,有时一个复杂的题目需要花费数小时甚至数天的时间进行调试,找出其中算法的问题(比如那道电梯运行的题目就很考验对算法的设计与实现),但正是这种高强度的训练,让我的编程能力得到了快速提升。

实验:

每一次实验都围绕特定的主题和目标展开,第一次实验是简单的动物装进冰箱时实现自身方法;到第二次实验对列表中所有的动物的三种排序,再输出列表中经过排序后的动物顺序;第三次实验接着是对动物和电器的抽象类实现,衍生出大象,老虎,狮子,冰箱,洗衣机,微波炉等一系列子类;第四次实验则是要对电器类和动物类都要实现Comparable接口,实现电器列表中动物的属性比较;第五次实验是我觉得最有挑战的一次实验,使用javafx对实验四进行ui设计,这对我们的javafx掌握程度有很大的考验,对各种布局,动画的移动等等都必须熟练掌握。总的来说,实验就是在每一个重点上完之后,对这个知识点的总结运用,让我们对这部分的知识点有更深理解和更好的运用。

二、面向对象技术总结

(一)封装

在 PTA 作业和实验项目中,封装的概念得到了大量应用。通过将类的属性私有化,并提供公共的访问方法(getter 和 setter 方法)来操作这些属性,实现了数据的隐藏和保护。在初期学习时,我对封装的理解仅仅停留在语法层面,只是机械地按照要求将属性私有化并编写访问方法。但随着学习的深入,我逐渐认识到封装的重要性。它不仅可以提高数据的安全性,防止外部非法访问和修改数据,还可以使代码的结构更加清晰,便于维护和扩展。例如,在一个学生信息管理系统的实验项目中,将学生的个人信息(如学号、姓名、年龄等)封装在 Student 类中,通过合理的封装设计,其他类只能通过特定的方法来获取和修改学生信息,有效地保证了数据的完整性和一致性。

(二)继承

继承是面向对象编程的重要特性之一,它允许子类继承父类的属性和方法,从而实现代码的复用。在 PTA 作业和实验中,我通过创建子类继承父类的方式,减少了代码的重复编写,提高了开发效率。例如,在PTA中有一个计算各种图形面积的题目,创建了一个父类 Shape,包含了图形的基本属性和方法,然后通过继承 Shape 类创建了 Circle、Rectangle 等子类,子类不仅继承了父类的属性和方法,还可以根据自身的特点重写父类的方法,实现特定图形的面积计算逻辑。而且继承还便于代码扩展,当有新的需求出现,需要创建新的类时,可以基于现有的类进行继承和扩展,在已有功能的基础上快速添加新的特性。

(三)多态

多态是面向对象编程中最具魅力的特性之一,它使得同一种方法在不同的对象上可以表现出不同的行为。在学习过程中,通过方法重写和接口实现等方式,我深刻体会到了多态的强大之处。在实验项目中,当需要处理不同类型的对象(如不同类型的用户,如航空货运时分为个人和公司,两者的计算优惠不同)时,利用多态可以使用统一的接口来处理这些对象,而无需针对每种对象类型编写不同的处理代码,大大提高了代码的灵活性和可扩展性。然而,在理解和运用多态的过程中,我也遇到了一些问题,如在复杂的继承和多态关系中,如何准确地判断方法的调用顺序和覆盖关系,对 “向上转型” 与 “向下转型” 底层机制的理解,还需要进一步加强学习。

(四)抽象类

抽象类是一种不能被实例化的类,它主要用于定义一些具有共性的属性和方法,为子类提供一个统一的抽象模板。在 PTA 作业和实验中,当遇到一些具有部分共性但又不完全相同的类时,使用抽象类可以有效地提取这些共性,减少代码的重复。例如,在设计一个游戏角色系统时,创建了一个抽象类 Character,包含了角色的基本属性(如生命值、攻击力等)和抽象方法(如攻击方法、防御方法等),然后通过继承 Character 类创建具体的角色类(如 Warrior、Mage 等),子类根据自身特点实现抽象类中的抽象方法。通过使用抽象类,不仅实现了代码的复用,还提高了代码的可维护性和扩展性。但在实际应用中,如何准确地判断哪些类应该定义为抽象类,以及如何合理地设计抽象类的抽象方法和具体方法,还需要进一步积累经验。

(五)接口

接口是一种特殊的抽象类型,它只包含常量和抽象方法的定义,不包含任何实现代码。接口的主要作用是实现多继承的功能,提高代码的灵活性和可扩展性。在学习过程中,我通过实现接口的方式,使不同的类可以具有相同的行为,从而实现了代码的复用和功能的扩展。例如,在航空货运的题目中,我定义了一个 Payment 接口,包含 pay 方法,然后创建了 Alipay、WechatPay 等类实现该接口,分别实现具体的支付逻辑。通过使用接口,系统可以方便地添加新的支付方式,而无需修改其他相关代码。在运用接口的过程中,我对接口的设计原则和使用场景有了更深入的理解,但在接口的继承和组合使用方面还需要进一步学习和实践。

(六)集合框架

Java 集合框架提供了丰富的数据结构和算法,用于存储和操作数据。在 PTA 作业和实验中,我广泛使用了集合框架中的 List、Set、等接口及其实现类。例如,在处理学生成绩管理系统时,使用 ArrayList 来存储学生对象,方便对学生信息进行添加、删除和查询操作;使用 HashMap 来存储学生的成绩信息,以学生学号作为键,成绩作为值,实现了快速的成绩查询功能。通过实践,我掌握了集合框架的基本使用方法和常见操作,但在集合的性能优化、并发访问控制以及自定义集合类等方面还存在不足,需要进一步深入学习和研究。

(七)异常

异常处理机制是 Java 语言中用于处理程序运行时错误的重要手段。在学习过程中,通过捕获和处理各种异常类型,我学会了如何使程序在遇到错误时能够更加健壮和稳定地运行。在程序中,当涉及到文件操作、网络连接、数据输入输出等可能出现异常的场景时,合理地使用异常处理机制可以有效地避免程序崩溃,并提供友好的错误提示信息。例如,在历次实验中都需要以文件读取的方式输入数据时,都需要使用 try - catch 块捕获 FileNotFoundException 和 IOException 等异常,确保程序在文件不存在或读取过程中出现错误时能够正常处理。然而,在复杂的异常处理场景中,如何准确地捕获和处理异常,以及如何合理地设计异常类层次结构,仍然是我需要进一步学习和掌握的内容。

(八)JavaFX

JavaFX 是用于创建富客户端应用程序的框架,在实验项目中,我尝试使用 JavaFX 进行图形用户界面(GUI)的设计和开发。通过学习 JavaFX 的布局管理器、控件使用和事件处理机制,我成功地实现了一些简单的用户界面。例如,在这次的航空货运系统的实验项目中,使用 JavaFX 设计了登录界面、物流查询界面和物流管理界面等,通过合理地布局控件和处理用户事件,提高了系统的易用性和交互性。但在使用 JavaFX 的过程中,我也遇到了一些问题,如 JavaFX 与其他技术的集成、复杂界面的设计和优化等,还需要进一步学习和探索。

总体而言,通过这门课程的学习,我对面向对象技术有了较为系统和深入的理解,并在实践中掌握了这些技术的基本应用方法。但在一些复杂的应用场景和高级特性的运用上,还存在一定的欠缺,需要在今后的学习和实践中不断加强。

三、采坑心得

(一)初期盲目编码,缺乏整体规划
在首次接触实验项目时,我急于开始编写代码,没有进行充分的设计规划。心里想着 “先把功能实现出来再说”,认为只要代码能跑通,后续再慢慢完善结构也不迟。编写pta中电梯运行那道题时,直接着手编写各类功能模块的代码,没有事先设计类与类之间的关系以及程序的整体架构。结果类与类之间职责不明确,一个类承担了过多的功能,使得代码耦合度极高,直到第二次作业还是这道题时不得不花费大量时间对代码进行重构,浪费了许多精力。这次经历让我明白,设计先行是项目成功的基石,没有良好的设计规划,后续的开发就如同在迷雾中航行,极易迷失方向。

(二)调试困难
在编程过程中,遇到程序运行错误时,由于缺乏有效的调试方法和工具使用经验,导致调试过程困难重重。在初期时,当程序出现运行时错误或逻辑错误时,往往不知道从何处入手进行调试,只能通过大量的打印输出语句来查找问题,效率低下。后来通过学习使用 IDE 的调试工具,如断点调试、单步执行等,能够快速定位问题所在,提高了调试效率。这让我明白,掌握有效的调试方法和工具使用技巧是解决编程问题的关键,在学习过程中,要注重调试能力的培养,熟练掌握调试工具的使用方法。

(三)输入输出处理不当
在nextInt()后直接调用nextLine()会读取残留的换行符,导致输入错位。在nextInt()之后添加一个额外的nextLine()调用,用来消耗掉残留的换行符就能很好的解决这个问题了。

四、改进建议及总结

通过这门软件工程课程的学习,我系统地掌握了软件工程的理论知识和面向对象编程技术。在学习过程中,虽然遇到了许多困难和挑战,但也从中吸取了宝贵的经验教训,提高了自己的问题解决能力和自主学习能力。这门课程让我深刻认识到软件工程是一门理论与实践紧密结合的学科,只有将理论知识应用于实际项目开发中,才能真正掌握软件工程的精髓。面向对象这门课程语法不难,主要是注重面向对象的编程思维培养,紧紧围绕单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特原则、合成复用原则这几大核心设计原则。通过这几大原则的指引,我们的代码能够具备更清晰的结构、更强的可维护性与可扩展性。这些原则如同面向对象编程的 “指南针”,帮助我们在代码设计中规避复杂逻辑带来的混乱,让程序在迭代过程中始终保持清晰的架构,最终实现 “高内聚、低耦合” 的高质量代码体系。最后建议是能不能改进一下实验提交系统,太难用了吧!!!

posted @ 2025-06-19 15:43  戴安良  阅读(21)  评论(0)    收藏  举报