【谈谈面向对象】
什么是面向对象?
初学者的答案往往都是从“封装、继承、多态……”这些方面来解释,稍微能多说几句的可能会说:面向对象比面向过程好啊,它怎么滴怎么滴~。再多说可能就是,面向对象是面向过程出了问题之后为了更好的解决一些问题,于是有了面向对象……。通常会提到,万物皆对象啊,有了对象我们而已更方面的操作一个累啊,更好的去做软件……
面向对象真的有必要吗?答案肯定是:有!
面向对象是一种思想,一种跳出面向过程的思想。大部分人用面向对象的语言,写着面向过程的代码。因为面向对象本来就是面向过程,任何机器执行指令的时候可不管你什么对象不对像的,都是一条一条的读取指令。但是面向对象是一种思路或者说是思想,一种解决问题的思路。就像做一件小事情的时候我们可以把方方面面的问题都考虑到,把一件小事做的特别完美。但是一件大事就没那么简单了,事必躬亲早晚累死。而做小事的总要被做大事的人指挥,做大事总是比做小事高级。所以说面向对象比面向过程好,比它高级……
面向对象的精髓应该是“抓大放小”。把大方向交给面向对象去管控,具体的小事情就交给面向过程(也就是对垒出一堆的逻辑语句)来解决。下面就又出了一个问题:什么是大什么是小?做判断前一定会有前提,没有考虑任何前提的判断都是感情用事。在软件开发过程中,“大小”的判断往往要根据需求来判断。没有任何一个人开发出来一个软件,可以做到完美,软件工程之中没有“银弹”。所以,为什么在学校的实验室或者课堂上永远不能明白什么是面向对象什么是面向过程,因为你根本没有那个需求。纵使把某一样东西讲的天花乱坠,但是看不见摸不到只能凭空想象的东西永远不会被人真正的接受……
工作的时候可能经常有人说,你这种方式不对!你这个以后肯定会出问题!你没有用面向对象!你在用面向对象语言写着面向过程的代码……如果这个时候你不忙,倒是可以和他讨论讨论你哪里错了。问问是不是这样做会引发什么问题,或者说是不是他以前这样做导致了什么不好的事情发生。如果你很忙,明天或者后天就要交项目了,不要管他了,自己该干嘛干嘛……
一个程序员的成长,肯定是一堆bug培养出来的。为什么会有这个bug?为什么会有这么多bug?为什么现在新的需求那么难扩展?当遇到了这些问题的时候,就是一个程序员能力提升的时候了。无论你是自己解决还是问google/baidu ,只要你带着问题去找寻答案,思考答案。那就是成长……
开发的过程中,只有当需要的时候我们才去用面向对象思考。
所以什么是面向对象?这是一个根本没有答案的问题……