哇!这就是面向对象!
最开始接触“面向对象程序设计”这个词是在大一下学期学习C++的时候,因为有C语言的基础,学起C++来并没有觉得很吃力,在那时候的我看来,C++和C语言的区别就是语法上有些差异,而“面向对象”和“面向过程”的区别,我没有看的很清晰,不管写什么程序,都觉得既可以用C语言写,又可以用C++写。
后来大二下学期的时候,学习了一下MFC,也拿着一本《Visual C++面向对象程序设计》学习了学习,知道了一些基本的控件和函数的使用方法,也开发过几个小程序,在做课程设计的时候也使用的MFC,做过一些程序之后,觉得面向对象仅此而已,并没有什么实际的意义,通过学习MFC,反而体会到了应用程序框架的优势,在别人已经搭建好的模版上放些控件,再调用一些函数搞出些花样,并不是很难。(当然,那时候懂得不多,想法也肯定有不成熟的地方。)能开发出一些小东西,别人也会羡慕,自己也会有成就感,可是看着自己开发的东西,心中总是觉得不好,但是说不出来哪里不好。开发过几个小程序之后,不想再深究MFC了,心里有个声音告诉我,那不是我的菜。
大三上学期,选了一门专业选修课《算法分析与设计》,这也许是我所有专业选修课中最有价值的一门课了。在这门课上,老师带着我们初识了一些基本的算法策略,递归、循环、递推、分治、动态规划等等。虽然考试的分数不怎么理想,但是我找到了新的兴趣,我喜欢上了算法中那些巧妙地思想,仿佛每一道题目都会让自己的思维有些许的进步。而后我知道了ACM,在网上也做了一些ACM的题目,每完成一道题,心中都有说不出的喜悦。我告诉自己,要好好学算法,后来在网上看到李开复老师的文章《算法的力量》,我更加坚定了要学好算法的信念。在写算法的过程中,我是这样做的:想出解题的思路---把思路整理成自然语言---把自然语言翻译成高级语言。一般我习惯使用C语言,因为我不知道C++有什么优势,除了必要的时候使用一下STL或者Algorithm头文件。
大三下学期,我们有一门课,叫做《设计模式》。以前听班上同学提起过,但是当时也就是听听就算了,并没有太在意。讲设计模式之前,老师把面向对象的三大特性——封装、继承和多态又讲了一遍。不管是看侯捷的《深入浅出MFC》中简要介绍面向对象的章节,还是听老师讲授面向对象的基本概念,都感觉:哦,这个就是面向对象,面向对象就是这个。面向对象究竟有什么优势呢?诸多优点中,貌似提到最多的就是:可复用、可维护、可扩展。当时心里想着,C语言也可以复用啊,也可以维护啊,也可以扩展啊。但是上了几堂设计模式的课程,老师介绍了几种设计模式之后,我的想法变了,从中也学到了很多东西。以前写MFC,根本体会到面向对象的优势,只是对继承、多态有一些初步的认识。但是学了设计模式的时候,是这种感觉:哇,这就是面向对象!学习设计模式,不能急于求成,或许照着书上的例子敲一遍,心里会有小小成就感,但是我觉得设计模式应该慢慢去回味其中的精髓,仔细分析不同设计模式之间的区别、联系、以及其中如何使用的面向对象特性。还要了解面向对象方法的几大设计原则,面向对象的原则和特性,是区别面向过程的关键,真正达到了可维护、可复用、可扩展,而且是用最少的花费去维护、复用、扩展。
我还是这么认为,不管做什么,思想比技术更重要。不管是学习算法,还是学习设计模式,都是思想的学习,而思想的学习是潜移默化的,不像技术一样立见功效,但是学习的过程还是很快乐的,当某一天发现把自己用学到的思想应用于实践了,那不是更快乐吗。学习就应该这样,不断的认识到自己的不足,不断的弥补自己的不足,也许“学无止境”就是这个意思吧,如果哪天我认为自己学的差不多了,那一定是我知道的太少了。
引用一本设计模式的书名作为结尾:Head First。
![字节跳动内推](https://img2020.cnblogs.com/blog/323808/202004/323808-20200415172728571-1992447742.jpg)
找我内推: 字节跳动各种岗位
作者:
ZH奶酪(张贺)
邮箱:
cheesezh@qq.com
出处:
http://www.cnblogs.com/CheeseZH/
*
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。