ภาษาซิมูลา

**ภาษาซิมูลา** (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

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