找对象难,是没有面向好对象吗?又扎心了!今天就来聊聊我理解的“面向对象”。
说到选对象,其实最贴心的就是程序员了,因为我们一直都是"面向对象"的啊(自行脑补一下泪奔的场面)!
在编程界如果没听过一门语言情有可原,但如果没听过“面向对象” (Object Oriented),一定不能称之为一个合格的程序员。
为什么面向对象如此重要?可以说面向对象是现代软件的基石,它是一种思想,体现的是抽象思维能力,是将复杂问题分解为简单问题的重要手段。所以面向对象并不是一门具体的技术,而是在众多技术中提炼出的精华。
我写的这个系列本来想命名为“人人都是程序员”。我觉得其实编程来源于生活,本来也是为了解决生活中的实际问题而产生的。生活中的思维和艺术可以完美的映射到软件中。不过一位朋友说标题字数不宜过多,只好作罢。
下面就来说一说,面向对象需要具备哪些能力。
先来说说抽象思维能力
我们定义一些规则或名词,能解释的现象越多,概括的东西越多,就说明它的抽象程度越高。例如麻雀、凤凰可以抽象为鸟类,再高一层可以抽象为动物。
选择何种抽象程度,要视情况而定。例如我们描述一群人走过来了,你要说成是一群生物走过来,也没有逻辑问题,但是明显不合适。这就叫“粒度”选择要适中。
抽象思维能力很重要,以至于它决定了人类的发展进程。中国在中世纪以后逐渐落后于西方,和抽象思维能力有一定的关系。
冯友兰的《中国哲学简史》一书中,把这种差异归因于海洋国家和大陆国家的区别。他提到“海洋国家需要依赖商业维持其繁荣,商人要打交道的首先是用于商业帐目的抽象数字,然后才是具体东西”。
西方用几十个字母就描述了形形色色的万事万物,而汉字却需要一个庞大的字库。这也是英文和阿拉伯数字可以在全世界流行的重要原因。
将复杂问题简单化的能力
将复杂问题简单化,既是一种抽象思维能力,更是在此能力上的提升。这是一个如何进行功能分解的过程。
从事具体技术工作的人,如果切换到一个陌生的领域,心里会很没有底,这叫“隔行如隔山”。但如果搞管理,随便在哪个行当也可能做得风生水起。
这并不是说谁的能力强弱,而是由专业性质所决定。各个行业的管理模式都大同小异,再复杂的管理都可以分解为相对简单的套路,每一类事物找到合适的人选,后面就好安排了。所以懂管理的人一定是“面向对象”的。
难道搞具体技术就不懂“面向对象”啦?实际上很多跨行业跳槽后,学习曲线非常快。这种触类旁通的能力,就是因为能把很多问题链接到已知的知识点上。在软件开发里面,就叫“复用”,避免了重复开发。
角度优选的能力
为什么很多热点问题出来以后,很多大V也能写出爆款文章?仔细分析会发现他们看问题的角度与别人有很大不同,会有自己独到的地方。
软件开发也会有多种实现方法,有的优雅,有的却很笨拙,关键看你选择从哪个方面去解构对象。“横看成岭侧成峰,远近高低各不同”,找对了角度,才能拍出美景。
就拿学习这回事来说,有的人觉得是为自己学,但有的人却觉得是在为别人学习。有些人编程习惯养成不好,不爱加注释,不喜欢做记录,也从来不会重构自己的代码。这类人由于看问题角度的局限性,只能在原地踏步。
话说回来,面向对象远远不止上述的这些能力,需要在实践中慢慢去领悟。而且每个人的理解并不会完全一致。我只是挑了自己感受最深的一些点来分享。
我不想举实际的编程案例,一方面觉得这些网上可以随意百度,另一方面更希望不是软件专业的人能喜欢阅读。本人现在主要也不是从事编程工作,但是从编程中得到的这些感悟却受益终身。
往期小作