今天和一个小伙伴讨论问题的时候,无意间体会到了面向过程和面向对象更为形象的解释。
简单来说,面向过程就是把功能代码块封装在一起叫函数;而面向对象就是把功能相近的函数与和这些函数相关的变量封装在一起,叫做类。
有人会说有的类里没有函数,只有属性,这怎么讲?其实获取对象的属性本来就是一个“函数”,只是这个函数和一般的函数长得不太一样而已。
当项目很简单,简单到整个项目就只有几十行代码。这时候,什么函数,什么类,我都不用。
面向过程
当项目复杂一点,代码多到几百行,这时候,如果不用函数,那代码读起来就比较困难。读一个项目,要读几百行代码。
但是呢,实际上,一个业务的实现,肯定是要分步骤的。先注册,再登陆,再浏览商品,再添加购物车,再生成订单,再支付,其实每一步都可以封装成一个函数。
这样,读代码的时候,就可以先总览各步骤,再看各步骤的具体实现(可读性)(其实可读性也意味着“可维护性”,如果读都费劲,还谈什么维护)。
另一方面,当业务比较多的时候,业务之间肯定会有功能一样的代码,这时候,当第二次遇到某个功能的时候,就可以直接调用原来写好的那个函数(复用性)。
面向对象
当项目再复杂一点,代码多到几千行上万行。这时候,虽然把各种功能封装好了,但是需要的功能实在太多了,也就是说可能会有几十个甚至几百个函数。这时候,怎么办?
这时候可以给函数分分类,把功能相近或者有某种联系的函数写在一起,并通过同一个命名空间(类名 or 实例名)调用。也许,类的概念就是这么产生的。
面向抽象
到这里,不知道各位发现了没有,函数是在代码行数多到不易读的情况下出现的。类是在函数多到不易读的情况下出现的。那么类多到一定程度呢?
当然是抽象了~
什么是抽象,不就是对类进行分类吗?有一个父类叫狗,他有三个子类“哈士奇”、“中华田园狗”、“阿拉斯加”。“狗”这个类,其实不就是对“哈士奇”,“中华田园狗”,“八公”这三个类进行总结吗(总结就是封装啊)?
关于 20171212 在虹口