真的理解面向对象思维

来源:互联网 发布:java动态代理模式 编辑:程序博客网 时间:2024/06/07 02:28

只是想给一些程序员说明一些简单的道理

跳出编程

最近帮着负责公司的面试,招聘岗位是JAVA应用开发,可能是因为公司性质原因,无法找到好的毕业生源,但在沟通中越发的发现一个问题,那就是对于混口饭吃和做好一件事儿,差距是很大的。至少从简历上可以看出来,凡是写上SpingMVC和Struts之类框架的人,都是走进实现逻辑,压根没有跳出来思考。
我最喜欢提的问题是随意交叉对比“C、C++、JAVA、PYTHON、SQL”这几种编程语言,至于SQL我是想听到大家的看法,其实在目前的编程世界,他还是比较单一的语言,但是其语言定位是不好定位的,而对于JAVA,面试者都能说出其OO特性,但一旦我说把OO单独拿出来说,几乎没有几个能聊得太多,当然也有把OO和设计模式拿出来说的,但觉得还是缺乏些什么。
我最后总结出来的结果就是我们在思考面向对象的时候,可能真的是基于某种实现来思考,在实际开发中很有效果,特别是JAVA,但是如果真的想理解面向对象思维,我觉得还是得跳出编程。

万物皆对象

这句话是我在读JAVA书以及一些博客时候常常提到的,当你用C语言,使用链表实现一个猴子选大王的程序时候,如果跳进JAVA肯定不会习惯,毕竟简单的Int a=0 ,int a=0 之间的区别,就会变得有些复杂,倘若再加上JAVA的equal() 函数,情况就会让新手抓狂。但这些都是来自语言特性的,我觉得写下万物皆对象这句话在JAVA书中只是说明他是一个很OO的语言。
但在我理解,“万物皆对象”这种思维只在说明实物和形式的重要性。对象是Object倾向于实物,所有的OOL都会提到一个实例化,建构子(构建函数),之所以让我们去这样的对待万物就是因为,作为一个系统的上帝,你必须理清楚,你应该做一个有高度的上帝,我更倾向于程序员是宗教性上帝,而非神话性上帝。
需求分析是拿着一堆Object去理清楚他的真实Class,而作为上帝的时候,你必须去创造这个Class,所以我觉得Class作为关键字很重要,他就是一个分类,在系统科学中也可以叫做形式,托尔金定义了人、兽、精灵、迈雅、树人,其实就是去给他做了一个分类,他们本应的形式是如何,至于佛罗多怎么出身的,他为什么做到咕噜做不到的事儿,就完全是实体的本身环境及复杂性决定(这也是早期纯面向过程为什么难以模拟元胞自动机的原因之一)。

面向对象的系统建立

这个问题的引出就是当我想和别人谈谈OO的时候(脱离OOL)去谈,很多人去谈设计模式。
正如之前提到的,如果我真的把类分完了,在整部精灵宝钻里面只提到迈雅是什么样的,人类平时做什么,精灵在哪里流放,那么整个精灵宝钻就毫无心意,更别说创造出一个神话。当分类完了之后,索伦就是被实例化的一个迈雅,他开始是个才华出众的(可能在智利、力量、敏捷赋值方法使得其综合能力很高),最后随着环境以及个人的想法变成一个强大的邪恶力量,对象应该能自己生存,只不过确定性系统里面,可能是你安排他去干嘛,书的设计就是这样。
那么整个面向对象的系统建立,就是把之前所做的划分,变成实际运行的发生。而设计模式就是为你提供这样的一个发生思路(经验主义最喜欢的)。

清醒思考

或许是学校的风格不同,以及自己了解的范围不同,有很多编程人总是稀里糊涂地进行着开发,但我觉得每一个程序员都应该清清楚楚地意识到,自己在做一个怎样的工作,一个清楚的思维能带来的是一个更好的行业兴趣。

0 0