面向对象(Object Oriented,OO)的概念来自编程语言和编程思路,其基本思想是从现实世界中客观存在的事物出发,来构造软件系统,并在这个过程中不断把事物的各部分拆分成一个一个的对象来进行模型塑造和搭建。
与之相对应的是面向过程,面向过程(Procedure Oriented)是一种以过程为中心的编程思想。
以使用冰箱的例子来说,面向过程的思路如下。
1) 从菜市场带回了一筐菜。
2) 从框中找到白菜,将冰箱门打开,把白菜放进冷藏区去,把冰箱门关闭。
3) 从框中找到牛肉,将冰箱门打开,把牛肉放进冷冻区,把冰箱门关闭
4) 做饭的时候到了,想吃白菜,把冰箱门打开,找到冷藏区,找到白菜并拿出来。
5) 做饭的时候到了,想吃牛肉了,把冰箱门打开,找到冷藏区,找到牛肉并拿出来。
6) 从超市带回了一个蛋糕,因为是蛋糕,所以要把蛋糕找来新鲜的袋子密封好,将冰箱门打开……
我们发现,对于要装进冰箱的这些白菜、牛肉、蛋糕等,可以精准地描述其操作步骤,就像SOP(Standard Operating Procedure,标准作业程序)一样。
如果家里成员多个,这份SOP就可以给每个人作为执行标准。随着家庭成员变多,想放进冰箱的东西的种类也多了起来,这时候刚才的SOP就不够用了。
随着事物增多、场景增多、客户对事物的要求增多,这份SOP就会越发膨胀,维护成本增大,传达和记忆成本增大,抄一份给到另一个家庭使用的适用性降低等弊端,这就是面向过程的缺点。
尽管它能讲清楚每一条具体的线索,但是复用性和兼容性很差。
现在改用面向对象的思路去分析这个事情,我们首先会发现,无论想往冰箱里装什么,都可以描述为拿到某个东西,打开冰箱,根据某些条件,放进某个区域,再关闭冰箱。如此一来就把事件统一化了,模型就出现了。
之后把任何一个能装进冰箱的事物装进冰箱,都可以套入这个模型中,就可以一步一步运行下去,省去了单独定义的麻烦。
于是我们发现,产品的复用性和面向对象的思维有类似之处,都是更加通用和兼容。这一思想对产品经理设计产品,规划方案有很大的指导意义。
可以与开发的实现思路产生共鸣和增益,有利于产品的架构和扩展。
实际上面向对象的思维不仅是笼统的概念,在具体的工作中也有场景和针对性。