《 OO第一作业周期(前四周)总结 》

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

《 OO第一作业周期(前四周)总结 》

爱余_Z   2020-04-06 我要评论

作为一名软件工程的大学生,很高兴能够以这样一种方式,实现对博客编写零的突破。专业课老师也介绍了编写博客给我们带来的帮助,听了以后,我感觉到了培养出写博客的习惯,是一件多么有意义的事!

话不多说,让我们言归正传。

0. 前言

本次作业:《 OO第一作业周期(前四周)总结 》

针对我们第一阶段的作业( 共三次 ),发表总结性博客。这三次作业,均能够较为顺利完成,并达到满分。

对于这五周所学习到的java知识,也是让我初步了解了java面向对象的风格。

1. 作业过程总结

①总结三次作业之间的知识迭代关系;

这三次PTA中的作业,可能还没有过多的涉及到面向对象的设计。其中,第一次作业,我认为是对一些程序设计算法的基本考察,很多都是和大一上学期所学的C语言相似的题目。例如,第一题,计算税率:全是大量的根据输入的值进行公

式计算,我可能认为代码放在一个main函数里,显得很乱,就在类里面添加了一个计算税率和判断种类的函数。这样main函数中的代码看上去更简洁一些,思路更明确。由于题目要求,稍微在网上查了一下,java控制台输入的代码。剩余四

题都是基础的条件判断。

第二次作业:初次涉及到部分日期的算法,一开始,对日期的求法比较头疼,需要考虑到很多情况。想了很久也没有什么比较简便的算法,于是就一点点的把所有情况例举出来,尤其是考虑到了特殊情况,例如:往前跨月、往前跨年,闰

年的跨月......至少是成功通过了测试,感觉不够简便。

第三次作业:这个耗时最多的一次,我也认为是对面向对象的初次体现。这次作业,在第二次作业,对日期算法的基础上,加大了难度,不仅仅是算法上的难度,还有类设计的。先说算法上:与上次不同的是,前n天和后n天的范围没有规

定,也就是需要考虑大于一个月、甚至是年份为负数的情况......对于情况的考虑,我之前一直有漏掉的方面,再过测试点的时候遇到了麻烦。首先没有考虑到输入的n值过大的问题。所以最后选择了"long"的数据类型,是第一次在代码中使用。

然后,在求前n天和后n天里,求出输入日期距离"0000-1-1"的天数,加上"n"得到总天数,在从"0000-1-1"累加天数求新的日期。计算负数年份的算法,由于代码的设计,负数年份我考虑用天数减去整年天数,最后剩余小于多一年的天数, 日

期从"-1-12-31"开始计算,因为日期是从后往前计算,所以可以直接用一年的天数减去剩余不足一年的天数, 计算出来的天数可以采用正向按月累加,得到相应日期。类的设计里面,有两种不同的形式。一个是五角星,一个是链式结构。五角

星:在日期算法的类中,有“年-月-日”三个类围绕,在算法中类方法的调用相对简便;链式结构:是以“日期算法->日->月->年”的结构,方法中的属性调用麻烦,需要按链的顺序,逐级调用。日期的算法均采用的之前设计过的算法,并没

有按着题目里已给出的属性,重新设计算法。虽然是直接copy,但是类属性的调用改起来依然很麻烦,尤其是链式结构的设计。

        ②如何通过作业逐步从面向过程过渡到面向对象;

面向过程的概念接触可能是在C语言当中,知道main函数里面调用外部设计的各种功能函数。在第一、二次作业当中,使用的更多是面向过程的思想,也与题目本身有关系,因为没有过多的涉及面向对象的知识。而到了第三次作业,

面向对象的思想初步体现,尤其是最后两题,类的多种结构设计。在“年月日”三个类的设计中,有更多的面向对象的体现。设计出的类,需要创建出实体,这个实体我就认为是一个对象,所以类设计出来,是为了对象,而类被看做是一

个概念。

③作业过程中遇到的问题及解决方法

