您的位置:首页 > 其它

关于面向过程和面向对象和面向抽象和……

2017-12-12 19:00 267 查看
今天和一个小伙伴讨论问题的时候,无意间体会到了面向过程和面向对象更为形象的解释。

简单来说,面向过程就是把功能代码块封装在一起叫函数;而面向对象就是把功能相近的函数与和这些函数相关的变量封装在一起,叫做类。

有人会说有的类里没有函数,只有属性,这怎么讲?其实获取对象的属性本来就是一个“函数”,只是这个函数和一般的函数长得不太一样而已。

当项目很简单,简单到整个项目就只有几十行代码。这时候,什么函数,什么类,我都不用。

当项目复杂一点,代码多到几百行,这时候,如果不用函数,那代码读起来就比较困难。读完整个项目,要读几百行代码。但是呢,实际上,一个业务的实现,肯定是有步骤的,先注册,再登陆,再浏览商品,再添加购物车,再生成订单,再支付,其实每一步都可以封装成一个函数,这样,别人读代码的时候,基本上就只读“步骤个数”行代码就可以了(可读性)(其实可读性也意味着“可维护性”,如果读都费劲,还谈什么维护)。另一方面,当业务比较多的时候,业务之间肯定会有功能一样的代码,这时候,当第二次遇到某个功能的时候,就可以直接调用原来写好的那个函数(复用性)。

当项目再复杂一点,代码多到几千行上万行,这时候,虽然把各种功能封装好了,但是需要的功能实在太多了,也就是说可能会有几十个甚至几百个函数,这时候,怎么办?有人是这么想的,对步骤再分步骤。也就是说,把几个函数写在一个大的函数里,这样,读整个项目的时候,基本上只读“大函数”就可以了解整个项目是干什么的了。这样想是理所当然的,问题是,有的时候,下面的函数要处理的数据是上面函数执行的结果,当处理的数据的结构比较复杂的时候,来回传递就比较麻烦,也就是说,一个函数可能有五六个甚至十几个参数,这还谈什么可读性?这时候,就有人提出这样的解决方案,把需要来回传
4000
递的数据设置成全局变量(数据的复用),这样,就不用传递了,大家一起从全局变量里找就好了。但是这样也会有一个问题,当数据量比较大的时候,就会出现很多很多全局变量……怎么办?刚才说到“大函数”不知道大家还记不记得。因为数据虽然是要复用的,但是有可能有些数据只是在某些步骤里需要复用,这时候,其实可以把这些数据设置为“某些范围内,全局有效”,也就是“局部性的全局变量”。说起来很拗口,其实你想想类的属性,是不是和这个“局部性的全局变量”有点像呢?也许,面向对象就是这么来的。

到这里,不知道各位观众老爷们发现了没有,函数是在代码行数多到不易读的情况下出现的。类是在函数多到不易读的情况下出现的。那么类多到一定程度呢?

当然是抽象了~

什么是抽象,不就是对类进行分类吗?有一个父类叫狗,他有三个子类“哈士奇”、“中华田园狗”、“阿拉斯加”。“狗”这个类,其实不就是对“哈士奇”,“中华田园狗”,“八公”这三个类进行总结吗(总结就是封装啊)?

那么当抽象多到一定程度呢?再分呗,那有什么?怎么分?分模块啊,也就是最喜闻乐见的module。也就是src目录下的各个文件夹啊。

当模块多到一定程度上怎么办?还是分啊。

“我也知道要分,我只是想知道分模块后,上级的名字是什么?”

“项目”

"那项目是最顶端了?”

“当然不是,我不认为任何东西有上限或者下限,不过项目上面的名字……想不起来一个好的词汇。公司?比如说腾讯有很多项目,阿里也有很多项目,腾讯自家的项目联系很大,比如一个qq号可作为所有腾讯代理的任何游戏的账号,总之一个公司的产品多少有那么些藕断丝连的联系“。

"那公司也能分?好吧能分,我只想知道公司分后的名字"

"生态?‘第三方登陆’大家都不陌生,有的时候,虽然我用的是百度的产品,但是我也可以用qq登陆,为什么叫生态?那你得知道什么是生态。初中生物里有个名词叫‘生态圈',可以参考这个词汇琢磨一下"。

“生态上面……?”

“滚!”

关于

20171212

在虹口 姐姐家
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: