一.前言

回顾这一学期的面向对象程序设计这门课程,分为了好几种形式来学习,无论是线上线下课程还是Blog总结性作业、pta作业、实验都让我学习到了很多东西。从 Blog 作业、PTA 作业、实验,到线上线下课程,每一个学习环节都承载着独特的意义与价值,共同构筑起我在 Java 编程领域的知识体系和实践能力。每次撰写 Blog 时,都需要对近期所学内容进行系统梳理,不仅加深了对知识点的理解,还锻炼了文字表达和技术总结能力。PTA作业与实验数量较多涵盖了从基础语法到复杂项目的各类编程任务,也能够极大地锻炼我的编程能力。不过我觉得我每一周都要写Java的作业(好多啊),Blog作业和pta作业一周一周交替的来,这样看也不是很多作业量。但是还有实验编程和报告啊,是要纯靠手打的代码所以总是好多错误,编程难度不大,就是编写难度较大。然后线上课程总是会忘记看,毕竟不是一下子都开放的,等到想起来的时候已经关闭了一些(苦涩)。线下课程的话,张老师讲的还是很细的,初期的语法学习比较简单,但是随着封装、继承、多态等面向对象特性以及集合框架、JavaFX等内容的深入,难度也逐步提升。不过,总的来看,通过不断的实践与思考,我也想学习到了很多知识,提升了自己的能力。

二.面向对象技术总结

1.封装、继承与多态

在PTA作业和实验中,封装的应用十分频繁。为此,我学会了酱类的属性私有化,并通过公共方法进行访问和修改,这样不仅保证了数据的安全性,也增强了代码的可维护性。在实际应用中,我也逐渐意识到,合理的封装不仅仅是对属性私有化这么简单,还需要考虑如何设计简洁明了、功能完备的公共接口,以方便其他类对该类进行调用和操作。
继承让我能够服用已有类的代码,提高开发效率。通过作业中圆形类继承体系,我学习到了子类如何继承父类的属性和方法,并精心扩展或重写。继承机制为代码复用提供了强大的支持,极大地提高了开发效率。在实验中,我们曾构建过一个图形类继承体系,以Shape类作为父类,定义了通用的属性(如颜色)和方法(如计算面积的抽象方法getArea)。然后派生出Circle(圆形)类、Rectangle(矩形)类等子类。子类继承了父类的属性和方法,并根据自身特点进行扩展或重写。例如,Circle类继承了Shape类的颜色属性,同时重写了getArea方法,根据圆的面积公式πr²来计算自身面积;Rectangle类则根据矩形的长和宽计算面积。通过这种继承关系,避免了在每个子类中重复编写公共的属性和方法代码,减少了代码冗余。同时,继承也体现了现实世界中事物的层次关系,使代码结构更加清晰、符合逻辑。在实践过程中,我也遇到过一些问题,比如继承层次过深可能导致代码的可读性和维护性变差,因此在设计继承关系时,需要谨慎规划,确保层次结构合理、清晰。
多态则是面向对象编程的精髓,在编写不同动物的发出的不同动作程序时,利用多态特性,父类引用指向子类对象,实现了同一方法根据对象类型的不同表现出出不同行为,这让代码更加灵活和通用。以绘制图形的程序为例,我们可以定义一个Shape类型的引用变量,然后让它指向不同的子类对象,如Circle对象或Rectangle对象。当调用draw方法时,根据引用变量实际指向的对象类型,会执行相应子类重写后的draw方法,从而实现不同图形的绘制效果。这种 “同一接口,多种实现” 的特性,使得我们在编写代码时可以更加抽象和通用。例如,在一个图形数组中存储不同类型的图形对象,然后通过遍历数组调用每个图形的getArea方法,无需关心具体是哪种图形,就能得到各自的面积,极大地简化了代码逻辑。在理解和运用多态的过程中,我逐渐明白,多态的实现依赖于继承和方法重写,并且需要正确理解向上转型和向下转型的概念及应用场景。同时,合理运用多态可以使代码更具可维护性和可扩展性,当需要添加新的图形类型时,只需要创建新的子类并实现相关方法,而无需对原有代码进行大规模修改。

2.抽象类与接口

抽象类为子类提供了一个通用的框架,在实验中,我们创建过一个抽象的Animal类,其中定义了抽象方法speak,表示动物发出声音的行为。具体的Cat类和Dog类继承自Animal类,并实现了speak方法,分别定义猫叫和狗叫的具体行为。通过这种方式,抽象类强制子类必须实现某些特定的方法,确保了子类在行为上的一致性。抽象类中还可以包含具体的方法和属性,这些方法和属性可以被子类直接继承和使用,进一步提高了代码的复用性。然而,在实际应用中,我发现对于抽象类的设计和使用需要谨慎把握。如果抽象类中的抽象方法过多,可能会导致子类的实现过于繁琐;而如果抽象类过于具体,又失去了其抽象的意义。因此,需要根据实际需求,合理确定抽象类的抽象程度和包含的内容。在实验中,也用了compareble的接口,接口是 Java 中实现多继承的一种机制,它比抽象类更加灵活和纯粹。接口只包含抽象方法和常量,实现接口的类必须实现接口中定义的所有方法。在实际项目中,接口常用于定义不同功能模块之间的契约。但在使用接口时,我也遇到过一些困惑,比如当多个接口中存在同名方法时,实现类需要妥善处理方法冲突的问题。此外,如何准确判断一个功能应该通过抽象类还是接口来实现,也是我在学习过程中需要不断思考和总结的问题。目前,我对抽象类和接口的应用场景把握还不够精准,在面对复杂项目时,有时会难以抉择到底应该使用抽象类还是接口来构建代码结构,需要进一步通过实践和学习来加深理解。

