前言
作为一名初学JAVA的学生,我很切实的感受的JAVA与之前所学的C语言之间的差异,也感受到了面对对象设计这门学科的难度。从开始的作业就能感受到,这门课不仅需要上课的努力,也很考验同学们课下的积累。从第一阶段的三项作业就能感受到,想要完美的完成作业,必须下大功夫。从第一次作业让我们熟悉JAVA的简单语法结构,再到第二次作业让我们体会面对对象的思路,再到第三次作业让我们以面对对象的思路解决实际问题。每到题目我都踩过坑,不过也让我有了新的体会。
作业过程总结:
- 1. 三次作业之间的迭代关系
三次作业所用的知识可以说是层层递进。第一次作业是有关简单的JAVA语法,根据老师上课所讲的内容,我们可以尝试着用JAVA的类、方法、属性来解决,这是帮助我们从之前的面对过程到面对过程的转变。第二次作业的难度一下就提高了很多,不单单是问题复杂了很多,难得更是需要我们自己根据题目要求的功能,运用第一次作业面对对象的思想设计出自己的算法,来满足题目要求。而第三次作业是第二次作业的延伸,同样的问题,更为苛刻的要求。我们需要根据面对对象的思想,在不同的类中解决不同的问题。三项作业的迭代关系可以笼统的形容为从基础语法到设计方法再到运用面对对象的思想解决问题。
- 2. 如何通过作业逐步从面向过程到面向对象
最开始接触面对对象的程序设计时,我仍使用的是面对过程的思维。想要解决问题是,第一个想到的不是给类设计一个方法,而是创造一个随时可以调用的函数。在我做第一次作业时,并没有很深的感触,仍旧使用的面对过程的思想。可是到了第二次作业时,我学会运用了在JAVA中十分重要的“方法”。在第三次作业时,我发现每一次作业都是前一次作业的延伸,从上一次作业中学到的知识可以在这一次作业中充分运用。我开始学会自己创建一个类或者给类添加一个题目中没有提到的方法来帮助自己解题。自己思维自然而然的就从刚开始的面向过程到面向对象的思想。虽然我在做题的时候还有一些面向过程的方法在里面,但我相信,通过接下来的学习,我能够从面向过程的思想过渡到面向对象的思想。
- 3. 作业过程中遇到的问题以及解决方法
第一次作业难度比较小,因此碰到的错误大多是因为粗心少了符号,浪费了很多时间用于查错,第三次作业的难度增加了很多,我有很多错误都是出现在第三次作业中,我就挑了三个比较让我印象深刻的错误。
第三次作业的第一题就卡了我很久
一个简单的Get方法,我的第一反应是通过String.format("%.1f",A)的方法来返回值,结果方程有两根的测试点过不去,可是我在Eclipse上的输出结果与PTA要求的格式一样,结果也一样,自己用其他的二元一次方程测试结果也是正确,后来才认识到这个只需要简单的返回一个Double类型的数就可以了,而我返回的是字符串。最后使用简单的return语句,就完成了题目。
我在做第三次作业第二题时,在设计方法时,我最开始想套用第二次作业的方法,可是后来我发现,题目中的下n天的n没有限制,可以很大,导致了调用方法输出了负数日期的答案。于是我尝试利用循环来解决问题,可是每月的天数不同却让我束手无策,我不得已使用了switch语句来解决,可是这种方法不但数据庞大繁琐,还导致我的代码冗长,以至于代码长度不符合题目要求。后来,我根据特定一年的每个月份天数都是固定的且有规律的特征,设计了一个如下图的二维数组,和一个用于将isLeapYear()方法返回的布尔值转化为0、1数字的方法,运用循环,在短短10行就解决了问题。
在同样一道题的测试点上我也耗费了许多时间,由于下n天当n取整型数最大值时,当月天数day+n超出了整型数最大范围,使得其变为负数,导致输出错误的结果。我通过设定一个的判断语句,使得n处于整型数最大值时能够分两步进入循环,从而使得问题解决。
- 4. 每次作业花费的时间比例
第一次作业较简单,只用了一个下午就解决了问题。
到了第二次作业时,就发现自己写出来的代码总是不能全部通过测试点,总是会有错误,我足足花了一天的时间用于写代码,其中半天时间用于差错。
第三次作业是真正的面向对象,由于我对面对对象的设计方法认知不够深刻,做起来就很费劲,我大致用了三天时间才将其完成。
- 5. 对编程过程的逻辑严谨性的认识及教训
这几次的作业使我对编程的逻辑严谨性有了充分的认知。因为自己粗心大意缺少一些符号,导致程序输出错误的结果,然后花大量的时间去寻找这样的错误在我这几次的编程过程中很常见。我认识到了编程是一项严谨的过程,首先自己必须得专注,想法实现必须一气呵成,在中途打断想其他的东西会更容易使得自己更容易犯错。与其花大量的时间在差错上,不如一开始就在一个安静的环境中集中自己的注意力用严谨的逻辑编程,尽量避免出现不必要的错误。
OO设计心得
1.面向过程与面向对象的比较
面向过程可以说是以过程为中心,确定过程,再分步完成任务来解决问题。而面向对象,则是以对象为主体,通过对对象特征的分析,以利用对象特征和方法来解决问题。
以我学过的C语言和JAVA为例。当我需要使用C语言解决问题时,我最先是要确定解决问题的过程,将它分为几个小过程,用不同的函数解决每一个小过程来解决问题。而当我使用JAVA时,我需要先提炼对象的特征,创建出不同的类,在根据每一个类赋予他不同的方法来实现它的职能,通过对象来调用方法、属性来解决问题。
2.面向对象设计的基本原则理解
目前我只接触到单一职责原则,我对其的理解就是对象应该只具有单一功能的概念。虽然我对于这个概念的理解不够深刻,但我能认识到单一职责的原则可以是程序变得更具有可读性,不会造成代码的冗长,使程序便得更不容易出错,便于程序员后期的维护。
3.OO编程思维的理解
我认为的编程思维是需要我们根据问题,提炼出带有特征的对象,设计出相应的类,并根据对象的特征和属性设计相应的方法,从而解决问题。其思维注重于对于类的理解和提炼,方法的设计。核心是对象、类、方法、属性。
测试的理解与实践
1.测试对于编码质量的重要性
我认为测试是编写程序中十分重要的一环,养成良好的测试代码的习惯可以使我们在编写程序时能够更为及时的发现出现的错误,能够及时纠正,减少留下的bug,减少我们后期寻找bug的时间,也避免了某一个部分写错未及时测试导致后期需要全盘重写代码的可能。测试可以使我们的程序更完善,可以显著的提高编码质量。
2.假如让你设计测试用例,你会如何做
如果让我来设计测试用例,我会先设置一些普通的测试点,例如用JAVA制作简易计算器时,我会先设置一些例如1+1这类简单的测试点,再设计一些超过该数据类型最大值输入的测试点,再设计一些空白输入的让编程者比较难以想到的测试点。
课程收获
总结这四周来在OO方面的教训及收获
在这学习OO编程的四周,我是真的没有想过JAVA有这么难学,不单单是其多的是数不清的方法,更多的是思想,多种多样解决问题的途径。四周来,我得到了很多教训,从简单的要看清楚题目,再到不要用面向过程的思想去运用面向对象的语言解决问题。编写代码的时候要认真自习,要注重思维的连贯性。遇到不懂的不要埋头研究,要多查多问,要谨记想要做一个好的程序员必须要学会沟通。
这四周也不单单只有教训,还有数不清的收获,我从最开始的啥也分不清,望着类还以为写的是结构体,到清晰的认识到了对象、类、属性、方法之间的关系,了解到了学习JAVA的一些好习惯,懂得了如何与其他师哥师姐沟通,我觉得在接下来的学习中还能有更多收获。
对课程的建议
我觉得老师讲的很好。PTA作业难度有点大,如果老师能够开展一个线上答疑的活动那就更好了。