作业中遇到的问题真的是一双手的手指都数不过来,因为很多知识需要在课下进行学习。从最简单的控制台输入开始,这个和之前学的C语言的输入输出格式大不相同。之前只是最简单的"scanf",在网上查询以后,知道了java里面可

以按数据类型控制输入的数据,就好像".nextInt"、".nextLine"......各有各的作用,相对于之前学的,在数据的接收方面看上去更方便一些。接着就是,代码风格的改变,一开始只是创建一个类,还需要对类进行实体化,我就因为这个出现

了很多次的报错,后来熟悉以后就渐渐少了些。到后面的日期算法,先是无从下手,到最后选择在纸上把想法画出来,步骤逐条的记录在纸上,然后开始不断地编译测试。在测试中,找到一个个特殊情况,再对方法加以完善。这个过程很

难,但也很重要,否则就会达不到题目提出的要求。其中有一个"long"类型的使用记得很清楚,因为当时不知道怎么考虑"int"最大值输入的情况,就询问了同学,在指导下知道了使用"long"类型接收数据。

④每次作业花费的时间比例

耗时也是随作业逐渐增加,第一次作业中主要是税率的公式计算,大量的"if..else.."语句和钱数的累加,代码看上去很枯燥,但的确需要这么设计。第二次作业中主要是日期的简单问题,当时考虑到了特殊情况,相对会耗时少一些,但并不

是最简便的算法。第三次作业,算法难度的升级,大量的特殊情况,关键我一开始并没有想到合理的算法,花费很多时间在设计上面。到后面的类的设计,相对copy了已经设计好的函数,并且没有进行修改,只是改变的调用属性的方法。这也

是耗时增多的主要原因之一。

⑤对编程过程的严谨性的认识及教训

这个可能深有体会吧。之前的C语言相对没有注意过这些,连变量名都是简单的一个毫无疑义的字母。但是到了java里面,开始关注变量名,类名,方法名,实体名等等一系列的命名方式,会去使用更多的相对应的英文命名,的确可以方便

阅读,在对代码的了解上,有很大帮助。因为java中,有项目文件夹,再到一个包,一个类,一个接口,这些都是有一个等级顺序的,所以命名时要考虑是否合理及可用。刚开始还会遇到报错,我也很奇怪,因为在算法上没有错误,在eclipse

的提醒下,才知道类名重复的可怕性。

2.OO设计心得

①面向过程与面向对象的比较

相比较的话,应该是面向对象的设计会复杂一些,感觉更多的是类的定义,和实体的创建。这些应该是面向过程里没有的。但是,的确在方法和属性的调用上很清楚,更容易接受了解。面向过程很多是main函数外加函数方法,而这也是在

学习过程中,老师要求我们少用"static",无论是属性还是方法使用后,都会忽略了实体本身,类创建出来也变得毫无意义。

②面向对象设计的基本原则理解

这个我的了解非常的少,也没有仔细了解过。只知道java中的三个特点,多态、继承、封装,这些可能是java独有的特点,对于面向对象,我认为还是概念和实体的定义、创建。它关注的是每一个对象本身,就像是,我有这么一个东西,

但是东西内部的构成我不需要了解,只是知道有这么个东西存在。这也就像java中有很多在类里面的基本方法,这些方法的内部定义,并不需要我们去学习,只是要知道这个方法有什么作用,好比"System.out.print()"这就是一个输出功能。写

这个博客时,我在网上也查阅了面向对象的概念:面向对象(Object-Oriented)=对象(Object)+类(Class)+ 继承(Inheritance)+通信(Communication)。这只是一个初步的定义,对于里面对象、类、继承、通信的定义有很多很多。我认为

和我想的挺相似。但是“通信”这个概念目前还不是很懂,希望以后可以去逐渐了解。

③OO编程思维的理解

思维上面应该是需要考虑对类、接口等等的设计。类只是一个概念,需要不断给其中增添很多定义,包括类与类之间的关联性:依赖、聚合......这些是面向过程中少有的。每个类被抽象化了,各有各的职责,就像是老师说的,可以在每个类

中找到更多的相同点,再进行提炼,设计出新的类。而实体更像是被赋予了这个概念,举个例子:学生就是一个类,这个类中有班级、学校、同学、老师等等的属性,还有做课间操、考试等等的方法。这些是在学生这个类中定义出来的,而

