天天看点

《UML面向对象设计基础》—第2章2.1节面向对象的起源

本节书摘来自异步社区《uml面向对象设计基础》一书中的第2章2.1节面向对象的起源,作者【美】meliir page-jones,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第2章 面向对象简史

uml面向对象设计基础

前面讨论了面向对象的固有特性,现在来看一下面向对象是如何适用于软件开发的广阔领域。

当听说wolfgang pauli教授提出一种新的基本粒子(μ介子,μ- meson或muon)时,isidor i .rabi教授曾经立即予以反驳:“谁承认这种说法?”鉴于此事例,我在本章开头部分列出一些对面向对象有贡献的人士。下面将面向对象置于社会环境中,讨论对这种软件方法的看法。然后,将面向对象置于工程环境中,将面向对象与电子学做一个类比。最后,阐述面向对象对企业中的程序员、系统分析员及经理们究竟能带来哪些益处。

2.1 面向对象的起源

与人类发明史上的许多创举不同,面向对象不是在瞬间出现的。面向对象不是某个人在浴缸中的突发其想,而是许多人历经多年研究积累的产物。第1章中介绍的面向对象概念,就像几个支流通过历史的变迁而汇集到一起,最后形成面向对象的河流。

下面列举了(按年代排序)在理论研究方面和在工程实践中,对面向对象做出了重大贡献的人士,如有遗漏请谅解。

2.1.1 larry constantine

谈到任何软件范畴的贡献者都会提到larry constantine,因此就从资深的larry constantine说起。虽然20世纪60年代,constantine并没有在“面向对象”的旗号下做任何事,但他却致力于研究软件设计的基本准则(参见本书后面参考文献中列出的constantine,1968,此写法为文献的缩写形式)。实际上,他是最先提出软件在编程之前应该进行设计的几个人之一。constantine的许多著名观点(如耦合和内聚)一直沿用到现今的面向对象领域。

2.1.2 o.-j. dahl 和k.nygaard

dahl 和nygaard引入的几个概念现在已成为面向对象的组成部分。类的概念就是一个最好的例子,这个概念首次出现在simula语言中(参见[dahl 和nygaard,1966])。

2.1.3 alan kay,adele goldberg等人

kay,goldberg及其同事经过几年的研究,于1970年左右在xerox公司的palo alto研究中心设计出了smalltalk语言(参见[kay ,1969])。这一研究成果提出了许多现在成为面向对象核心的概念(如消息和继承)。许多人至今仍认为smalltalk语言和环境(参见[goldberg and robson,1989])是面向对象完美的实现。

2.1.4 edsger dijkstra

dijkstra的“软件正确性的理念(conscience of software correctness)”,使人们几十年来一直耿耿于怀。在dijkstra的早期研究中,提出了用抽象层构造软件的观点,在两个相继的层之间用严格的语义区分。这实际上是一种封装的形式,也是面向对象的主要概念之一。

2.1.5 barbara liskov

在20世纪70年代,liskov使抽象数据类型(adt)的理论和实现有了重大的进展,奠定了面向对象的基础。liskov的最著名的研究成果就是clu语言,支持隐藏内部数据表示方法,参见[liskov et al.,1981]。

2.1.6 david parnas

在具有划时代意义的论文中,parnas提出了模块软件构造原则(参见[parnas,1972])。尽管面向对象的构造优于传统的过程模块,但parnas的信息隐藏的许多基本思想仍然可以应用到面向对象的系统中。

2.1.7 jean ichbiah等人

ichbiah与其研究小组开发了“green”编程语言,是一种被美国国防部所采纳的ada语言(现在称为ada-83)。ada-83中的两个概念(一般性和包)也是面向对象中非常重要的内容。这个语言的最新版本ada-95更为全面地支持面向对象。

2.1.8 bjarne stroustrup

c++语言有一个有趣的家谱。以前由martin richards开发了一种bcpl语言[richards 和whitby-strevens,1980]。由此产生b语言,bcpl的缩写。由b语言产生c语言,经过stroustrup的研究由c语言产生了面向对象的c++语言。

下面引用一段stroustrup在“c++的产生”[stroustrup,1991,p.4]中的一段话:

c++主要是为编程人员而设计的,使其编程时不一定必须使用汇编,c或各种现有的高级语言。其主要目的让每个编程人员可以更容易更愉快地写出好的程序。历来没有有关c++设计的论文,设计、文档及实现都是同时进行的。

由于c++的面向对象是从早期非面向对象并且十分低级的语言移植而来的,因而它的语法并不十分清晰。然而,尽管有java语言的出现,c++仍然是最广泛使用的面向对象语言。由于c++的前身是c,因此在许多机器和操作系统平台上具有可移植性,从而极大地推动了面向对象语言的流行。从这个意义上说,stroustrup的对该领域的贡献是巨大的。

2.1.9 bertrand meyer

meyer的贡献是将最佳的计算机科学思想与最佳的面向对象思想融合起来。其结果是产生一个称为eiffel的语言和环境。eiffel在软件界确实是个珍品,因为它对理论、软件工程及希望优化代码的人们都具有吸引力。无论你的企业选择哪种面向对象语言,如果希望成为真正的面向对象专家,就应该学习eiffel中的概念,[wiener,1995]是学习eiffel的一本好书。

2.1.10 grady booch,ivar jacobson及jim rumbaugh

这三个人物一同被冠以“the three amigos”的绰号。尽管他们在面向对象领域都有各自的主张,但在20世纪90年代后期,他们通力合作将面向对象用合理的符号表示,产生了统一建模语言(unified modeling language,uml)。 这个图形化的建模语言既有可视的表达形式,又有严谨的语义支撑。本书第3章至第7章介绍uml。