2 对象模型
对象模型包括:抽象、封装、模块化、层次结构、类型、并发和持久
2.1 对象模型的演进
OO建立在以前技术的最佳思想之上。两大趋势:小规模→大规模;高级程序设计语言;
2.1.1 程序设计语言的换代
第一代(1954~1985):科学和工程应用,公式计算FORTRANⅠ: 数学表达式
第二代(1959~1961):算法抽象
FORTRANⅡ:子程序、单独编译
ALGOL60:块结构、数据类型
COBOL:数据描述、文件处理
Lisp:列表处理、指针、垃圾收集,基于λ演算的函数式编程语言,在CAD软件上应用广泛(AUTOCAD二次开发用),括号+语法树;程序看作数据;
第三代(1962~1970):数据抽象
Pascal:ALGOL60的简单继承者
Simula:类、数据抽象
代沟(1970~1980)
C:高效、可执行程序小
FORTRAN77:ANSI标准
OO兴盛(1980~1990)
Smalltalk:纯OO,在Smalltalk中所有的东西都是对象,或者应该被当作对象处理。例如表达式:2 + 3,应当被理解为:向对象2发送消息+,参数为对象3。 对Objective-C、Java 、Ruby等有推动;开发思想:模式、XP、重构等
C++:从C和Simula发展而来
FrameWork的出现(1990~现在)
VB,Java,Python,J2EE,.NET,C#,VB.NET
2.1.2 第一代和第二代早期程序设计语言的拓扑结构
基本物理构成单元:子程序(对COBOL而言,称之为段落)
物理结构 = 全局数据 + 子程序
2.1.3 第二代后期和第三代早期程序设计语言的结构
子程序作为一种抽象机制
→ 开始发明支持参数传递机制的语言
→ 奠定了结构化设计的基础
在语言上支持嵌套子程序,并在控制结构和声明的可见性方面发展
→ 出现了结构化设计方法,利用子程序作为基本构建块
2.1.4 第三代后期程序设计语言的结构
大规模编译 → 独立开发同一程序的不同部分 → 独立编译的模块
此阶段,模块只是用于最有可能同时改变的子程序分组,非抽象机制
虽支持模块化,但鲜有规则要求模块间接口的语义一致性;
对数据抽象和强类型支持得不好,错误只有在运行期才能被检测出来。
2.1.5 基于对象和面向对象的程序设计语言的结构
中小型应用 大型应用
构建块是模块,表现为逻辑上的一组类或对象,而非子程序。
过程、函数是动词,数据是名词 → 面向过程(procedure-oriented)围绕动词,OO围绕名词
中小型OO应用的物理结构表现为一个图,而非树;几乎无全局数据;数据和操作在单元中
对巨型编程,对象模型在规模上扩展;一组抽象可构建在另一组抽象层智商;一组抽象协作,实现更高层行为;即第一章中描述的复杂性的组成方式;
2.2 对象模型的基础
对象模型是普适的(UI/DB/computer architectures);
算法分解处理大量复杂问题时