第三次Blog作业

一、前言

本学期我们学习了面向对象程序设计这门课程,与上学期的C语言不同,刚开始接触到这门课程时,我觉得很难,Java里的知识对我来说很新,虽然说有线上课程可以自己先学习,但我基本没怎么认真去听,后面经过几次PTA的作业,慢慢了解了Java的语法结构和怎么根据题目自己编写程序,这个过程我也成长了,学到了很多编程方面应该算比较基础的知识,看到PTA里的题目也不再是无从下手,本门课程由以下几方面构成

Blog作业:

前两次Blog作业都基于PTA里的迭代作业来开展,第一次Blog作业基本都围绕电梯调度程序写,这个题目没考察类的设计(类图题目里有),主要是考察算法--Look算法;第二次Blog作业主要围绕航空货运管理系统程序来分析,这次迭代作业没有那么难,侧重考察类的设计;第三次Blog作业则是课程结束对本门课程进行全面分析总结。我觉得学院布置Blog作业挺合理的,每次迭代作业结束后用Blog作业来总结自己的代码思路和踩坑心得,了解了自己写的代码的缺陷,也有了方向下次该怎么写更逻辑清晰、简洁的代码,经过这个过程,我学到很多工具的使用,如用SourceMonitor来分析代码,用PowerDesigner来画类图,写Blog对于我来说还是有很多好处的。

PTA作业:

PTA里的题目集都是一周一个,这种频率对于我们来说挺合理的,有充足的时间来完成题目集的三到五道题,一般除了最后一道题目,前面的题目都比较简单,不需要花费太多时间,最后一道题目就比较复杂,需要自己花心思去构建代码框架或算法,但是大部分情况,自己去想了基本都能写出来,这个过程培养了我的编程能力,看到题目后我可以自己动手打大概的代码,报错后我可以根据提示和运行结果去修改代码,每次一个题目拿到满分后都很有成就感。

实验:

基本每周我们都会抽出一节大课的时间来做实验,实验一共有五次,前面几次用了抽象类和接口来实现代码,最后一次要用javafx的内容来实现动画效果,层层递进的实验内容结合PTA作业,更好地锻炼了我的编程能力,而且实验系统不能复制粘贴,某种程度上加快了我的打字速度,虽然这个过程比较痛苦并且程序经常因为打错字母报错。

线上课程:

线上课程由段老师录制,每个章节都有五六个视频供我们学习,而且每个视频后面都配有相应的练习来巩固线上课程里所学的知识,还有线上的期末考试通过选择题来检验我们的知识,如果线下课程有哪些地方没有听懂的话,可以通过线上课程进一步学习,很好地辅助了我们学习。

线下课程:

我们这一个学期每周有两次线下课程,老师认真负责,上课教学通常会辅以代码实例教学,有时还会叫我们提交本节课的实例代码作业,最后几周的课程以翻转课堂的形式上javafx的内容,由我们来讲javafx每小节的知识,这样的上课形式让我们体验了一把当老师的感觉,更加深入地学习了知识,通过这样的学习,我们对用Java打代码更加得心应手。

二、面向对象技术总结

1.封装

封装主要指把数据和处理数据的方法"打包"在一起,对外只暴露必要的操作按钮,把那些乱七八糟的实现细节都藏起来,用private、public等关键字实现封装。在PTA题目集和实验一、二里就具体考察这方面的运用,基本到后面的每个题目里都有封装的身影,封装的好处:保护内部的重要数据,简化了使用,降低了耦合度,对于刚入门的我来说,封装对我后面的代码的结构完整逻辑不出错有很重要的作用。

2.继承

继承就是子类可以从它所继承的父类里获得方法和属性,并且能修改父类的功能,添加新功能。在后面的PTA题目集和实验三、四、五都要用到继承,例如航空货运管理系统的题目里就在支付方式,客户类型等用了继承,将其根据其类别区分为好几类,当出现新的支付方式或者用户类型,不用过多的修改代码,只需要在原基础上新加子类,大大提高了代码的复用性。

3.多态

多态指同一个操作用于不同对象时,有不同的解释和运行结果。在课堂上老师叫我们根据ppt里的类图写一个Animal的多态代码,动物都会叫,但当动物为猫时,就发出喵喵,动物为狗时,发出汪汪,在此代码中,用Animal animal=new Dog("大黄")来实现多态,经过这样的实例运用,我很快就理解了多态的意思。并且多态有三个必要条件:继承、重写、向上转型,并且在写代码时使代码更简洁,扩展更方便。

4.抽象类

抽象类是包含抽象方法的类,不能被实例化只能被继承,用abstract关键字声明。抽象类主要用于:强制子类必须实现某些方法,防止直接创建不完整的类对象,可以把公共实现放在抽象类中。在期中考试的第二道题里,就以DamageCalculator为抽象类派生出PhysicalDamage和TrueDamage,以计算伤害为抽象方法,分别计算物理伤害和真实伤害。同时,抽象类还有以下几个特点:不能实例化,可以包含抽象方法和具体方法,子类必须实现所有抽象方法。

