- Object Oriented,不同语言中面向对象意义不同
- goto因强大让人困惑,退出历史。面向对象、Trait也有这因素
- 两种立场
- 历史
- 归集方法和建模的发展
- 围绕实现多实例问题
- 强关联元素分组存放,便于理解
- module
- 关联函数集中, 1978年Modula-2引入, Python, Ruby叫模块,Java, Perl叫包
- 初始化散列, 再作为参数传入包中函数,函数修改散列
- 包提供初始化函数, 返回散列, 该函数成为构造函数(Java叫工厂方法)。但使用包函数都要传入散列
- bless函数(Perl)绑定包和散列产生blessed hash对象,它的方法对应包方法, curry了散列做参数
- 包的初始化函数自己绑定, 返回blessed hash对象
- 变量和函数放入散列
- js对象
- 函数放入散列
- 函数成为一等公民,可赋值给变量。FORTRAN66中字符串还不是一等公民
- first-class function的思想来自Scheme语言
- 函数中通过this隐式获取自身做散列
- 创建构造函数,返回以上散列。但返回的散列上都定义了新的函数
- 把函数单独放置在包或对象, 使用时很麻烦
- 引入原型概念,对象变量查找作用域在原型链中扩展
- 这里是委托方式的原型,也可以在实例化时通过负责来实现。原型变更的处理,不同语言有差异
- prototype-based的思想来自Self语言
- 定义new f()运算, 函数f的原型是以上散列,多个new的新对象共享了散列的函数
- 新对象原型指向函数f的原型
- 以新对象为this,执行f
- 闭包
- 类
- 继承
- OOAD