cyxdbk

导航

面向对象程序设计总结性Blog

前言

      本学期的面向对象程序设计的课程也是结束了,这学期的课程采用线上自主学习课程与线下课上教学相结合的方式进行课程的学习。线上课程在学堂在线上进行学习,由多位老师对概念进行分类讲解,视频课程后伴随着随堂作业和讨论来进行对概念的巩固,并在课程结束后进行线上考试来考察课程的学习情况;线下课程由我们班主任亲自为我们讲解面向对象编程设计的编程思想,不仅教会我们如何编程更教会我们什么才是面向对象的编程,最后再通过翻转课堂的方式,让我们每个人都上台讲解javaFX的知识,不仅让我们对所讲的知识有更深刻的了解,更让我们提升自身的思维能力。作业上通过PTA作业、实验作业以及Blog作业来考察我们对课程学习的情况。PTA作业采取对每周课程学习的进度来布置单元性题目的形式,来巩固我们对单元知识的了;,实验作业采取由易到难的“动物进入电器”代码的实现,从单个动物的封装到多个动物的继承再到多态、抽象类以及接口和集合框架的运动到最后的javaFX实现代码的界面化的形式;而Blog作业则是通过在PTA上布置作业,并将之不断提升要求让我们进行重构,最后再对这个作业进行总结,作业的难度在我看来逻辑上以第一次的“电梯”作业为最难,电梯运动的逻辑让我几天几夜睡不着觉,在规范性上则是第二次的“航空货运系统”更难编写,一不小心就会出现“屎山代码”的情况,一个类的代码直接到几百行而别的类只有几十行,这两次Blog作业充分的考察了我们的逻辑思维与面向对象思维,让我们经历设计——编写——总结的过程来加深我们对学习知识的印象。

面向对象技术总结

       在本学期的课程中我们主要学习了封装、继承、多态、抽象类、接口、集合框架、异常以及javaFX等相关内容。

       首先学习的是面向对象的三大特性:封装、继承与多态。

       封装是面向对象编程的基石之一,其核心思想是将数据(属性)和操作数据的方法(行为)捆绑在一个称为“类”的单元中,同时对外隐藏内部实现细节,仅通过有限的接口(如Setter方法进行数据的存入与Getter方法进行数据的读取)与外界交互。在Java中,封装主要通过访问修饰符(如privatepublicprotected)来实现。其具有安全性、灵活性、可维护性的优势。封装是我们整门课程的核心思想,在所有代码的编写中都要使用封装。我们在课程上进行封装思想的讲解然后课后在PTA上编写单个类实现所需功能的代码,通过对代码中属性的定义以及方法的实现来查看对封装的理解与使用。

       继承是面向对象编程中一种重要的机制,它允许一个类(子类)基于另一个类(父类)来构建,通过extends关键字实现代码的层次化组织和复用,子类可以自动获得父类的非私有属性和方法,并可以通过方法的重写来修改或扩展父类的行为以此来实现自身同种特征的不同表现,同时通过super关键字可以调用父类的构造方法或成员;Java采用单继承设计(一个子类只能有一个直接父类)。继承的核心价值在于提高代码复用性减少相同代码的编写,并为系统提供清晰的层次结构(如"Dog is an Animal"通用到具体的分类关系)。在课程的学习上我们则主要学习正确的继承构建,以防止我们出现"成绩 is a 作业"的错误理解。

       多态是面向对象编程的核心特性,它允许不同类的对象对同一消息做出不同响应,主要通过方法重写和向上转型实现。在Java中,当父类引用指向子类对象(如Animal animal = new Dog())并调用被重写的方法时,实际执行的是子类的实现,这种运行时确定方法调用的机制称为动态绑定。多态分为编译时多态(方法重载)和运行时多态(继承+重写),它能提高代码的扩展性和可维护性,使得程序可以基于抽象编程而不依赖具体实现。在学习的过程中,我多用到的是运行时多态,通过继承+重写的方式实现类似Lion.cry()与Tiger.cry()的相同方法不同叫声。可以使我们编码更加灵活。

       接下来学习的是抽象类与接口。

       抽象类是用abstract修饰的类,用于定义部分实现的模板,要求子类完成剩余逻辑。它可以包含抽象方法(无方法体,强制子类实现)和具体方法(可直接继承),但不能被实例化。抽象类适用于"is a"的层次关系(如Animal作为基类,Dog/Cat作为子类),强调代码复用和共性提取。在PTA作业与实验作业的编码中,抽象类被经常的使用到,可以说是一个非常重要的内容,在我学习抽象类的时候,往往把抽象类与继承混淆,但在学习中我逐渐认识到抽象类是一种特殊的类,而继承是一种机制,抽象类也是通过继承来实现子类对抽象基类中方法的调用,但抽象类强化了继承的约束性,要求抽象类中的方法在子类中必须存在。

       接口(Interface) 是Java中定义行为契约的纯抽象类型(Java 8前),通过interface关键字声明,用于规范类必须实现的方法集合(默认public abstract)。它支持多实现(一个类可实现多个接口),突破单继承限制,强调"能做什么"而非"是什么"。接口常用于定义跨类别的能力标准(如Comparable定义比较规则、Runnable定义线程任务),实现系统解耦和策略模式,是面向抽象编程和多态特性的核心载体。在实验四、五中就用到了Comparable来比较动物的攻击力,而在“航空货运系统”就运用了Payment接口来统一支付宝/微信/现金支付的调用方式。但在学习的过程中我对接口的认识还不够,编码的时候往往不会使用接口,多是使用继承,所以我对接口还需要进行了解与练习。

      然后是集合框架的学习。

      Java集合框架是一套用于存储和操作对象组的标准化架构,位于java.util包中,核心由三大接口组成:Collection(单元素集合,含List有序可重复、Set无序唯一、Queue队列)、Map(键值对集合)及其实现类(如ArrayListHashMap)。目前我对集合框架的认识与使用还比较欠缺,只会较基础的使用Collection、List、ArrayList的一些简单的方法,在这次PTA的最后一次作业上的HashMap的使用我就不会写。

      接下来是异常的学习。

      Java异常(Exception) 是程序运行时出现的非正常情况处理机制,继承自Throwable类,分为受检异常(Checked Exception,如IOException,必须捕获或声明)和非受检异常(Unchecked Exception,如NullPointerException,可选择性处理)。通过try-catch-finally语法结构实现错误隔离与恢复,支持自定义异常(继承Exception类)和异常链(cause参数传递底层异常)。异常机制将正常逻辑(try块)与错误处理(catch块)分离,保障程序健壮性,例如文件读取时自动释放资源(finally块),同时借助throws声明实现责任传递,形成清晰的错误处理分层架构。在课程的学习中老师对此进行了清晰的讲解,然后我们目前的编码对异常的使用并不高,然后我就全忘了,只会一个最简单的main方法里的一个较为常用的异常使用的格式。

       最后是javaFX。

       JavaFX 是Java的现代化GUI开发框架,用于构建跨平台的富客户端应用程序。它提供了一套丰富的UI控件(如按钮、表格、图表)、CSS样式支持、FXML界面描述语言,以及强大的2D/3D图形和动画API(如TranslateTransition)。通过场景图(Scene Graph)树形结构和属性绑定机制,JavaFX支持响应式开发,并整合了多媒体(音频/视频)和Web引擎功能。但是我对javaFX的使用还停留在最简单的UI控件的层次,后面的CSS样式和FXML还有Web功能还不知道如何可以将他们使用(eclipse上还需要对它们进行下载再添加到项目里才能够使用),总的来说,javaFX以我目前的水平还难以制作出一个优美的界面,要想很好的完成一个项目的界面化还需要对javaFX有着更加深刻的认识,它的组件太多了,要将他们很好的配合还是难度有点大了。

