複製鏈接
請複製以下鏈接發送給好友

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研究所

simula簡介

也是在1968年,荷蘭教授E.W.Dijkstra提出了“GOTO語句是有害的”觀點,指出程序的質量與程序中所包含的GOTO語句的數量成反比,認為應該在一切高級語言中取消GOTO語句。這一觀點在計算機學術界激起了強烈的反響,引發了一場長達數年的廣泛的論戰,其直接結果是結構化程序設計方法的產生。
相信當時沒有任何人預見到當年發生的這兩件事對後來計算機技術,特別是軟件技術所產生的深遠影響。儘管這兩種方法的思想差異巨大,但是多年以後,無論是Ole-Johan Dahl和Kristen Nygaard,還是E.W.Dijkstra,都因其在這一年所取得的成就,獲得了計算機界的諾貝爾獎——圖靈獎。 為了紀念挪威的這兩位科學家的偉大貢獻,在挪威研究基金會(Norwegian Research Council)的籌劃下,Simula研究所 (Simula Research Laboratory)於2001年1月正式成立。
隨着計算機技術的迅猛發展,硬件成本不斷降低,而軟件成本卻不斷增加,因此,如何縮短軟件生產週期和提高維護效率,研製出高質量的軟件產品成為一個重要課題。

simula程序設計思想的進步

在20世紀60年代,軟件曾出現過嚴重危機,由軟件錯誤而引起的信息丟失、系統報廢事件屢有發生。為此,1968年,荷蘭學者E.W.Dijkstra提出了程序設計中常用的GOTO語句的三大危害:破壞了程序的靜動一致性;程序不易測試;限制了代碼優化。此舉引起了軟件界長達數年的論戰,並由此產生了結構化程序設計方法,同時誕生了基於這一設計方法的程序設計語言Pascal。
由瑞士計算機科學家Niklaus Wirth開發的Pascal,一經推出,它的簡潔明瞭以及豐富的數據結構和控制結構,為程序員提供了極大的方便性與靈活性,同時它特別適合微計算機系統,因此大受歡迎。結構化程序設計思想採用了模塊分解與功能抽象和自頂向下、分而治之的方法,從而有效地將一個較複雜的程序系統設計任務分解成許多易於控制和處理的子程序,便於開發和維護。因此,結構化方法迅速走紅,並在整個20世紀70年代的軟件開發中佔絕對統治地位 [1] 
但是,到了70年代末期,隨着計算機科學的發展和應用領域的不斷擴大,對計算機技術的要求越來越高。結構化程序設計語言和結構化分析與設計已無法滿足用户需求的變化,於是面向對象技術開始浮出水面。
面向對象程序設計方法起源於Simula 67語言。在程序設計語言的發展史上,20世紀60年代後期是承上啓下的重要時期。這一時期有三種重要的語言問世,即Simula 67、由一批頂尖計算機科學家共同設計的Algol 68、以及為IBM 360系列機配套開發的PL/I。這三種語言雖均有所創新,但Simula 67的面向對象概念的影響是最巨大而深遠的。它本身雖因為比較難學、難用而未能廣泛流行,但在它的影響下所產生的面向對象技術卻迅速傳播開來,並在全世界掀起了一股OO熱潮,盛行不衰。面向對象程序設計在軟件開發領域引起了大的變革,極大地提高了軟件開發的效率,為解決軟件危機帶來了一線光明。
但是,事實表明,面向對象程序設計方法雖然比結構化方法能更自然地表現現實世界,但它不是靈丹妙藥,並不能解決所有問題,它本身存在固有的內在的侷限性。最近興起的面向方面編程(AOP)正是為了改進上述程序設計方法學的不足。AOP被視為是“後”面向對象時代的一種新的重要的程序設計技術。而從更廣義的範疇看,在過去的40年裏,軟件體系結構試圖處理日益增長的軟件複雜性,但複雜性卻仍繼續增加,傳統的體系結構好像已經達到了其處理此類問題的極限。新興的Web 服務通過允許應用程序以對象模型中立的方式實現互連,從而提供了一個更強大、更靈活的編程模型,並將對軟件開發方法產生巨大的影響。

simula示例代碼

simula最小程序

空計算機文件是Simula中的最小程序,通過源代碼的大小來衡量。 它只包含一件事; 虛假陳述。
但是,最簡單的程序更方便地表示為空白塊:
Begin
End;
它開始執行並立即終止。該語言沒有程序本身的任何返回值。

simulaHello world

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

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包含一個用於執行離散事件模擬的模擬軟件包。 該仿真軟件包基於Simula的面向對象特性及其協程概念 [2] 
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分鐘的模擬時間。
參考資料