simula

更新时间:2022-08-25 16:03

1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。之后,在1968年2月形成了Simula 67的正式文本。

简介

也是在1968年,荷兰教授E.W.Dijkstra提出了“GOTO语句是有害的”观点,指出程序的质量与程序中所包含的GOTO语句的数量成反比,认为应该在一切高级语言中取消GOTO语句。这一观点在计算机学术界激起了强烈的反响,引发了一场长达数年的广泛的论战,其直接结果是结构化程序设计方法的产生。

相信当时没有任何人预见到当年发生的这两件事对后来计算机技术,特别是软件技术所产生的深远影响。尽管这两种方法的思想差异巨大,但是多年以后,无论是Ole-Johan Dahl和Kristen Nygaard,还是E.W.Dijkstra,都因其在这一年所取得的成就,获得了计算机界的诺贝尔奖——图灵奖。 为了纪念挪威的这两位科学家的伟大贡献,在挪威研究基金会(Norwegian Research Council)的筹划下,Simula研究所 (Simula Research Laboratory)于2001年1月正式成立。

随着计算机技术的迅猛发展,硬件成本不断降低,而软件成本却不断增加,因此,如何缩短软件生产周期和提高维护效率,研制出高质量的软件产品成为一个重要课题。

程序设计思想的进步

在20世纪60年代,软件曾出现过严重危机,由软件错误而引起的信息丢失、系统报废事件屡有发生。为此,1968年,荷兰学者E.W.Dijkstra提出了程序设计中常用的GOTO语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了代码优化。此举引起了软件界长达数年的论战,并由此产生了结构化程序设计方法,同时诞生了基于这一设计方法的程序设计语言Pascal。

由瑞士计算机科学家Niklaus Wirth开发的Pascal,一经推出,它的简洁明了以及丰富的数据结构和控制结构,为程序员提供了极大的方便性与灵活性,同时它特别适合微计算机系统,因此大受欢迎。结构化程序设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子程序,便于开发和维护。因此,结构化方法迅速走红,并在整个20世纪70年代的软件开发中占绝对统治地位。

但是,到了70年代末期,随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化,于是面向对象技术开始浮出水面。

面向对象程序设计方法起源于Simula 67语言。在程序设计语言的发展史上,20世纪60年代后期是承上启下的重要时期。这一时期有三种重要的语言问世,即Simula 67、由一批顶尖计算机科学家共同设计的Algol 68、以及为IBM 360系列机配套开发的PL/I。这三种语言虽均有所创新,但Simula 67的面向对象概念的影响是最巨大而深远的。它本身虽因为比较难学、难用而未能广泛流行,但在它的影响下所产生的面向对象技术却迅速传播开来,并在全世界掀起了一股OO热潮,盛行不衰。面向对象程序设计在软件开发领域引起了大的变革,极大地提高了软件开发的效率,为解决软件危机带来了一线光明。

但是,事实表明,面向对象程序设计方法虽然比结构化方法能更自然地表现现实世界,但它不是灵丹妙药,并不能解决所有问题,它本身存在固有的内在的局限性。最近兴起的面向方面编程(AOP)正是为了改进上述程序设计方法学的不足。AOP被视为是“后”面向对象时代的一种新的重要的程序设计技术。而从更广义的范畴看,在过去的40年里,软件体系结构试图处理日益增长的软件复杂性,但复杂性却仍继续增加,传统的体系结构好像已经达到了其处理此类问题的极限。新兴的Web 服务通过允许应用程序以对象模型中立的方式实现互连,从而提供了一个更强大、更灵活的编程模型,并将对软件开发方法产生巨大的影响。

示例代码

最小程序

空计算机文件是Simula中的最小程序,通过源代码的大小来衡量。 它只包含一件事; 虚假陈述。

但是,最简单的程序更方便地表示为空白块:

它开始执行并立即终止。该语言没有程序本身的任何返回值。

Hello world

Simula中的Hello world程序的一个例子:

Simula不区分大小写。

类和虚拟程序

使用类,子类和虚拟过程的更现实的示例:

上面的例子有一个超类(Glyph)和两个子类(Char和Line)。 有两个实现有一个虚拟过程。 执行开始于执行主程序。 Simula没有抽象类的概念,因为具有纯虚拟程序的类可以被实例化。 这意味着在上面的例子中所有的类都可以被实例化。 然而,调用纯虚拟过程会产生运行时错误。

仿真

Simula包含一个用于执行离散事件模拟的模拟软件包。 该仿真软件包基于Simula的面向对象特性及其协程概念。

Sam,Sally和Andy正在买衣服。 他们必须共用一间试衣间。 他们每个人都在浏览商店约12分钟,然后专门用试衣间约3分钟,每个正常分发。 他们的试衣间体验模拟如下:

主模块以仿真为前缀进行仿真。 仿真包可以在任何块上使用,并且在模拟某人进行模拟时甚至可以嵌套模拟。

试衣间对象使用队列(门)进入试衣间。 当有人要求试衣间并且它正在使用时,他们必须在这个队列中等待(等待(门))。 当有人离开试衣间时,第一个(如果有的话)从队列中释放(激活door.first),并相应地从门队列(door.First.Out)中移除。

人员是流程的一个子类别,其活动描述为使用保持(浏览店铺和在试衣间度过的时间),并在试衣间对象中请求和离开试衣间的程序。

主程序创建所有对象并激活所有person对象以将它们放入事件队列。 主程序在程序终止前持续100分钟的模拟时间。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}