《UML面向对象设计基础》—第2章2.1节面向对象的起源-阿里云开发者社区

开发者社区> 开发与运维> 正文

《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。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章