面向对象与面向过程的区别
看代码时,想到个比喻,在这里记一下,
假如 面向过程 与面向对象 是2个陌生人,
面向过程一开始让人看起来平易近人, 好相处, 但相处久了,就会发现他各种与你合不来的地方, 各种缺点, 想绝交吧,这么多年的朋友, 太可惜。
– 代码量少,就几个方法,调用一下,简单直观, 符合一般思维逻辑。
– 随着时间推移,不断有新需求加进来, 代码增多,逻辑分叉增多,代码 越来越难以理解,因为很多东西混在一起, 甚至互相影响, 改起来费事, 改一个地方,影响很多地方,很多地方都需要重新测试,意味着改动成本越来越大。 有时只是进行一个小改动,你得把整个代码都读懂搞明白, 把各个逻辑都搞清楚,才能改, 不然谁知道会影响到谁。 想推到重来, 成本太大。
面向对象一开始让人看起来比较难相处,难理解, 但如果深入了解后,你会慢慢发现以前没发现的优点, 使你更想与这个朋友相处。
– 一开始设计,也费事,考虑封装哪些变化,考虑抽象那些实体,那些行为。 这个接口,那个类的,代码分散在各个类里,看起来费劲,难以理解, 不符合一般逻辑思维,类/接口多,代码也多
– 但随着时间推移, 新需求,新改动加进来后, 各管各的, 互不影响, 甚至加了新逻辑,老的逻辑都不用测,因为没有影响, 改起来也很容易, 不用担心影响其它地方。
代码后期维护理解也容易得多, 因为各个逻辑分支,没有影响,就没有与老的逻辑的叠加。 另外面向对象让你的设计更加优雅 也算是个好处吧。
面向对象编程适合大型长期性的业务型设计开发。
面向过程适合小型,快速的计算型任务开发。
项目如果需要好的维护性,面向对象是更好的选择。
但现在好像开始流行函数式编程,函数式编程 是支持闭包,还是不变性, 代码简洁,这对 快速开发或分布式环境 有吸引力, 所以java 8 加入了stream , function 等工具包, 可以说是对面向对象的一种能力扩展吧。
函数式(流式)编程与面向对象编程并不冲突,除了函数式编程要求里面的值有不变性这个限制, 2者可以互相补充, 可以完美结合。
现实是,现在大型长期应用开发需求已经满足的差不多了, 分布式开发,快速开发需求在增长。 所以函数式编程开始流行了。
对于分布式大型应用开发, 我看需要面向对象+函数式编程挺适合, :)