3.集合框架

集合框架时Java编程的重要工具。在PTA作业中,用的比较多的是Array List、LinkedList等集合类能够根据不同需求选择合适的集合存储和处理数据。例如在航空货运系统题目中,我使用了ArrayList来存储货物信息,ArrayList是一种基于数组实现的动态数组,它允许我们存储和操作一组对象。在处理需要频繁访问元素的场景时,ArrayList表现出色,因为它可以通过索引快速定位到元素;同时,ArrayList还提供了许多实用的方法,如add、remove、size等,方便我们对集合进行操作。还有LinkedList,LinkedList是基于链表实现的,在频繁插入和删除元素的场景下性能较好。但对于HashMap集合类并不熟悉,使用的较少。搜索资料了解到HashMap是一种基于哈希表实现的键值对集合,它以键值对的形式存储数据,能够快速地根据键查找对应的值;HashMap的查询时间复杂度平均为 O (1),具有很高的效率。但需要注意的是,HashMap并不保证元素的插入顺序,并且在多线程环境下,如果不进行适当的同步处理,可能会出现数据不一致的问题。

4.异常处理

在PTA作业中,我经常遇到非零返回等的编译提示,通过老师课程学习和AI学习,我学会了用try-catch-finally语句来捕获和处理异常,例如,在进行文件读取操作时,可能会出现文件不存在、文件权限不足等问题,这时就会抛出IOException异常。我们可以在try块中编写文件读取代码,在catch块中捕获IOException异常,并在捕获到异常后进行适当的处理,如提示用户文件读取失败的原因,或者采取默认的处理方式。finally块中的代码无论是否发生异常都会执行,通常用于释放资源,如关闭文件流、数据库连接等,确保资源的正确释放,避免资源泄漏,提高了程序的健壮性,有效地减少了因意外情况导致程序崩溃。不过,对于更深层次的使用和自定义异常的涉及和使用,如在实际项目中,有时我们需要根据特定的业务逻辑定义自己的异常类,我还是缺乏实践经验,还需学习。

5.JavaFX

JavaFX提供了多种布局管理器,如BorderPane、HBox、VBox等,它们可以帮助我们灵活地组织界面元素。例如,在图书管理系统界面中,使用BorderPane将界面分为顶部的菜单栏、左侧的导航栏、中间的图书列表展示区域、右侧的详细信息展示区域和底部的状态栏。同时,通过添加Button(按钮)、TextField(文本框)、TableView(表格视图)等控件,实现了图书的查询、添加、删除等功能操作。在使用控件时,需要设置控件的属性,如文本内容、大小、样式等,以满足界面设计的需求。在 JavaFX 中,可以通过匿名内部类、Lambda 表达式等方式为控件添加事件监听器。在实验后期,我们需要在前几次的实验的基础上,通过JavaFX的使用设计出动画操作演示。用的较多的是创建按钮的Button,用了HBox和VBox来设计布局。UI组件的Button和Alart来确认对话框。初步掌握了界面布局、控件使用和事件绑定及处理的方法。但由于学习知识点有限,我对 JavaFX 的学习还停留在基础阶段,所以对JavaFX的动画效果、CSS样式定制等高级功能了解较少,界面设计也不是很美观和专业。

三.踩坑心得

在学习这门课程的过程中,踩过不少坑。由于对封装的理解不到位也不深刻,在代码中过度暴力类的属性,导致后期维护时出现数据混论的问题;同时也有过对数据类型都使用private来封装,导致其他类无法set或者get它。另外,在多线程编程中,由于对线程同步和锁机制理解不足,程序数据也出现了数据不一致的问题,通过反复调试和学习相关知识,才解决了问题,也加深了对多线程的理解。

四.改进建议及总结

这门课程让我系统的掌握了Java面向对象编程的核心技术,培养了良好的编程习惯和思维方式。我觉得可以可以在关闭学堂在线线上课程之前提醒各位同学哪个章节要关闭了,然后抓紧时间学习,而不是毫无征兆的就关闭了,有的同学还没学习到那。然后就是感觉好多作业,有时候PTA作业挺难的,然后又来实验编程题和报告,很多时候都堆到一起了(好吧,也可能是我比较拖拉)。题量和难度还可以接受,没啥建议。然后后期的翻转课堂其实效果挺一般的,好多人(包括我)其实都没太听懂,跟不上讲解人员的步伐,整节课下来也没学到什么(好多人都这个感受)。对于线下教学,其实张老师讲的挺好的,讲的很细很清楚。

posted on 2025-06-19 18:07  24201503-赖安怡  阅读(33)  评论(0)    收藏  举报