Charles Scalfani

原文:https://medium.com/@cscalfani...
元旦过了,以下是第二部分的翻译。
【译】再见,面向对象编程(二)-LMLPHP
Museum by Mark Chang https://www.artstation.com/ar...

封装,第二个坍塌的支柱

乍一看,封装应该是OO编程中的第二大收益。
对象的变量状态不能从外部访问,他们被封装在对象中。
封装对你的变量来说很安全。
封装太厉害了!
直到。。。

引用的问题

基于效率上的考量,对象不是基于他们的值而是基于他们的引用传递给方法。
这个意思是对象没有传给方法,实际传的是引用或对象的指针。
如果一个对象是按照引用传给对象的构造函数,构造函数可以把对象引用放在被封装所保护的私有变量中。
但是传递的对象并不安全!
为什么?因为代码的其他地方有指向对象的指针,那段代码可以调用构造函数。他必须要有对对象的引用不然他不可以将其传给构造函数。

引用的解法

构造函数需要将传递过来的对象克隆。而且不是浅克隆而是一个深克隆,每一个传递给对象的参数里包含的对象与每一个在这个对象中包含的对象,一个接一个。
都是为了效率。
不是所有的对象都可以被克隆。一些是与操作系统资源所关联的对象,对其进行克隆最好的结局是没什么用,而最坏的结局是做不了。
而每一个主流OO语言都有这个问题。
再见,封装。

多态,第三个坍塌的支柱

Polymorphism was the redheaded stepchild of the Object Oriented Trinity.
It’s sort of the Larry Fine of the group.
Everywhere they went he was there, but he was just a supporting character.
(翻译注,以上三句水平有限,应该有美语语境的典故,不好翻译,故放原文)
并不是说多态不好,只是你不需要在面向对象语言里做这个。
接口可以给你这个能力。而不需要OO的特性。
而使用接口,不管你加入多少行为都没有任何限制。
所以不用太麻烦,我们对基于OO的多态说再见,拥抱基于接口的多态。

被打破的承诺

当然,OO在早期承诺了很多。而这些承诺对于在教室中的,读博客和学习线上课程的天真程序员有效。
我花了许多年才认识到OO骗了我。
我被卖了。
再见,面向对象编程。

怎么办?

你好,函数式编程。能在这几年能遇到你真不错。
只有再一,没有再二。
如果你想加入一个web开发者互相学习和帮助的使用Elm函数式编程的社区,你可以访问我的Facebook组, Learn Elm Programming。
https://www.facebook.com/grou...


微信公众号「麦芽面包」,id「darkjune_think」
开发者/科幻爱好者/硬核主机玩家/业余翻译家/书虫
交流Email: zhukunrong@yeah.net

01-02 07:06