simula

1967年5月20日,在挪威奧斯陸郊外的小鎮莉沙布舉行的IFIP TC-2 工作會議上,挪威科學家Ole-Johan Dahl和Kristen Nygaard正式發布了Simula 67語言。Simula 67被認為是最早的面向對象程式設計語言,它引入了所有後來面向對象程式設計語言所遵循的基礎概念:對象、類、繼承。之後,在1968年2月形成了Simula 67的正式文本。

Simula是由Ole-Johan Dahl和Kristen Nygaard在20世紀60年代在奧斯陸挪威計算中心開發的兩種模擬程式語言Simula I和Simula 67的名稱。在句法上,它是ALGOL 60的一個相當忠實的超集。

Simula被認為是第一個面向對象的程式語言。顧名思義,Simula就是為模擬而設計的,並且該領域的需求為當今面向對象語言的許多功能提供了框架。

Simula已被廣泛用於模擬VLSI設計,過程建模,協定,算法以及排版,計算機圖形和教育等其他套用。 Simula的影響常常被低估,並且Simula類型的對象在C ++,Object Pascal,Java,C#和其他幾種語言中被重新實現。計算機科學家,例如C ++的創造者Bjarne Stroustrup和Java的創造者James Gosling已經承認Simula是一種主要影響。

基本介紹

  • 中文名:模擬語言
  • 外文名:simula
  • 誕生時間:1967年
  • 地點:Simula研究所
簡介,程式設計思想的進步,示例代碼,最小程式,Hello world,類和虛擬程式,仿真,

簡介

也是在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中的最小程式,通過原始碼的大小來衡量。 它只包含一件事; 虛假陳述。
但是,最簡單的程式更方便地表示為空白塊:
BeginEnd;
它開始執行並立即終止。該語言沒有程式本身的任何返回值。

Hello world

Simula中的Hello world程式的一個例子:
Begin   OutText ("Hello, World!");   Outimage;End;
Simula不區分大小寫。

類和虛擬程式

使用類,子類和虛擬過程的更現實的示例:
Begin   Class Glyph;      Virtual: Procedure print Is Procedure print;   Begin   End;   Glyph Class Char (c);      Character c;   Begin      Procedure print;        OutChar(c);   End;   Glyph Class Line (elements);      Ref (Glyph) Array elements;   Begin      Procedure print;      Begin         Integer i;         For i:= 1 Step 1 Until UpperBound (elements, 1) Do            elements (i).print;         OutImage;          End;End;     Ref (Glyph) rg;    Ref (Glyph) Array rgs (1 : 4);    ! Main program;    rgs (1):- New Char ('A');    rgs (2):- New Char ('b');    rgs (3):- New Char ('b');    rgs (4):- New Char ('a');    rg:- New Line (rgs);    rg.print; End;
上面的例子有一個超類(Glyph)和兩個子類(Char和Line)。 有兩個實現有一個虛擬過程。 執行開始於執行主程式。 Simula沒有抽象類的概念,因為具有純虛擬程式的類可以被實例化。 這意味著在上面的例子中所有的類都可以被實例化。 然而,調用純虛擬過程會產生運行時錯誤。

仿真

Simula包含一個用於執行離散事件模擬的模擬軟體包。 該仿真軟體包基於Simula的面向對象特性及其協程概念。
Sam,Sally和Andy正在買衣服。 他們必須共用一間試衣間。 他們每個人都在瀏覽商店約12分鐘,然後專門用試衣間約3分鐘,每個正常分發。 他們的試衣間體驗模擬如下:
Simulation Begin   Class FittingRoom; Begin      Ref (Head) door;      Boolean inUse;      Procedure request; Begin         If inUse Then Begin             Wait (door);             door.First.Out;         End;         inUse:= True;      End;      Procedure leave; Begin         inUse:= False;         Activate door.First;      End;      door:- New Head;   End;     Procedure report (message); Text message; Begin      OutFix (Time, 2, 0); OutText (": " & message); OutImage;   End;   Process Class Person (pname); Text pname; Begin      While True Do Begin         Hold (Normal (12, 4, u));         report  (pname & " is requesting the fitting room");         fittingroom1.request;         report (pname & " has entered the fitting room");         Hold (Normal (3, 1, u));         fittingroom1.leave;         report (pname & " has left the fitting room");      End;   End;   Integer u;   Ref (FittingRoom) fittingRoom1;   fittingRoom1:- New FittingRoom;   Activate New Person ("Sam");   Activate New Person ("Sally");   Activate New Person ("Andy");   Hold (100);End;
主模組以仿真為前綴進行仿真。 仿真包可以在任何塊上使用,並且在模擬某人進行模擬時甚至可以嵌套模擬。
試衣間對象使用佇列(門)進入試衣間。 當有人要求試衣間並且它正在使用時,他們必須在這個佇列中等待(等待(門))。 當有人離開試衣間時,第一個(如果有的話)從佇列中釋放(激活door.first),並相應地從門佇列(door.First.Out)中移除。
人員是流程的一個子類別,其活動描述為使用保持(瀏覽店鋪和在試衣間度過的時間),並在試衣間對象中請求和離開試衣間的程式。
主程式創建所有對象並激活所有person對象以將它們放入事件佇列。 主程式在程式終止前持續100分鐘的模擬時間。

相關詞條

熱門詞條

聯絡我們