面向对象程序设计先导课程心得体会

  面向对象程序设计先导课程心得体会

  为期两周的暑期课程已经结束了,回想这两周所学,收获颇丰。首先,在短短两周四节课内学会Java语言基础是我从来没想到的。之前学Python的时候,老师每周一节课地讲,我们照模照样地学,一个学期之后勉勉强强地写出了自己独创的一个小游戏;再后来学C语言,老师讲了一个月,我也对着一本厚书啃了一个月。这次JAVA语言的学习,快得出乎我意料,可能是因为编程语言学的越来越快,但我觉得还是和学习方法有很大的关系。

  以前学编程语言的时候,我一直陷入了一个误区,就是挑一本书看,书讲的越仔细越好,书越厚越好。所以学C的时候就买了一本《C Primer Plus》,看的云里雾里进展还慢,一周过去了一个数组还没看完。这次我买了《Java核心技术》,也非常后这就导致最后一直在看,缺少实践过程,看懂了还是敲不出来一个代码。

↑厚重的样子让人没有翻阅的欲望

吴老师的Java课第一次颠覆了我传统的学习过程。编程的学习,第一步要求的就是“不求甚解”。的确,学知识应该做到知其然并知其所以然,但在初学编程时这不是一个好方法,反而会让自己找不到重点,像个没头苍蝇。初学者一开始应该在意的是如何尽快的写出自己第一个代码,而不是某些问题的具体实现。例如我们在写

System.out.println(“hello world”);

这条语句的时候,需要知道的就是1、原来输出这么写2main方法要写成

public static void main(String[] args){...}

 那至于到底为什么要这样写,其实一开始完全没必要了解得那么清楚,就好像别人给制定了一套游戏规则,我们要做的就是尽快了解规则,然后赶紧开始玩,至于为啥规则这么订,自己本身也管不着。慢慢的,写的代码多了,某条语句用的次数多了,也就理解了规则,可能嘴上不能明确说出个所以然,但心里好歹有了感觉,这种时候感兴趣的话再去看一看厚点的参考书找找原因最好不过。

  这次学习旅程之所以轻松快乐,还有一个重要的原因就是eclipse实在是太便捷了。代码哪有问题一目了然,甚至连解决方案都会给出来,要导入什么包鼠标一点就行。↓对某个方法不太了解的敲一个’.’看弹出的提示,下拉菜单中不但会给出方法的参数类型、返回值类型,还会详细方法的作用,展示出使用频率,实在方便。↓这次暑期课程还锻炼了我查资料的能力,我也懂了个道理,没有人比百度知道的多,要有的话就是谷歌。

  总之,以后如果我再去学习一门新的语言,需要的所有装备就是1、一本薄书,越简单越好。2、再不济上网找个mooc3、不求甚解地敲代码。4、用好百度。这四点做到,万事大吉。

  四堂课,四次作业,四次磨难吧。第一次作业是要求使用继承实现对字符集合charset的一系列操作。当时我记得最纠结的就是不会使用类之间继承关系,或者说不知道继承作用的意义,写出来的代码除了具有浓浓的C味儿以外,还很傻。确实,当时Java也没有学很久,所以这些也情有可原。然后我就上网去搜一些mooc课程,看看自己不懂的地方。第二次作业需要使用的还是是接口,如同继承一样,接口也是一个晦涩难懂的概念。课堂上老师给了一个使用接口的例子,我看那个例子看的明明白白,也知道了使用接口的一系列好处,尤其是课堂上老师带着我们一起改良代码的时候更是让理解更深了一层,但到自己写代码的时候,一脸的懵比,完全不知道作用是什么,最后的结果就是写了一个大类,又写了一个接口,接口中定义了这个类中所有的方法,此外除了main以外再无其他类。

↑在接口中定义了所有的方法,然后用StringsBag实现方法,再写一个main类。不理解接口使代码很丑陋。

后来我躺在床上思考觉得老师的本意不可能只是这样的,于是我重新构思,把第一次作业的类利用了起来,构造了一个较为合理的接口,这样才亲自体会到了接口的好处。第三次作业是一次看性能的作业,同学们都绞尽脑汁地想让自己的代码运行更快,我自然也不能落后。我跟我室友讨论了一下,他告诉我java自带的hashmap是一个很好的数据储存结构,可以很方便快速地存取读取数据,但是我并不想使用这个神器,由于上一个学期我们学了数据结构,所以我就想把数据结构的知识用上。然后就面临着一个很尴尬的问题:java里面没有指针。但其实java里有有自引用,就是类里面的方法可以使用这个类和相应类里面的方法。我虽然对java中如何实现树不太明白,百度还是很博学的,从stackoverflow里面学习别人的写法,再模仿,然后举一反三,我自己的二叉排序树就成型了,最后输出的时候再用递归前序遍历二叉树,大功告成。

↑一个在Java中用自引用实现二叉树的方法

实际上这次作业我写了两个不同的方案,一个是使用排序二叉树的,另一个是不使用数据结构的,单纯用容器存储,然后用自带的排序方法输出。这两种方法我都运行了之后比较时间,发现方案一快的不是一丁半点。到课上进行性能测试,我决心和使用hashmap的室友一决高下,一开始我比他慢一半,这让我很气,后来发现是机器性能的问题,换到他的机器上同台竞技的时候我比他快了400ms,内心的满足感瞬间爆炸,也验证了半年的数据结构没有白学。第四次作业虽然还没有上交,但敲起来的感觉比第一次要好很多,明显感到更加得心应手了。

  整体来说,这一期的课程很有价值。老师的教学方法也深得我心,实践式教学更让学生感受到代码的魅力,锻炼了自学能力。唯一美中的不足,可能就是随时更改的作业要求吧,但我知道以后工作时,客户的要求可能变化地更快更无厘头。这其实也能锻炼整个代码的结构性和写注释的习惯,要求更改时快速定位需要重构的代码,做出调整。接下来这段时间,我想更进一步熟悉Java语言的特性和用法,尽量以后的代码都用Java来写,这样等到大二下学期的面向对象课程时就能更快地适应了课程了。

posted @ 2017-08-03 23:14  JamesDYX  阅读(498)  评论(0编辑  收藏  举报