1.2.3 面向对象方法与程序设计语言

在面向对象方法的发展过程中,面向对象程序设计语言的出现和发展起到了十分重要的引领作用,同时语言本身也得到了不断的发展。这些语言也不断丰富和促进了面向对象方法的发展。

1.Simula语言

1967年5月,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。之后,在1968年2月形成了Simula 67的正式文本。Simula 67被认为是最早的面向对象程序设计语言,它引入了对象、类和继承等概念。这些概念构成了后来出现的所有面向对象语言都必须遵循的基础概念,同时,这些概念也构成了面向对象方法的核心概念的重要组成部分。

Simula 67的面向对象概念的影响是巨大而深远的。它本身虽然因为比较难学难用而未能广泛流行,但在它的影响下所产生的面向对象技术却迅速传播开来,并在全世界掀起了一股面向对象技术热潮,至今盛行不衰。面向对象程序设计在软件开发领域引起了大的变革,极大地提高了软件开发的效率。

2.Smalltalk语言

20世纪70年代到80年代前期,美国施乐公司的帕洛阿尔托研究中心(PARC)开发了Smalltalk编程语言。从Smalltalk 72、Smalltalk 78到Smalltalk 80,形成了整个Smalltalk系列,Smalltalk编程语言对近代面向对象编程语言影响很大,所以称之为“面向对象编程之母”。

与许多其他程序设计语言的不同之处在于,Smalltalk还具有如下几个特点。

1)Smalltalk是一种全新的纯面向对象的程序设计语言。Smalltalk语言本身非常精炼。它是一种面向对象的语言,包含语言的语法和语义。一些编译器可以通过Smalltalk源程序产生可执行文件。这些编译器通常产生一种能在虚拟机上运行的二进制代码。

2)提供一个完整的程序开发环境。Smalltalk附带了一个巨大的标准类库,这使得开发Smalltalk程序的效率非常高。甚至其他语言(如Ada、C和Pascal)中部分语言的功能(例如条件判断、循环等)也被当成特定的Smalltalk类提供。

3)应用开发环境(ADE)。Smalltalk具有一个非常优秀的、高度集成、开放的应用开发环境。由于开发环境中的浏览器、监视器以及调试器都由同样的源程序衍生出来的,不同的版本之间也具有相当好的兼容性。此外,这些工具的源程序都可以在ADE直接存取。

Smalltalk被公认为是历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境(IDE)。Smalltalk对其他众多的面向对象程序语言的产生起到了极大的推动作用,如Objective-C、Actor、Java和Ruby等。20世纪90年代的许多软件开发思想均得益于Smalltalk,例如设计模式(Design Patterns),极限编程(Extreme Programming,XP)和软件重构(Refactoring)等。

3.C++语言

由于C语言是一门通用的计算机编程语言,其应用十分广泛。所以,面向对象语言出现以后,出现了多种不同的基于C语言的面向对象设计语言。这些语言以C语言为基础,以不同的方式扩充了对象的概念框架,从而构成了不同的面向对象语言。

人们也将这种从C++扩充出来的语言称为C族语言。常见的C族语言包括ObjectC、C++、C#和Java等程序设计语言。

C++语言是对C语言的继承,它既可以过程化编程,又可以基于对象编程,还可以进行以继承和多态为特点的面向对象编程,当然也可以混合编程。C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

C++语言具有支持数据封装、继承、多态和重用等面向对象特征。特别的是,C++还支持多继承。

其主要优点是,C++是在C语言的基础上开发的一种面向对象编程语言,其应用领域十分广泛。C++语言灵活,运算符的数据结构丰富、具有结构化控制语句、程序执行效率高,而且同时具有高级语言与汇编语言的优点。

C++语言的主要缺点是缺少自动垃圾回收机制,设计出来的软件容易造成内存泄漏(Memory Leak),从而影响软件的可靠性。

4.C#语言

C#是微软公司开发的一种面向对象且类型安全的程序设计语言。C#语言不仅是一种面向对象(Object Oriented)程序设计语言,还是一种面向组件(Component-Oriented)的程序设计语言。现代软件已经越来越依赖于具有自包含和自描述功能包形式的软件组件。这种组件可以通过属性、方法和事件等概念来提供编程模型;具有提供关于组件的声明性信息的特性。C#语言提供的结构成分直接支持组件及其相关概念,这使得C#语言自然而然地成为创建和使用软件组件的重要选择,有助于构造健壮、持久的应用程序。

C#还提供了垃圾自动回收(Garbage Collection)、异常处理(Exception Handling)和类型安全(Type Safe)三大机制。

C#的垃圾自动回收机制可以自动释放不再使用的对象所占用的内存,解决了C++的内存泄漏问题;异常处理机制则提供了结构化和可扩展的错误检测和恢复方法,为设计高可靠性的应用程序提供了语言基础;类型安全机制则可使设计出来的应用程序避免读取未初始化的变量、数组索引超出边界或执行未经检查的类型强制转换等特殊情形。

C#还是一个具有同一类型的系统(Unified Type System),即所有的C#类型(包括诸如int和double之类的基元类型)都继承于一个唯一的一个Object根类型。这使得所有类型的对象都共享一组通用操作,并且任何类型的值都能够以一致的方式进行存储、传递和操作。此外,C#同时支持用户定义的引用类型和值类型,既允许对象的动态分配,也允许轻量级结构的内联存储。

为了确保C#程序和库能够以兼容的方式逐步演进,C#的设计中充分强调了版本控制(Versioning)。C#的设计在某些方面直接考虑到版本控制的需要,其中包括单独使用的virtual和override修饰符、方法重载决策规则以及对显式接口成员声明的支持。

5.Java语言

Java语言具有很多与当今使用的大多数编程语言相通的特性。Java语言与C++和C#有很多的相似之处,其本身就是采用与C和C++相似的结构设计的。

Java语言最初的目标只是为了给万维网创建Applet工具而定义的一种语言。Applet是一种运行在Web页面中的小应用程序,下载之后,它可以在不使用Web服务器资源的情况下,在浏览器页面中执行任务并与用户进行交互。Java语言对于Web这样的分布式网络环境确实有非常重要的价值。然而,它已经远远超越了这个领域,成为一种强大的通用编程语言,适用于构建各种不依赖于网络特性的应用,并可满足其他应用的不同需求。它在远程主机上以安全的方式执行下载代码的能力正是许多组织的关键需求。

有些团队甚至将Java作为一种通用编程语言,用于开发对机器无关性要求不高的项目。Java语言易于编程,安全性强,可用于快速地开发工作代码。它同样具有垃圾回收和类型安全引用这样的特性,某些常见的编程错误在Java中是不会发生的。对多线程的支持满足了基于网络和图形化用户界面的现代应用的需要,因为这些应用必须同时执行多个任务;而异常处理机制使得处理错误情况的任务变得简单易行。尽管其内置工具非常强大,Java依然是一种简单的语言,程序员可以很快地精通它。

以上简单介绍了Simula、Samlltalk、C++、C#和Java等几种典型的面向对象程序设计语言及其特性。这些语言中,目前最流行的是C++、C#和Java这三种程序设计语言。这几种语言通常被作为软件开发项目的首选语言。

事实上,在实际的软件项目开发过程中,每种语言都有不同的编译器版本、集成环境和资源库等多方面的选择,但所有这些选择所依据的面向对象思想和开发方法都是基本相同的,或是语言无关的。