码迷,mamicode.com
首页 > 其他好文 > 详细

2018.2.20 OOP week2

时间:2018-02-21 10:49:26      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:依次   post   复杂度   多重继承   pattern   if else   而且   dispatch   出现   

回到PL了,准备一口气完成最后一部分。

Dan对比了OOP和functional programming。可以看到这两种范式处理问题是截然相反的思路:对于同一个“用函数去处理类”的问题,函数式编程选择去抽象函数,这样在用同一个函数处理一个输入的时候,需要把输入以不同的类型做区分;而OOP选择去抽象类,结果就是一个类下面有一大堆的方法,而不同的类下面的方法很可能都是做着类似的事情。

Double Dispatch是OOP这种思路的一个具体体现,感觉Dan讲这个就是为了黑OOP的。Double Dispatch解决的是当对象类型可能不统一时如何调用方法的问题,实际上这个问题用pattern matching或者 if else从句 + 类型判断 都可以很轻松的解决。但问题是大家可能觉得pattern matching太函数式,if else从句 + 类型判断太过程式,所以就弄出一个特别OOP的Double Dispatch。Double Dispatch确实很OOP,它不但像一般的OOP写法那样把同样的方法放到每个类里面,而且这个方法自己还要针对不同的类做分支。那这样一分支呢,其实出现了乘法的情况,就造成了次方级的分支复杂度,所以为了保持OOP的统一范式,其实是牺牲了代码的简洁性的。

后面又讲了C++中的多重继承,ruby的mixin,和java中的interface,功能依次变弱,副作用也依次减少。纯从概念上来感觉,觉得后两个都还蛮不错的。

明天写PL最后一份作业,不知道要写多久。。。

 

2018.2.20 OOP week2

标签:依次   post   复杂度   多重继承   pattern   if else   而且   dispatch   出现   

原文地址:https://www.cnblogs.com/dynasty919/p/8456187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!