OO第一作业周期(前四周)总结
前言:回顾这三次的作业,在一次次的练习下渐渐理解了一些Java的一些基本知识和类与对象的含义与用法,也找到了很多自身的不足和问题,主要是反映类与类之间的关系没有理解到位,这次总结后又有了新的感悟和理解。
一.作业过程总结
1.第一次作业仅仅是main方法的练习使用以及规范命名,第二次作业在main类中构造重载方法,第三次作业是UML类图,创建对象与构造类方法以及函数封装,通过类名获取类的相关信息来实现相关操作。
2.首先通过第一次作业,写一些简单的main方法熟悉使用eclipse简单编写基础伪Java代码,以及规范命名,接着的第二次作业开始在main类中编写一些重载方法,从类C语言的代码中走向Java的面向过程,第三次作业才开始接触UML类图,了解类与类之间的迭代关系。学会创建类方法以及创建对象。能够简单创建并使用类,理解子类父类,逐步从面向过程过渡到面向对象。
3.练习中必不可少的就是bug。
①最开始接触Java,写第一次作业判断三角形类型,等腰直角三角形测试点总是通不过,后来发现因为等腰直角三角形的边必定有一条边是根式且是无理数,通过输入的数据不能输入根式导致测不出等腰直角。
于是想到了做近似处理。由于√2=1.4142135623730951,1.4142135623730951²=2.0000000000000004,所以可以近似为2,于是将a*a+b*b==c*c改为(int)(a*a+b*b-c*c)==0,只保留整数部分就可以判断出等腰直角。
②第二次作业基本上都没有什么太大的问题,基本上都是一些低级,粗心犯的错,比如输出的格式单词拼写错误,求日期的下一天中特殊情况部分没有考虑到,比如闰年的2月29日,这种特殊情况忘记单独考虑,其他都没什么问题。
③也许是前两次作业过于简单,这第三次作业显得最让人头疼的。由于对于对象以及构造类方法,类与类的关系还是懵懵懂懂的状态,一下子看到UML类图就有点懵逼,摸不着头脑。
这第二题的最大值测试点最开始我也一直通不过,只要一输入求下2147483647天输出日期就出错,成了这个样子。然而经过多组数据测试发现只要n<=2147483647-365就能正常输出,再仔细琢磨就发现原来是我在最开始做了加法运算,所以当n的值够大时就会超过最大值2147483647所以输出会有问题。于是,我就在最开始先让第一个日期加一年,也就是将n减去一年(如果n大于一年的话)就解决了。
而第三题和第四题都是在第二题的基础上做了结构优化,让多个类之间相互依赖,聚合。
最初看到这个图就一脸懵逼,只能尝试着先把结构写出来。后面运行就出现了空指针错误,查阅了类的构造相关知识点了解到原来是需要在使用某对象前需要先new一个新的对象,通过new出来的对象去获取该对象的类的方法。而且类与类之间的聚合,继承关系,需要先拿到父类才能找到子类,并且使用子类的方法。一层一层的去拿到你需要的类的方法,如:。有了这题的基础,第四题跟这题极为相似,自然就没什么问题了。也许最初的确是懵懵懂懂,一头雾水,但是当你去逐步剖析,解读,一点点尝试过后,你就会对它有更深一层的了解。
4.基本上每次作业花费的时间都在一两天的样子,第一次作业相对简单,大概是半天就完成了。第二次作业呢稍微麻烦一点,大概花了一天。第三次由于对于对象以及类的不太理解,后面两题让人有点头疼,于是花了大概两天。
5.编程过程最忌讳的就是粗心,往往是这种不起眼的粗心导致的错误最难发现,会浪费大量时间去寻找它,导致效率大大减小。第二次作业的求根,就因为我一个根的输出root多加了一个s,写成了roots导致一个根的测试点总是通不过,检查了n遍代码的逻辑都没有发现问题,过了几个小时后才猛然发现原来是多了一个s,太令人生气了。所以千万要仔细。
编程还有一点特别重要,那就是逻辑清晰。逻辑清晰才不容易遗漏,也更方便检查和理解,保证严谨性。逻辑不清晰就会漏洞百出,一个一个bug出现的措不及防。所以在编写程序之前先捋清楚要做的是什么,需要哪些类,方法怎么实现,有哪些情况,类与类之间的关系又是怎样的,想清楚后再开始。这就好像是建城堡一样,需要先做设计图,再打地基,有条不紊的循序渐进的开始筑建城堡。
二.OO设计心得
1.面向过程于面向对象的比较:
面向过程就是分析出解决问题所需的步骤,然后把这些步骤一步一步实现;而面向对象是把问题事物分解成各个对象,建立对象描述某个事物在整个解决问题的步骤中的行为。面向对象是相对于面向过程的。
面向过程:性能比面向对象高,因为类调用时需要实例化,比较消耗资源,性能是最重要的因素。 没有面向对象易维护、易复用、易扩展。
面向对象:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 。性能比面向过程低。
2.面向对象设计的基本原则
⑴. 单一职责原则:一个类只做一件事。
⑵. 里氏替换原则:任何基类可以出现的地方,子类一定可以出现。
⑶. 依赖倒置原则:通过抽象实现类与类之间彼此独立,互不干扰,且要依赖于抽象接口,而不依赖实现功能的细节。
⑷. 接口隔离原则:类与类之间通过接口来建立联系,且要尽可能使这个接口最小为好。
⑸. 迪米特法则:对象与对象之间最好少有关系,减少对其他类的依赖,保持相互独立。
⑹. 开闭原则:对扩展开放,对修改关闭。也就是允许在不改变源码的前提下变更行为,如此可以保证产品的质量。
⑺. 组合/聚合复用原则:尽量使用合成/聚合达到复用,而不是一味的写集成关系,那样就是面向过程而不是面向对象,集成关系的代码不能复用。
3.OO编程思维的理解
面向对象是相对于面向过程。基于对象,将属性与方法封装在类里,通过类与类之间的接口来实现相互之间的联系,由对象来调用类的方法和属性来实现相应的功能。
三.测试的理解与实践
测试就是为了更方便、快捷、相对准确的检测设计的完整性以及代码严谨性,保证编码的质量,更好的实现功能,确保设计的功能在后期实践过程基本不会出错,各个环节无缝连接。如果让我来做测试,我会先理解整个设计的要求与功能实现,对每一个类的一般情况、特殊情况分别设置一组数据进行测试返回测试结果来确定是否有问题。
四.课程收获
通过几周的面向对象课程学习以及三次作业联系,让我学会了简单的Java编程,理解了对象、类、方法、面向过程、面向对象之间的含义与联系。
五.对课程的建议
对于面向对象的理解还不够透彻,导致做练习时有点懵懂,有障碍。所以建议多加强这方面的讲解分析以及训练,帮助更好的理解面向对象。类与类之间的关系有时候也无法完全准确的判断,对此存有疑惑,仍需实践加深理解和案例帮助分析。
六.今后学习安排
重点加强对面向对象的理解和学习,熟练掌握类方法的使用和理解类与类之间的关系。增强编写代码的能力以及思维方式的训练。
OO第一作业周期(前四周)总结的更多相关文章
- 《 OO第一作业周期(前四周)总结 》
作为一名软件工程的大学生,很高兴能够以这样一种方式,实现对博客编写零的突破.专业课老师也介绍了编写博客给我们带来的帮助,听了以后,我感觉到了培养出写博客的习惯,是一件多么有意义的事! 话不多说,让我们 ...
- 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.架构分析 本次作业需要完成的任务为简单多项式导函数的求解.表达式仅支 ...
随机推荐
- React使用hook
Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. 为什么会有hook 在组件之间复用状态逻辑很难,需要重新组织你 ...
- SpringBoot注解分析
Spring boot 简介:是spring社区发布的一个开源项目,旨在帮助开发者更快更简单的构建项目,使用习惯优于配置,的理念让你的项目快速的跑起来,使用springboot可以不用,或者很少的配置 ...
- jsp 判断时间大小
jsp 判断时间大小 <% SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date ...
- POJ2991
题目链接:https://vjudge.net/problem/POJ-2991 知识准备: 1.向量旋转公式:向量(x,y)逆时针旋转角度A,则旋转后的向量为(x*cos A-y*sin A, x* ...
- 统计元音(hdu20)
输入格式:输入一个整型,再循环输入带空格的字符串. 思考:先用scanf()函数输入一个整型,后面直接来个大循环,带空格字符串输入直接用gets()函数. 注意:由于scanf()里面多加了%c,&a ...
- sobel( ) 算子
只是简单的使用方面的记录 sobel()算子是图像处理中用于边缘检测的 opencv-python 中的函数形式为 def Sobel(src, ddepth, dx, dy, dst=None, k ...
- Redis学习笔记(3)
一.Redis的事务(transaction) 1. 事务概念 本质:本质是一组命令的集合,所有的命令按照顺序一次性.串行化地执行,不允许其他命令的加入.Redis通过MULTI.EXEC.WATCH ...
- Java IO(六) ObjectInputStream 和 ObjectOutputStream
Java IO(六) ObjectInputStream 和 ObjectOutputStream 一.介绍 对于对象数据的处理,Java IO 提供了 ObjectInputStream 和 Obj ...
- C#线程 线程进阶
第四部分:高级线程 非阻塞同步 前面我们说过,即使在分配或增加字段的简单情况下,也需要同步.尽管锁定始终可以满足此需求,但是竞争性锁定意味着线程必须阻塞,从而遭受上下文切换的开销和调度的延迟,这在高度 ...
- 如何短时间内快速通过Java面试
当然是刷题啊 1-10期[10期]Redis 面试常见问答[09期]说说hashCode() 和 equals() 之间的关系?[08期]说说Object类下面有几种方法呢?[07期]Redis中是如 ...