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

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

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的路上越走越远吧,都选择当程序员了,还怕什么掉头发,大不了拿一些工

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

《 OO第一作业周期(前四周)总结 》的更多相关文章

  1. OO第一作业周期(前四周)总结

    前言:回顾这三次的作业,在一次次的练习下渐渐理解了一些Java的一些基本知识和类与对象的含义与用法,也找到了很多自身的不足和问题,主要是反映类与类之间的关系没有理解到位,这次总结后又有了新的感悟和理解 ...

  2. OO第一单元(前四周)作业总结

    OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...

  3. OO第一单元总结

    OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...

  4. OO第一阶段总结

    OO第一阶段总结 一.各次作业程序结构 第一次作业 第一次作业由于初用JAVA,还没有深刻理解面向对象的编程方法,故在编程过程中只用了一个类,一个方法,即完成了相应的程序功能.这必然不是本课程的目的, ...

  5. OO第一单元作业总结

    oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...

  6. OO第一单元优化博客

    OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)​\)和\(cos(x)​\)的指数作为坐标,在图上画出来就可 ...

  7. OO第一单元(求导)单元总结

    OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...

  8. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  9. 北航OO第一单元作业总结(1.1~1.3)

    经过了三次作业之后,OO第一单元告一段落,作为一个蒟蒻,我初步了解了面向对象的编程思想,并将所学内容用于实践. 一.第一次作业 1.架构分析 本次作业需要完成的任务为简单多项式导函数的求解.表达式仅支 ...

随机推荐

  1. 天坑,CSS之定位Position(六分之五)

    Position定位 个人觉得position这个属性真的算是CSS的见面杀了.尤其是absolute,当年可是被虐的不轻.当然了,现在爱上了这个属性,谁用谁知道. position属性 positi ...

  2. 【前端性能优化】高性能JavaScript整理总结

    高性能JavaScript整理总结 关于前端性能优化:首先想到的是雅虎军规34条然后最近看了<高性能JavaScript>大概的把书中提到大部分知识梳理了下并加上部分个人理解这本书有参考雅 ...

  3. HTML5前期学习准备(一)

    HTML简介 1.html的基本概念 HTML:HyperTextMarket language,超文本标记语言(所谓"超文本"就是指页面内可以包含图片.链接,甚至音乐.程序等非文 ...

  4. 零基础JavaScript编码(二)

    任务目的 在上一任务基础上继续JavaScript的体验 学习JavaScript中的if判断语法,for循环语法 学习JavaScript中的数组对象 学习如何读取.处理数据,并动态创建.修改DOM ...

  5. markdown简明语法1

    目录 Cmd Markdown 简明语法手册 1. 斜体和粗体 2. 分级标题 3. 外链接 4. 无序列表 5. 有序列表 6. 文字引用 7. 行内代码块 8. 代码块 9. 插入图像 Cmd M ...

  6. python使用for循环打印9*9乘法表。

    代码如下: for a in range(1, 10): for b in range(1, 10): if b <= a: print("%d*%d=%d\t" % (b, ...

  7. Lake Counting(POJ No.2386)

    题目描述:有一个大小为N*M的园子,八连通的积水被认为是连接在一起的.请求出园子里总共有多少水洼?(八连通指的是下图中相对w的*部分) *** *w* *** 限制条件 N,M<=100 样例 ...

  8. swoole模块的编译安装:php编译安装swoole模块的代码

    本篇文章给大家带来的内容是关于swoole模块的编译安装:php编译安装swoole模块的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.下载swoole 1 wget ht ...

  9. Java自学路线图之Java框架自学

    Java自学路线图的框架分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo. 在Java自学过程中掌握框架的使用,对 ...

  10. List remove ConcurrentModificationException源码分析

    代码块 Java         Exception in thread "main" java.util.ConcurrentModificationException at j ...