瞎扯淡 读<动态函数式语言精髓>

zzz6519003 · 2019年07月02日 · 1518 次阅读

一、看清语言的本质,而不是试图学会一门语言。

二、关于技巧的思考:技巧究竟是一种语言特性还是仅特定的版本所支持抑或根本就是一个 BUG?技巧是否是唯一可行的选择,有没有不需要技巧的实现?技巧是为了实现功能而不是为了表现技巧而出现在代码中的。

三、有关命令式语言:其核心是通过算法改变内存 (中的数据),实质是面向存储的编程。其发展迄今为止经历了两个阶段:结构化编程和面向对象编程。

四、结构化编程中的结构体抽象层次过低,由此带来的问题至少包括下述三个方面:(1) 结构体与实体直接相关,并且将这种相关性直接呈现在使用者的面前,因此开发人员必须面临数据的具体含义与关系;(2) 结构体的抽象更面向于数据存储形式的表达和算法实现的方式,脱离了具体使用环境和算法的结构缺乏通用性;(3) 僵化的类型与僵化的逻辑并存,影响了业务逻辑的表达。而面向对象的语言很好地解决了上述三个问题,主要借助于以下手段:(1) 提出更加细化的可见性设定,实现更好的数据封装性及数据管理;(2) 运用继承来解决结构体的通用性问题;(3) 运用多态性解决 “强类型” 与业务逻辑表达之间的冲突。

五、“对象” 无疑是比 “结构体” 更高层次的数据抽象,但是它也仅是更高层次的数据抽象。它所基于的,依然是对结构的认可,而并不是以对算法的认可为前提的。正是因为它并没有突破 “结构影响算法” 的边界,所以我们才在面向对象系统中看到一种情况:如果对象基类的抽象不合理,或者继承树设计的不合理,那么在这个对象系统上的应用开发将会束手束脚,接下来对继承体系的重构又会影响到业务逻辑 (算法) 的实现。而与此相反,接口 (Interface) 的观点是,只暴露数据体的逻辑行为能力而不暴露这种能力的实现方法和基于的数据特性,它首次从系统中剥离了 “数据” 的概念,进而把与数据有关的关系也清理了出去 (例如对象引用,有人认为对象之间的引用是面向对象体系的灾难之源)。正因为接口突破了 “结构影响算法” 的边界,所以它变成了现代 OOP 语言中不可或缺的一部分,就此成为面向对象编程方法的一种突破。

六、原型继承的基本原理与实质。对象系统的继承特性有三种实现方案:基于类 (class-based)、基于原型 (prototype-based) 和基于元类 (metaclass-based),其中 Javascript 是使用原型继承来实现对象系统的。所谓的原型其实也是一个对象实例,原型的含义是指:如果构造器有一个原型对象 A,那么由该构造器创建的实例 (Instance) 都必然复制自 A,这里需要认识到:由于实例复制自对象 A,所以实例必然继承了 A 的所有属性、方法和其它性质,由此可见原型继承的实质是复制。


作者:zuiyanwangyue 来源:CSDN 原文:https://blog.csdn.net/zuiyanwangyue/article/details/83363397 版权声明:本文为博主原创文章,转载请附上博文链接!

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册