5.接口

接口就是一组方法声明的集合,定义了"能做什么",但不关心"怎么做"。将接口应用于程序里能让代码更加灵活,并且更易于维护。接口的核心特点:纯抽象,多实现,不能实例化,没有状态。使用接口还有以下几个好处:解耦合、多态支持、便于测试、突破单继承的限制。在实验四、五里我以isAggressive为接口,分别运用于Animal的elephant、lion、tiger的子类里判断他们是否有攻击力,大象没有攻击力,则接口里的方法返回0,这个实例就刚好体现了接口的特点。

6.集合框架

集合框架是编程中用来存储和操作一组对象的标准化架构,几乎每种现代编程语言都有自己的集合框架实现,它就像是一个收纳箱工具箱,里面装满了各种专门用途的"容器":数组:固定大小的收纳格(像药盒),列表:可伸缩的序列(像购物清单),集合:不允许重复的容器(像数学集合),映射:键值对存储(像字典)。集合框架有三个核心接口:Collection接口,Map接口,Iterator接口。常用的集合类型就有List列表(ArrayList、LinkedList),Set集合(HashSet、TreeSet),Map映射(HashMap、TreeMap),在实验四里就用ArrayList来容纳animal对象,并根据他们的攻击力来排序,并判断谁吃掉了谁。不同的集合有不同的使用场景:需要快速随机访问 → ArrayList,频繁插入删除 → LinkedList,去重 → HashSet,需要排序 → TreeSet。

7.异常处理

异常处理是Java编程里的重要机制,在很多大程序里都需要用到,在Java里由try-catch-finally来实现,异常处理机制可以应对各种意外情况,便于调试,明确知道哪里出了问题,避免程序崩溃。在PTA里的文件读取作业,当电脑尝试读取一个不存在的文件时,程序可能会直接崩溃,无法运行,往代码里添加异常处理机制后,便能很好地处理这一类意外情况,保证代码正确运行。同时异常分为检查型异常(Checked Exception):必须处理(如Java的IOException),非检查型异常(Unchecked Exception):可不处理(如NullPointerException),上述情况就为检查型异常。

8.javafx界面

JavaFX 是 Java 平台上的现代图形界面工具包,用于构建丰富的桌面应用程序。最近一次的大作业就是用javafx做一个航空货运管理系统界面出来,要满足前面所写的迭代作业的代码要求,要用BorderPane,Hbox,Label,Button,文本框等组件来完成界面的基本布局。这一部分内容很多,而且界面布局美观需要自己调参数,很多UI组件需要自己去学习,所以我对这一部分的掌握仍不足,需要日后渐渐精进这一部分的能力。

总结以及改进方向

我目前掌握了继承以及封装的简单运用,但是仍对接口的使用不太清楚,实战经历不太多,后面要自己再多找点PTA题目去练习,同时集合框架那部分的知识,我现在只对list、arraylist、linkedlist的声明、添加数据、删除数据和排序方法知道怎么去使用,HashSet、TreeSet、HashMap等的使用仍不太清楚,日后需要投入精力去慢慢学习,异常处理的代码经验也不多,最近在课上看到老师讲了异常处理的具体用法,没有真正用过就不能算懂了,仍需精进。javafx界面的使用也是头痛的一部分,这部分代码量多,而且内容也多,需要用心去学习,这些不足的地方在小学期希望能自己慢慢补足。

三、踩坑心得

心得一:

不要看到题目给出的要求太多,代码行数多就一直拖延去打代码,到后面只会越拖越不想写,比如电梯调度的吊带程序,看着就很难,我一开始就把它搁置了,最好题目集刚发下来就把简单的先写了,难的先开个头,后面逼着自己去打代码,培养自己的编程经验。

心得二:

代码有错误最好不要找AI改,慢慢地会培养依赖AI的习惯,到期中、期末考试规定不能用AI,到时候程序报错自己就很难找错误,代码就一直过不了测试点,虽然只是一个很基础的错误,但是我没有找到,这是血与泪的教训!

四、改进建议及总结

面向对象程序设计这门课程已经在这个学期迎来了尾声,在这个过程中我学到了很多和java有关的知识,例如类的封装、继承、多态、抽象类,虽然仍有些知识现在没有完全掌握,但是我比起刚开学时的我有了很多的长进,在一次次的java迭代作业的锻炼下,我明显意识到我的Java编程能力提高了不少,虽然一开始看到那个电梯程序就知道很难,不想写,虽然最后也没写出来,但我也收获了很多,了解了怎么根据题目的要求设计代码,如何去优化代码结构,并将所学的知识转化为可运行的代码等。这门课程通过结合线上线下课程、PTA、实验等,来培养大家的编程能力,老师都很认真负责,但我认为老师们或许可以在课上多分享些自己的经验与心得,让课堂不只局限于课本。同时希望我在日后的学习里巩固自己以前所学的知识,并与以后将学的内容相结合,多多培养自己的逻辑思维能力,多思考,多反思!

posted @ 2025-06-22 17:29  wu345  阅读(23)  评论(0)    收藏  举报