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

第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][1],此写法为文献的缩写形式)。实际上,他是最先提出软件在编程之前应该进行设计的几个人之一。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。

时间: 2025-01-30 09:51:26

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

《UML面向对象设计基础》—第2章2.4节面向对象的益处

2.4 面向对象的益处 UML面向对象设计基础 本节的题目既迎合愤世嫉俗者又符合盲从者. 一些反对者可能会说面向对象没有什么优点:它仅是一种流派或是一场从西方一些地区引发起的全球性阴谋.而一些激进派则宣称面向对象是一流的并且是所有软件成功的唯一途径.面向对象不仅适用于Windows系统,而且还适用于无所不能的分布式Web体系结构. 这两种说法都太极端.作者认为面向对象是有用的,但不能神化,它还不够完美,其特定实用程序依赖于在软件开发过程中的使用方法. 没有一种有价值的软件工程方法可以成为"当年时

《UML面向对象设计基础》—第2章2.2节面向对象的成熟期

2.2 面向对象的成熟期 UML面向对象设计基础 本节介绍软件工业如何促进面向对象时代的真正到来. 老生物学家们常爱发表这样的言论:个体生物重演了生物发展史.其含义是个体生物胚胎的发展通常演绎着生物整体发展的进化过程(如人类胚胎的发育过程).当然在时间上存在很大的差异.个体生物的发展可能只有几个月,而整体生物却世代繁衍. 尽管老生物学家的说法无庸置疑,但在软件工程中却出现了一种新观点:面向对象软件工程的历史重演了传统软件工程的历史.当然在时间跨度上也存在很大的差异.形成成熟的过程和数据库结构花费

《面向对象设计实践指南:Ruby语言描述》—第1章 1.4节 面向对象编程简介

1.4 面向对象编程简介 面向对象设计实践指南:Ruby语言描述 面向对象的应用程序由对象和它们之间传递的消息构成.其中,消息相对更为重要.但在本节的简介里(以及在本书的前面几个章节里),这两个概念都同等重要. 1.4.1 过程式语言 相对于非面向对象(或过程式)的编程来说,面向对象编程是面向对象的.依据这两种风格的差异来考虑它们很有意义.假设有这么一种通用的编程语言,它可用来创建简单的脚本.在这门语言里,你可以定义变量(即组成多个名称),并将这些名字与少量的数据相关联.一旦进行了分配,便可以通

《UML用户指南(第2版.修订版)》—第1章1.3节面向对象建模

1.3 面向对象建模UML用户指南(第2版.修订版)土木工程师构造了很多种模型.通常这些模型能帮助人们可视化并说明系统的各部分以及这些部分之间的相互关系.根据业务或工程中所着重关心的内容(例如为了帮助研究一个结构在地震时的反应)工程师也可以建立动态模型.各种模型的组织是不同的,各有自己的侧重点.对于软件,有好几种建模的方法.最普通的两种方法是从算法的角度建模和从面向对象的角度建模. 传统的软件开发是从算法的角度进行建模.按照这种方法,所有的软件都用过程或函数作为其主要构造块.这种观点导致开发人员

《设计模式解析(第2版•修订版)》—第1章 1.6节面向对象范型

1.6 面向对象范型 设计模式解析(第2版•修订版) 使用对象将责任转移到更局部的层次 面向对象范型以对象概念为中心,一切都集中在对象上.编写代码时是围绕对象而非函数进行组织的. 对象是什么?对象传统上被定义为带有方法(面向对象领域称呼函数的术语)的数据.糟糕的是,这是一种非常有局限性的对象观.稍后我会给出一个更好的对象定义(在第8章中还会谈到).我说到对象的数据时,可能指数值和字符串这样的简单事物,也可能指其他对象. 使用对象的优点在于,可以定义自己负责自己的事物(参见表1-2).对象天生就知

《设计模式解析(第2版•修订版)》—第1章 1.7节面向对象程序设计实践

1.7 面向对象程序设计实践设计模式解析(第2版•修订版)我们再次考察一下本章开始讨论的形状实例.怎样用面向对象的方式实现它呢?请记住,我们必须完成以下任务. 1.在数据库中找到形状列表. 2.打开形状列表. 3.按某种规则将列表排序. 4.在显示器上显示各个形状. 为了用面向对象方式解决这个问题,我需要定义一些对象和这些对象具有的责任. 在Shape程序中使用对象 所需要的对象如下表所示. 运行程序现在主程序的步骤应该与下面给出的类似. 1.主程序创建一个数据库(ShapeDataBase)对

《设计模式解析(第2版•修订版)》—第1章 1.2节面向对象范型之前:功能分解

1.2 面向对象范型之前:功能分解 设计模式解析(第2版•修订版) 功能分解是一种处理复杂问题的自然方法 让我们从对一种常用的软件开发方法的考察开始吧.如果给你一个任务,要编写一段代码,访问在数据库中存储的形状描述然后显示出来.按照所需要的步骤来思考,是一种很自然的选择.比如,你可能认为应该按照以下步骤解决这个问题. 1.在数据库中找到形状列表. 2.打开形状列表. 3.按某种规则将列表排序. 4.在显示器上显示各个形状. 还可以选取以上任意一个步骤,进一步分解成实现所必需的若干步.例如,可以将

《测试驱动数据库开发》—第2章2.2节面向对象编程语言中的类

2.2 面向对象编程语言中的类 测试驱动数据库开发 为何对象的类来到应用开发世界的时间要远远比数据库的类早呢?首先,与在应用开发世界相比,在数据库世界中能让类成为必要元素的影响力没有那么强大,这一点先暂且不谈.其次,相比创建数据库实例,我们能够更加容易地建立可靠的方法来在应用会话中创建对象. 2.2.1 类的构建很容易:构建新对象即可 在面向对象编程的世界中,类其实仅有两个职责:创建新对象和析构(destroy)被废弃的对象.就本书的目的而言,析构其实并不重要.然而,对象的创建绝对是重要的. 在

《UML面向对象设计基础》—第1章1.10节本章小结

1.10 本章小结 UML面向对象设计基础 因为"面向对象"在英语中就没有绝对优势的定义,因此,针对面向对象定义的特性从来就没有一致的意见.我本人认为以下特性对面向对象是至关重要的:封装.信息/实现隐藏.状态保持.对象标识.消息.类.继承.多态性及一般性. 面向对象的封装产生一个由表示对象状态的属性及其操作组成的软件结构("对象"),用实现的术语讲,就是操作的方法处理保持对象状态的变量.封装确保对对象内部信息的任何修改(或访问)都必须通过对象的操作. 信息/实现隐藏