
1.2 对象及遗留系统
在面向对象成为主流之前,开发人员面临的问题一直就是如何将新的面向对象技术与现有的技术集成起来。面向对象编程与结构化(或过程式)编程之间有清晰的界限,而结构化编程在当时是主流的开发范式。我总是觉得这很奇怪,因为在我看来,面向对象编程和结构化编程并不相互排斥。它们是互补的,因为对象可以与结构化代码很好地集成。直到现在我还经常听到这样的问题:你是一个面向过程的程序员还是面向对象的程序员?我会毫不犹豫地说:我都是。
同样,面向对象的代码并不意味着完全替代结构式代码。很多非面向对象的遗留系统(即现存的较老的系统)仍在正常工作,所以为什么要冒着潜在的风险来改变或者替换它们?大多数情况下,你不应当改变它们,至少不是为了改变而改变。使用非面向对象的代码编程并不存在本质上的错误。然而,全新的发展必然需要考虑使用面向对象技术(有些情况下也只能这样做)。
过去的25年间面向对象的开发领域一直在平稳而显著地增长,全球社会对网络(比如互联网及移动基础设施)的依赖有力地帮助了面向对象技术飞速发展,甚至使其成为业界主流。浏览器与移动应用之间的海量交易开辟了全新的市场。在这个市场中很多软件都是全新的,几乎未受到遗留系统的影响。即使需要与遗留系统打交道,也可以使用包装对象将遗留系统包装起来。
包装对象
包装对象是指在面向对象的类中包含其他代码。例如,你可以将结构化代码(比如循环和条件)包装到一个对象内部,使其行为就像对象一样。你也可以使用包装对象来包装特性,比如安全特性、不可移植的硬件特性等。第6章将介绍如何包装结构化代码。
如今,软件开发最有趣的领域之一是遗留代码与移动及Web系统的集成。大部分情况下,一个移动Web前端最终会连接到大型机中的数据。能够结合大型机和移动Web开发技能的开发人员非常受欢迎。
我们在日常生活中有大量使用对象的经历,甚至有时候自己都没意识到在使用对象。坐车、打电话、使用家庭娱乐系统、玩电脑游戏(以及很多其他情况)都是使用对象的经历。电子高速公路本质上已经成为基于对象的高速公路。随着业务越来越多地使用移动网络,这些业务也越来越多地使用对象,因为电子商务所用技术大多都是面向对象的。
移动网络
毋庸置疑,互联网的出现为面向对象技术的推广起到了极大的推动作用。这是因为在网络中很适合使用对象。互联网是这场变革的领导者,移动网络也加入进来并扮演着重要的角色。本书中,术语“移动网络”(mobile web)适用于移动应用开发和Web开发的上下文中。术语“混合应用”(hybrid app)则用于呈现在Web设备和移动设备的浏览器中的应用程序。