ภาษาซิมูลา

ภาษาซิมูลา (Simula) เป็นชื่อเรียกรวมของภาษาโปรแกรมคอมพิวเตอร์ 2 ภาษาคือ ภาษาซิมูลา 1 (Simula 1) และภาษาซิมูลา 67 (Simula 67) ภาษาโปรแกรมดังกล่าวนี้ได้เริ่มพัฒนาขึ้นประมาณปี พ.ศ. 2503 เป็นต้นมาที่  "ศูนย์คอมพิวเตอร์นอร์เวย์"  (Norwegian Computing Center) ที่นครออสโลโดย โอล-โยฮาน ดาห์ล และ คริสเตน ไนกาอาร์ด ในเชิงวากยสัมพันธ์ยังนับได้ว่าเป็นชุดภาษาโปรแกรมชุด "อัลกอล 60" (Algol 60) ที่เชื่อถือได้มากที่สุดอยู่

ภาษาซิมูลา 67 แนะให้ใช้วัตถุหรืออ็อบเจกต์ คลาส (class) ซับคลาส (subclasses) เวอร์ชวลเมธอด (virtual method) โครูทีน (coroutine) การกวาดล้างข้อมูลขยะ (garbage collection) และเหตุการณ์จำลองไม่ต่อเนื่อง (discrete event simulation)

ซึ่งซิมูลาได้รับการยอมรับว่าเป็นการเขียนภาษาโปรแกรมเชิงอ็อบเจกต์รุ่นแรกสุด แม้บางครั้งแบบจำลองอ็อบเจกต์อาจไม่สมบูรณ์ ดังที่ชื่อของมันบ่งบอกเป็นนัยอยู่ โปรแกรมซิมูลาได้แรกเริ่มออกแบบมาก็เพื่อการจำลองซึ่งก็ได้มีการใช้เนื้อหาของมันมาเป็นพื้นฐาน หรือกรอบงานสำหรับการออกแบบภาษาโปรแกรมเชิงอ็อบเจกต์ทั้งหลายที่ใช้อยู่ในปัจจุบัน

แม้ในปัจจุบันโปรแกรมซิมูลายังมีการนำมาใช้อยู่อย่างกว้างขวาง เช่นการจำลองการออกแบบ VLSI โปรแกรมกระบวนการ (processes) โพรโทคอล ภาษาขั้นตอนวิธี และการประยุกต์อื่นๆ เช่นการเรียงพิมพ์ เรขนิเทศคอมพิวเตอร์และด้านการศึกษา  เนื่องจากอ็อบเจกต์เชิงซิมูลาได้ถุกนำมาประยุกต์ซ้ำใน ภาษา C++ อิทธิพลของซิมูลาจึงได้รับการกล่าวถึงความสำคัญน้อยกว่าความเป็นจริง

ประวัติ

โค้ดอย่างง่าย

โปรแกรมอย่างน้อยที่สุด 
โปรแกรมอย่างน้อยที่สุด(มินิมัล)ของSimula คือไฟล์ว่างเปล่า ซึ่งมีองค์ประกอบเพียง ; (ดัมมี่สเตทเมนท์) เพียงอย่างเดียว.
แต่โปรแกรมอย่างน้อยที่สุดก็มักจะเขียนเป็นบล็อกว่างเปล่าตามความนิยมด้วยเช่นกัน

 Begin
 End;

โปรแกรมนี้เริ่มรันและจบลงทันที. โดยในภาษาSimulaจะไม่มีการรีเทิร์นค่าเมื่อจบโปรแกรม.

คลาสสิกเฮลโลเวิลด์ 
โปรแกรมภาษาSimulaแบ่งแยกตัวอักษรเล็กและใหญ่(เคสเซนสิทีฟ) ตัวอย่างต่อไปนี้คือโปรแกรมเฮลโลเวิลด์ในภาษาSimula

 Begin
   OutText ("Hello World!");
   Outimage;
 End;

ชั้น, ชั้นย่อย, และวิธีการเสมือน 

A more realistic example with use of classes, subclasses and virtual methods:

 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;

อ้างอิง 
 Compiling Simula  Early history of the development of Simula by Jan Rune Holmevik
 IBM System 360/370 Compiler and Historical Documentation  The Simula Standard and other historical documentation by Peter Sylvester

ดูเพิ่ม 
 การเขียนโปรแกรมเชิงวัตถุ

แหล่งข้อมูลอื่น 
 Introduction to OOP in Simula - By J.Sklenar, based on the 1997 seminar "30 Years of Object Oriented Programming (OOP)" at the U. of Malta
 How Object-Oriented Programming Started  - By Dahl and Nygaard, abbrev. version of an encyclopedia article; on Nygaards home page
 Simula at the University of Montreal Includes tutorials, documentation, and links in English and in French
 An Introduction to Programming in Simula  A textbook by Rob Pooley now available as HTML

ภาษาโปรแกรมเชิงวัตถุ
ภาษาโปรแกรมแบบคลาส
ภาษาโปรแกรมเพื่อการจำลอง