踩坑心得

       经过一个学期的学习,我踩过很大的坑,尤为深刻的就是第一次的大作业,在第一次的题目中,电梯的逻辑太难理解了,我修改了很多次都没有正确,现在看来其实还是我没有全局观念,我之前修改的时候总是只在逻辑上修改一个小地方,自以为修改对了,其实我这里修改对了,然后又把其他的地方给因为这个修改而产生错误了,后面还是我狠下心来,把运行逻辑的代码全部删除,然后把逻辑厘清,从表层到内层全是if-else才终于写对,虽然这个逻辑是写对了,但其实还是存在重复编写的问题,我一个运行的逻辑有300-400行,我看别人的就100多行,后来我又仔细查看我的代码,发现里面的好多if-else其实都可以不用写,因为经过之前的判断后根本就不可能再进入到这些判断中了。经过这次作业我深刻的认识到了全局观念有多重要,只盯着一个点很难可以完善好代码,要从整体出发,切实找到问题,才能真正解决问题。

      还有一个很深刻的踩坑就是期中考试的最后一个题目,我那个题目其实都要写对了,然后我一运行就报错,我看那个报错显示什么数据类型错误,我想了好久好久也没有想出来是什么东西,可以说我想了一个小时的这个,然后都没想出来,后来我走到路上一想,突然想到就是我的scanner.nextLine()这个方法会产生一个换行,然后让我后面的scanner.nextDouble()读到了字符串类型的数据,我回去一改这果然就对了。还是考试的时候太紧张了,这么一个小点的问题都没有想到。我还要加强我的心理能力,不要一考试就紧张让我的水平发挥不出来。

改进建议及总结

      经过这一个学期的学习,总的来说还是学到了很多,但也就这么多了,学习并没有进行深入,很多知识我还停留在表面,当然,大学是需要自主学习的,我还需要大量的自主学习,这学期的作业我认为都挺合理了,除了最后的那一个航空货运系统的GUI作业,我感觉我javaFX啥都还没学到呢,javaFX的作业也没写过什么,突然就一步跃迁到了要完成一整个页面的编写,我觉得还是太难了,这部分我觉得还是需要从浅入深的学习,也需要大量的练习,不然这么多UI组件和自带的方法我怎么记得住,课程上也需要对这些进行更加深入的了解,这些全靠我们自学的话难度还是太高了,主要这些学习的视频资料也不是很多,大多数也只是还在表层,更需要老师的讲解。

posted on 2025-06-21 11:48  啦~~~~~~~~~~啦  阅读(13)  评论(0)    收藏  举报