“我是一个学生。”,这句话里,我就是一个实体,被附上了学生这个概念,所以我有同学、老师,可以做课间操、考试。

3.测试的理解与实践

①测试对于编码质量的重要性

测试这个环节对于程序员来说,可以决定着,他面对要求修改,或者bug出现时,麻烦的大小。因为一段代码里会有很多的功能实现。这些功能的设计或者算法上时常会出现错误,而测试就很有效的帮助我们提高代码的准确性。而这并非

是最关键的,当一个复杂的程序设计出来,倘若中间没有及时的测试,在bug出现时,很难快速准确的找到错误位置,这样会带来很多麻烦,以及时间上的损失。所以养成一个良好的测试习惯至关重要,不仅要测试,还重要是及时测试。

②假如让你设计测试用例,你会如何做

对于我来说,像是一个查漏补缺的环节。我会先是设计一些寻常样例,至少要保证程序正常的使用。其次就是临界值,这个临界值的范围很大,比如输入输出的数据,像是第三次作业中int型数据的最大值。然后会是合法数据的输入和判

断,不可能说,当输入错误信息时,什么提示都没有,这对于用户很不友好。最后,可能是一些人性化的设计吧,比如用户无意间的输入空格或者其他无关数据时,能否判断出并且进行自动修改。

4.课程收获

总结这四周来在OO方面的教训及收获

教训当然是很多的,因为和C语言风格的不同,有面向过程转变到面向对象,这个过程还需要慢慢适应。因为目前接触到对面向对象的题目深度不够,还没有真正体现出来面向对象的优越性和复杂性,这个应该是会在大作业中出现吧。多

种代码报错。不过这里,还是要好好感谢一下eclipse,会自动在错误的代码下面进行标注,并赋予多种解决方案。虽说这些方案不一定是我们所需要的,但是在思路上还是带来不小的帮助,也有效控制了我编程的时间。至于收获,是一些刚接

触到java时,心里有一些疑惑,可能在做题时也经常会出现。不过在进行相关查询和帮助下,基本都有所解决。这个过程就是最好的收获。

5.对课程的建议 

java上课的风格可能加大了我们课下的自学时间,而且是加大很多。老师在课堂上说的完全不够,像第一次作业中的数据输入,就需要自己在网上查找相关资料。不过对于上课的风格,还是比较能接受和适应的,虽然是通过网课进行教

学,依旧可以有着浓厚的兴趣,还得提一下,有一说一,老师的声音非常有磁性,很好听!!!至于建议嘛,希望老师上课还可以多讲一些内容吧,虽然这个时间有限,但是课下查找资料的过程毕竟还是靠每个人自己的理解,没有系统的学

习,在部分内容上面就会出现理解上的差距。

6.之后一阶段的学习计划

计划上,我觉得稍微少一点,实现的可能会更大。根据这几周的学习,首先肯定是要适应面向对象这种设计思路,至少别总是出现一些C语言中的知识特点。第二是要代码简洁,有些代码不必要的分行反而让我看上去不舒服,合理的对代

码进行排版,有助于自己的阅读。第三,适当添加注释,方便对知识的复习,也有利于别人读自己写的代码时,更清晰易懂。第四,一些低级错误就还是少犯一些,例如:少加大括号,方法名使用错误,循环条件的判断......很多很多,希望我可

以少让eclipse或者编译器来提醒我有这样类似的错误出现。最后,应该是算法设计,需要提高一点点,否则做题会浪费很多没必要的时间,多去网站上学学看看吧。

这里就来一个结尾吧,听老师说,java学好了以后的工资很高,这钱肯定是香的啊,谁会去和钱作对呢!但是这前提是学好java,所以我也希望自己可以在学java的路上越走越远吧,都选择当程序员了,还怕什么掉头发,大不了拿一些工

资去植个发也行啊!平时多看看,多学习学习,不仅仅是为了过这门学科,也是为以后的工作打基础、做铺垫。给自己加个油!

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们