鸭子类型:一切都是为了复用
当小平同志说出“科技是第一生产力”的时候,中国的发展无不是围绕此展开的。软件工程亦是如此。虽然小平同志的话只是一个总结。但必须承认,这个总结非常有见地。
软件发展,你可能已经被各种各样的名次搞晕了头。一堆类似OP、OO、SOA等等概念,如果你半年不关心IT,很可能你就发觉被世界遗忘了。
可是推开这些概念的表面迷雾,你会看到,所有这的一切,都是我们在努力提高生产力的结果。而提高生产力的最有效方法就是复用!
从汇编语言的出现,后来高级语言C的出现,面向对象的C++出现,面向类型的动态语言(如Python,Ruby)出现(这是我个人的看法,我若认为动态语言主要是从类型入手进行复用,欢迎指正),个个都是围绕不同层次的复用,复用二进制指令、复用逻辑、复用对象、复用类型。
这里我特意说一下动态语言中的Duck Type(走起来像鸭子那就是鸭子 it walks like a duck so it must be a duck)。如果说这是一种类型的话,我更愿意称之为“鸭子理论”。因为不为理论,不足以说明其在思想上的先进性。
- def Sum(a as duck, b as duck):
- return a + b
上面是一段简单的语法。如果从实现上讲,duck也许只是让编译器识别的一个关键字而已。代码执行的时候,会根据duck进行类型推定。但是我们这里讲的不是实现,而是藏在duck后面的思想。
那么,为什么要有鸭子出现?回答这个问题很难。因为我们都已经被静态类型的语言影响很久,甚至可以说毒害不浅,这会让我们非常难以接受新的思想。
静态类型中最最关键的一点是面向契约编程,即双方定下调用契约,然后你实现,我调用。这解决了很大问题。可是,你有没有发现就是因为这点,我可能不能复用很多我原本可以复用的。
谈到这里,我先说一下多重继承。C++语言中一直被人骂的鸡肋多重继承,大家有没有去想想他出现的根本?原因还在于复用。因为,人们不满足于只能仅仅复用简单的个体,很希望能够吸取多种对象的功能。这和现实是很相近的。一个业务实体往往能够兼备多种实体的功能。
尽管后来其他语言都是采用接口的机制取代多重继承,来实现业务实体的多个功能面的契约定义。可是,接口只是解决的契约的定义。另外,对于契约,其实有时候是很不公平的事。这让我想起一个微软的认证。
微软的认证是有阶梯约束的。过了初级才能考中级,而不管你是否已经拥有了初级的能力。一句话,你得听我的!这种契约式的预定,制约了很多已经拥有了能力,但是没有交钱考试的人!对于他们,这是多么不公平的事?而且,如果有一项任务,必须拥有某种资格认证的人才能做,你是看资质证书呢?还是看能力表现?
这是个非常有意思的问题。如果是你,你会选择哪个呢?静态语言选择了前者,动态语言选择了后者。
鸭子理论这个时候,就是充分想利用这些没有获得契约的资源。在不改变这些对象的前提下,使用这些资源,就是非常大的复用。
所以说,万变不离其宗!抓住“复用”这点,就能很容易理解很多新技术的背后思想。
我最近在学习动态语言的时候,一直在思考其中的思想。一些感悟,写出来和大家一起分享。
转载于:https://blog.51cto.com/xiammy/605385
鸭子类型:一切都是为了复用相关推荐
- 多继承 , 组合 , 菱形继承 , 接口 , 抽象 , 鸭子类型
一, 复习 属性的的正确存放位置:类中应该存储所有对象公共的内容对象中存储都是每个对象独有的(都不同) 初始化函数:给对象的属性赋初值 , 可以保证只要对象被创建就一定有相应的属性节省了重复代码绑定方 ...
- 用python画小鸭_python中的鸭子类型(协议)和接口
定义 1. 接口(interface) 学过静态语言的同学一定对接口的概念并不陌生,它类似于我们家里用的插座标准,要用电器时,我们得先查看对应的插头是否和插座孔匹配.也正因为此,接口给我们提供了很大的 ...
- python有多态特性吗_Python:多态、协议和鸭子类型
多态 问起面向对象的三大特性,几乎每个人都能对答如流:封装.继承.多态.今天我们就要来说一说 Python 中的多态. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同 ...
- python与鸭子类型
目录 1.面向对象(OOP)的三大特征 2.静态类型语言和动态类型语言的区别 3.面向接口编程 4.鸭子类型 5.python中的多态 1.面向对象(OOP)的三大特征 (1)面向对象程序设计有三大特 ...
- Python编程基础:第四十九节 鸭子类型Duck Typing
第四十九节 鸭子类型Duck Typing 前言 实践 前言 本节我们一起学习一个非常有趣的知识点:鸭子类型.有这么一句话:If it walks like a duck, and it quacks ...
- 25 类:接口 抽象父类 多态 鸭子类型 格式化方法与析构方法 反射 异常处理 自定义异常 断言...
面向对象与面向过程分析 # 清晰知道操作的功能,但不明确操作的具体对象 print(len('123')) # 清晰知道操作的对象,但不明确具体的操作方法 print('123'.__len__()) ...
- duck typing java_编程语言中的鸭子类型 Duck Typing
来源 | https://segmentfault.com/a/1190000019607240 1.什么是鸭子类型(duck typing) 百度百科是这样解释的: 这是程序设计中的一种类型推断风格 ...
- python 鸭子类型及三大特性
python 中一切皆对象. 先说 说面向对象语言三大特性:封装.继承.多态. 1.封装分两个层面 第一层面:创建类和对象时,分别创建两人者的名称空间,只能通过类名加"."或者ob ...
- Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)
1.创建类的代码: #在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入objectclass Animal(object):#在python中init方 ...
最新文章
- 荣耀30pro系统_荣耀30 pro:正式再见!
- 思科光传输功率查询_各品牌网络设备的光功率查看方法(不完全统计)
- c++如何输入数组_从一个数组中找出 N 个数,其和为 M 的所有可能最 nice 的解法...
- [html] 如何动态修改`<title>`的标题名称?
- nginx 常用命令 保持启动 重载 开机启动等
- java filehelper_Java常用工具类---IP工具类、File文件工具类
- [ARM] ARM处理器寻址方式
- mockjs json数组找不到_【接口测试】JSON 断言中的JSON Path
- PLSC(Partial Least Square Correlation)偏最小二乘相关
- Fastjson 远程命令执⾏漏洞
- python gps定位_GPS 测试汇总和python GPS 导航地图实现
- https工作原理及CA证书及验证证书
- 使用pascal voc训练测试faster rcnn
- mybatis插入大于号小于号到oracle
- 农村小伙从月薪2000多到年薪几十万,我的这条路大多数搬砖人都能走 ǃ
- Microsoft Excel 加载数据分析工具
- 现代的linux和windows7,Windows 7 Vs. Linux谁更强
- 有关微服务Zuul网关面试题分享【持续更新中】
- 火线 地线 零线 漫谈
- Windows 10开启ISS Web服务