做为一名软件工程的大学生,很高兴可以以这样一种方式,实现对博客编写零的突破。专业课老师也介绍了编写博客给咱们带来的帮助,听了之后,我感受到了培养出写博客的习惯,是一件多么有意义的事!java
话很少说,让咱们言归正传。程序员
0. 前言算法
本次做业:《 OO第一做业周期(前四周)总结 》编程
针对咱们第一阶段的做业( 共三次 ),发表总结性博客。这三次做业,均可以较为顺利完成,并达到满分。eclipse
对于这五周所学习到的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函数里面调用外部设计的各类功能函数。在第1、二次做业当中,使用的更可能是面向过程的思想,也与题目自己有关系,由于没有过多的涉及面向对象的知识。而到了第三次做业,
面向对象的思想初步体现,尤为是最后两题,类的多种结构设计。在“年月日”三个类的设计中,有更多的面向对象的体现。设计出的类,须要建立出实体,这个实体我就认为是一个对象,因此类设计出来,是为了对象,而类被看作是一
个概念。
③做业过程当中遇到的问题及解决方法
做业中遇到的问题真的是一双手的手指都数不过来,由于不少知识须要在课下进行学习。从最简单的控制台输入开始,这个和以前学的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的路上越走越远吧,都选择当程序员了,还怕什么掉头发,大不了拿一些工
资去植个发也行啊!平时多看看,多学习学习,不只仅是为了过这门学科,也是为之后的工做打基础、作铺垫。给本身加个油!