这是我参与更文挑战的第2天,活动详情查看: 更文挑战
我们总在提面向对象,那面向对象究竟是个什么东西呢?在面向对象出现之前的面向过程又是怎么回事呢?
其实无论是面向对象还是面向过程,都是我们在编程时解决问题的一种思维方式。
只是在最初,人们分析解决问题的时候,会把所需要的步骤都列出来,然后通过计算机中的函数把这些步骤挨个实现,这种过程化的叙事思维,就是面向过程思想。
你比如,把一头大象放进冰箱,通常会怎么做呢?
我们的习惯性思维是会分为三步,第一步,把冰箱门打开,第二步,把大象推进去,第三步,把冰箱门关闭(假设大象很乖,冰箱很大,门能关住)。
这种方式固然可行,但当场景发生变化时,比如大象变成猪,冰箱变成衣柜,类似的步骤用面向过程编码的话就要再写一遍。这样就导致代码开发变成了记流水账,久而久之就成为面条代码。
我们仔细分析面向过程的这些步骤,会发现都是命令式的动宾结构:开冰箱门,推大象,场景切换下就是开衣柜门,推猪。你会发现从这两种场景下是可以找到共性的,就是冰箱门和衣柜门都有打开和关闭的特点,大象和猪都能走路,所以能被人推进去。
当我们的视角不再是流程,而是操作对象的时候,冰箱门和衣柜门都可以抽象成门,有打开和关闭的特点,大象和猪都可以抽象成动物,有走路的特点。按这个思路,我们可以把这件事简化成主谓结构:门打开,动物走进去,门关闭。
这种把事情分解成各个对象,描述对象在整个事情中的行为,就是面向对象思想。
你会发现,面向过程更讲事情的步骤,面向对象更讲对象的行为。
面向对象可以基于对象的共性做抽象,为软件工程的复用和扩展打好了坚实的基础。这也是为什么在很多大型软件开发选型上,大多会使用面向对象语言编程。