标签:develop 复杂度 之一 height round png ffffff 提升 work
前言
面向过程 还是 面向对象?这不仅仅是个软件工程术语,其问题甚至可以追溯到亚里士多德:您把这个世界视为过程还是对象? 回归到现今的软件行业,这不仅仅是个某个具体编程技术问题,更是认识论问题。
认识论 vs. 工具
UML创始人之一的Grady Booch在2004年IBM Developer Works Live大会的访谈中讲过的一段流传甚广的话。
我对面向对象编程的目标从来就不是复用。相反,对我来说,对象提供了一种处理复杂性问题的方式。这个问题可以追溯到亚里士多德:您把这个世界视为过程还是对象?在面向对象兴起运动之前,编程以过程为中心,例如结构化设计方法。然而,系统已经到达了超越其处理能力的复杂性极点。有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统——我认为,这才是面向对象编程运动的真正胜利。
感想:
写过几年C++代码的我,一度以为所谓的OO其实就是继承、封装、多态、复用。复用这个词还是工作后才深入体会,大学期间老师传授的知识一直都是类、继承、封装、多态。无论怎样界定OO,他们说的都没错,只是不全面,只是OO的表象。OO编程的目标从来就不是复用,如果是失败的抽象,复用非但不会简化系统复杂性,还会令原本复杂的系统变得更加难以开发维护。OO的精髓在于抽象,OO的困难也在于抽象,OO的成功在于成功的抽象,OO的失败在于失败的抽象,正所谓成也抽象,败也抽象。
软件行业,OO运动兴起之前一直以面向过程为核心。虽然我们今天都在讲OO,但是OO与PO之间无所谓对错,只是适不适合。万事万物都有其内部结构后以及外部表现,软件开发亦是如此。以PO为核心,对内构造更为复杂的系统,对外解释越来越复杂的现实世界,已经日渐力不从心。PO无法胜任这样的问题,但是对于小规模系统架构,复杂度较低,PO的方法还是很管用的。而OO则是我们目前采用处理复杂性问题的方式,无论对内构造更为复杂的系统,还是对外解释复杂的现实世界,软件行业几十年的发展都证明了其正确性。为啥PO不行,OO就行,深层次上是我们认识论出了问题,不是工具的锅。
何为认识论,通俗的讲是我们如何认是这个现实世界,面向过程 or 面向对象是我们采取的方法,这个问题自古有之。而我们今天在软件开发领域采用的众多技术,只是采用某种认识论时所使用的工具。这些工具或者技术,是前人软件开发过程中归纳和总结的最佳实践,掌握这些技术是重要的。掌握这些技术意味着你已继承前人经验积累,这是个捷径。但是这背后更重要的还是其隐含的各种认识论,即各种思想。工具会随着时间兴跌更替,但是思想不会。没有认识路就不会有百花齐放的工具,正所谓“皮之不存,毛将焉附”。
现实世界是怎样的?
Process-oriented vs. Object-oriented
标签:develop 复杂度 之一 height round png ffffff 提升 work
原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/10188730.html