前言:
前三次作业是针对我们对Java的基本语法概念的理解,各种字符串类型的用法,以及部分算法的理解,让我们对从面向过程到面向对象有了一个较为清楚的理解。总体来说,对已经有一定编程经验的学者来说,总体要求一般,部分细节(如字符串类型,溢出)的处理也是在可以查找和修改的范围内。
作业过程总结:
回顾三次作业,第一次作业以基础为主,主要要求理解基础语法 ,如循环,条件语句的概念,还有对各种数据类型的领悟,第一次作业依然是面向过程的作业。但在初次使用Java之前,需要问你们了解一些对于Java的基本概念 如jdk,java语言规范,API和IDE等。当然第一次作业还需要我们了解一些基本的语法结构如下图所示最简单的helloworld代码
在这个最简单的输出里面我们就可以了解到 public ,class,System.out.println(print,printf)等的基本使用情况;其次第一次作业中主要要求我们学会使用输入语句以及选择判断语句。第二次作业总体来讲难度比第一次作业要求高一些 ,可以算作是从面向过程到面向对象的过渡,要求我们了解基本的方法(类似于C语言的函数)的使用,Main类对函数的调用已经方法定义的基本结构。这里是最简单的一个方法调用实例。
第三次作业相对前两次作业难度有较大的提升,作业要求已经由面向过程完全转化为面向对象如下图要求
要求我们对实例和对象有较深的理解并熟练掌握对象创建与以及对对象内涵方法的引用,对我们的编程思想有了较大的训练。这里解释一下为什么最大程度要求面向对象编程;在我们之前的学习如C语言的学习中更多的是面向过程的编程,很多函数都同时放在一个文件中,这样对我们大型工程的开发以及后期的维护造成了较大的困难,代码的复用性较差,而面向对象的编程很好的解了开发大规模软件和图形界面以及代码的复用带来的时间以及其他资源的浪费;
在前三次作业中我门能够学到最为基本的Java编程语法,结构,对象,类等的使用。总体来说围绕着基本的条件选择循还等展开,从基本的输入到基本的计算闰年算法再到对计算较大天数的前后N天的日期,代码由简单到复杂一步步迫使我们从面向过程编程到面向对象编程。从一个简单的方法,到new一个类以及整个类的对象实体,这种思想的转变在这次作业中比较连续,题目的代码量让我们觉得理所应当用类和对象来面向对象编程;
在作业中还是发现了自己因为Java不熟悉,语法,算法知识储备不足而暴露出来的问题。在三次作业中我发现的一个较好的驱动模式是作业的题目要求我们主动去提前学习Java的基本语法结构以及各种导入的包,这点我觉得非常有利于我们学习,并不是所有的知识点都是老师讲的完的。比如我们第一次最简单的作业,写的时候还是各种查找基本资料,比如类,包的概念,输入的方法,以及数组的实现等。作业中出现了许多问题我把他分为三大类; 第一类是基本数据类型的匹配和溢出问题;第二类是面向对象中的类和实例的引用问题;第三类是算法不够简洁,算法不能满足测试需求的问题;
首先第一类问题算是最为基础的数据类型问题,我们知道Java的灵活多样,从最基本的int到任意长度的BigInteger其中的要点都是不尽相同。在作业中我首先遇到的就是double的保留小数位数问题,double 数据类型是双精度、64 位浮点数;而题目要求的则是单精度类型,这时我们就需要使用强制转换(int)改成int类型;其次第一次作业中的等腰直角三角形的判断也是费时许久的题目,一般的我们都会想到用勾股定理判断,但在Java中,由于数值类型精度的限制,不允许直接使用判断相等(==)符号,而是要使用xx+zz-y*y<=0.00000000来判断两高精度浮点数的相等问题。
其次对于第二类类的引用以及对象实例化所出现的问题,这类问题出现的情况很多,但是套路都是一样的所以修改起来较为简单,简单的来讲就是以下一个简单的套路;
最后就是对第三类问题也是最头疼的问题算法的思考以及优化问题的解决。一个好的程序必定是有一个好的算法,算法的时间复杂度以及空间复杂度的要求也较高;前三次作业中较为系统的考验了我们对日期的算法能力,如平年闰年问题,指定日期的前N天后n天问题;这时我们考虑的范围就大很多,如n的溢出,年份的平闰,2月的计算,跨月的计算,跨年的计算,公元前公元后的计算等等。这类问题往往是最头疼的 ,要考虑多方面因素,在作业中求日期废了我较大功夫,从跨月到跨年都需要考虑,为了使代码尽量简洁,我选择在闰年和平年的月份直接定义两个一维数组方便调用(当然可以使用二维数组将闰年与月份进行结合),再者就是计算较小n时跨年(尤其是12月往后或1月往前问题)我选择直接用if语句进行人工干预的判断输出赋值;避免算法的复杂化;还有就是计算公元前时我原有代码运行错误,我将代码优化改为二维数组直接判断成功解决问题。
三次作业花费的比例相对随题目的复杂度而有较大改变,总结来说 三次作业花费时间比例大致为1:2:3.5
以下是我总结的一些Java面向对象学习心得;
面向过程适合简单、不需要协作的事务,而面向对象更符合人的思想,当我们做一件事或造一个东西时我们首先需要设计一张图纸,需要明确各步骤的设计方法,各个部分协同合作才能更有效率的造出一个好东西;所以面向对象是宏观,面向过程则是方法或函数内的微观设计;
OO设计心得
面向对象基本原则理解: 就一个类而言,无需顾忌其他大体,只要专心思考这个类的功能,作为宏观对象的微观表现。 所设计的类应该是以类复用为思考点,最大程度实现代码的复用,不仅仅是面向过程的一个代码针对一个问题;
OO面向对象其实就是把程序看做一个个个体,个体进行分类,分级,整合的思想。具体分为封装,继承,多态,抽象。
对代码的测试能够发现我们对一些细节问题的处理是否恰当,以及可以知道所写代码的质量,他是否能满足我们的需求。
如果我测试代码我会从数据型,数据边缘,已经需求方面进行测试,也可以把代码进行拆分,分段进行测试;
课程收获
从三到四周的学习过程,我基本理解的Java的大体面向对象思想,学会了编写基本的代码,已经对细节的处理。学习一门新的语言不仅需要老师的讲解,更需要自己的亲身实践,才能发现其中的问题,甚至找到新大陆,发现其中的乐趣。
在最后我希望老师布置作业能稍微放慢速度,多听听同学们对于作业这块的意见。谢谢老师;
对于后期的学习 ,我会尽量避免再次出现第一阶段学习所出现的问题,尽量在代码中实现面向对象的思想’