《 OO第一作业周期(前四周)总结 》
作为一名软件工程的大学生,很高兴能够以这样一种方式,实现对博客编写零的突破。专业课老师也介绍了编写博客给我们带来的帮助,听了以后,我感觉到了培养出写博客的习惯,是一件多么有意义的事!
话不多说,让我们言归正传。
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第一作业周期(前四周)总结 》的更多相关文章
- OO第一作业周期(前四周)总结
前言:回顾这三次的作业,在一次次的练习下渐渐理解了一些Java的一些基本知识和类与对象的含义与用法,也找到了很多自身的不足和问题,主要是反映类与类之间的关系没有理解到位,这次总结后又有了新的感悟和理解 ...
- OO第一单元(前四周)作业总结
OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- OO第一阶段总结
OO第一阶段总结 一.各次作业程序结构 第一次作业 第一次作业由于初用JAVA,还没有深刻理解面向对象的编程方法,故在编程过程中只用了一个类,一个方法,即完成了相应的程序功能.这必然不是本课程的目的, ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
- OO第一单元优化博客
OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)\)和\(cos(x)\)的指数作为坐标,在图上画出来就可 ...
- OO第一单元(求导)单元总结
OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...
- 【作业1.0】OO第一单元作业总结
OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...
- 北航OO第一单元作业总结(1.1~1.3)
经过了三次作业之后,OO第一单元告一段落,作为一个蒟蒻,我初步了解了面向对象的编程思想,并将所学内容用于实践. 一.第一次作业 1.架构分析 本次作业需要完成的任务为简单多项式导函数的求解.表达式仅支 ...
随机推荐
- Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)
A. Even Subset Sum Problem 题意 给出一串数,找到其中的一些数使得他们的和为偶数 题解 水题,找到一个偶数或者两个奇数就好了 代码 #include<iostream& ...
- 续python学习(一)
接上面没写完的知识点继写. 当然,这些知识点都很简单,可能没必要花费太多时间去记忆,多写写代码就会了. 5.字符串的使用.索引和切片是字符串主要的两个应用.索引:顾名思义就是找出某个字符在一个字符串中 ...
- 编程老司机带你玩转 CompletableFuture 异步编程
本文从实例出发,介绍 CompletableFuture 基本用法.不过讲的再多,不如亲自上手练习一下.所以建议各位小伙伴看完,上机练习一把,快速掌握 CompletableFuture. 个人博文地 ...
- vue 打包体积过大 实现懒加载 ????
import Vue from ‘vue’ import Router from 'vue-router' //把路由对应的组件定义成异步组纪检 const hello = resolve => ...
- for循环结合range使用方法
range概念:表示一个数据范围 基本的语法格式:range(开始数据,结束数据(不包括结束数据),步长) 记住一个公式:下一个数据=开始数据+步长 步长:表示的是数据前后的间隔 OK,基本的概念和语 ...
- Excel之在单元格中生成随机密码
公式 =CHAR(INT(RAND()*26+97))&INT(RAND()*10)&CHAR(INT(RAND()*26+97))&INT(RAND()*10) 分析 CHA ...
- Django中使用CORS实现跨域请求
跨域请求: 请求url包含协议.网址.端口,任何一种不同都是跨域请求. 1.安装cors模块 pip install django-cors-headers2.添加应用 INSTALLED_ ...
- Block详解一(底层分析)
本篇博客不再讲述Block的基本定义使用,最近而是看了很多的block博客讲述的太乱太杂,所以抽出时间整理下block的相关底层知识,在讲述之前,提出几个问题,如果都可以回答出来以及知道原理,大神绕过 ...
- js 数组一些简单应用
把两个数组连接成按从小到大的一个数组例如: var allowVlan = '23-25,45,4-6,67,50-53'; var unTagVlan = '1-5'; 完成时应该是1-6,23-2 ...
- frida的简单实用
一.环境 1.环境 1.手机运行服务端 2. 电脑端运行客户端3.进行端口转发 adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27 ...