关于面向对象的解释, 至少有两种截然不同的含义:
1)class是一种创建用户自定义类型的功能,面向对象是使用用户自定义类型和继承的程序设计
2)通过不同状态的对象互相传送消息来通信的程序设计就是面向对象
归集变量和函数建立模型的方法有:
1)模块,将相互关联的函数集中在一起,将初始化处理也放入包中即构造函数,例如perl
2)将函数和变量放入散列中,例如javascript
3)闭包,通过命名空间来归集,是创建具有对象性质的的事务的一种技术。一个包含了自由变量的开发表达式,和该自由变量的约束环境组合在一起后,实现了一种封闭的状态。
对象是现实世界的模型,类在不同语言里的意义不同,没有一个通用的解释,除了Java外,类不是不可或缺的。
类的存在只是为了更方便书写程序而约定的一种规则,无他。class最初有分类的含义,还表示类型,还有功能说明的作用,概念复杂。C++和Java的类主要有以下作用:
1 ) 整体的生成器
2)可行操作的功能说明
3)代码再利用的单位
类继承的三种实现策略:
1)一般化与专门化:子类是父类的专门化
2)共享部分提取:在多个类中提取共享部分作为父类
3)差异实现:把继承作为实现再利用的途径
为了保证理解的简易性,要防止继承树的层级过多。一般采用里氏置换法则:对于类T的对象一定成立的条件,对于类T的子类S的对象也必须成立。
多继承问题的解决方案主要有:
1)Java语言中禁止了多重继承,取而代之的是委托和接口
2)按顺序搜索,例如python中使用了C3线性化
3)混入式处理
4)trait认为类同时具有的作为再利用代码单元和实例生成器,这两种作用是相反的,把再利用单元的作用特别化,设定一些更小的结构(特性=方法组合)。