面向对象设计(Object-Oriented Design,
OOD)方法是OO方法中一个中间过渡环节。其主要作用是对
OOA分析的结果作进一步的规范化整理,以便能够被
OOP直接接受。
OOD的目标是
管理程序内部各部分的相互依赖。为了达到这个目标,OOD要求将程序分成块,每个块的规模应该小到可以管理的程度,然后分别将各个块隐藏在接口(
interface)的后面,让它们只通过接口相互交流。比如说,如果用OOD的方法来设计一个服务器-客户端(client-
server)应用,那么服务器和客户端之间不应该有直接的依赖,而是应该让服务器的接口和客户端的接口相互依赖。
这种
依赖关系的转换使得系统的各部分具有了
可复用性。还是拿上面那个例子来说,客户端就不必依赖于特定的服务器,所以就可以复用到其他的环境下。如果要复用某一个程序块,只要实现必须的接口就行了。
OOD是一种解决软件问题的
设计范式(paradigm),一种抽象的范式。使用OOD这种设计范式,我们可以用对象(object)来表现问题领域(problem domain)的实体,每个对象都有相应的状态和行为。我们刚才说到:OOD是一种抽象的范式。抽象可以分成很多层次,从非常概括的到非常特殊的都有,而对象可能处于任何一个抽象层次上。另外,彼此不同但又互有关联的对象可以共同构成抽象:只要这些对象之间有
相似性,就可以把它们当成同一类的对象来处理。
计算机硬件技术却在飞速发展。从几十年前神秘的庞然大物。当
软件开发者们还在寻找能让软件开发生产力提高一个
数量级的“
银弹”时,
硬件开发的生产力早已提升了百倍千倍。
硬件工程师们能够如此高效,是因为他们都很懒惰。他们永远恪守“不要去重新发明轮子”的
古训。
Grady Booch把这些黑箱称为类属(class category)。
类属是由被称为类(class)的实体组成的,类与类之间通过关联(relationship)结合在一起。一个类可以把大量的细节隐藏起来,只露出一个简单的接口,这正好符合人们喜欢抽象的心理。所以,这是一个非常伟大的概念,因为它给我们提供了封装和复用的基础,让我们可以从问题的角度来看问题,而不是从机器的角度来看问题。
软件的复用最初是从函数库和
类库开始的,这两种复用形式实际上都是白箱复用。到90年代,开始有人开发并出售真正的黑箱软件模块:框架(
framework)和控件(control)。框架和控件往往还受平台和语言的限制,实现更高程度的复用。但是想一想,其实
Web Service也是面向对象,只不过是把类与类之间的关联用XML来描述而已。
在过去的十多年里,
面向对象技术对软件行业起到了极大的推动作用。在可以预测的将来,它仍将是软件设计的主要技术。
OO方法以对象为基础,利用特定的
软件工具直接完成从对象客体的描述到
软件结构之间的转换。这是OO方法最主要的特点和成就。OO方法的应用解决了传统
结构化开发方法中
客观世界描述工具与软件结构的
不一致性问题,缩短了开发周期,解决了从分析和设计到软件
模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的
系统开发方法。