Симула

Simula 67
Изображение логотипа
Семантика объектно-ориентированный
Класс языка язык программирования, simulation language[вд] и объектно-ориентированный
Тип исполнения компиляция
Появился в 1967
Автор Кристен Нюгор и Оле-Йохан Даль
Разработчик Кристен Нюгорд
Выпуск
Система типов статическая
Основные реализации Cim
Испытал влияние Algol-60
Повлиял на C++, BETA
ОС Unix-подобная операционная система, Windows, z/OS, TOPS-10 и MVS
Логотип Викисклада Медиафайлы на Викискладе

Си́мула-67 (Simula 67) — язык программирования общего назначения, разработанный в конце 1960-х годов сотрудниками Норвежского вычислительного центра (Осло) Кристеном Нюгором и Оле-Йоханом Далем для моделирования сложных систем.

Симула традиционно не считается объектно-ориентированным языком в каноническом смысле этого слова, в частности, создатель языка Smalltalk Алан Кэй имел в виду под этим термином семантику акторов, впервые реализованную в языке Плэнер Карла Хьюитта, а не расширение алголоподобных языков «объектной» нотацией[2].

Стал первым языком со встроенной поддержкой основных синтаксических соглашений, принятых в современных языках объектно-ориентированного программирования. Считается, что язык в значительной степени опередил время, и программисты 1960-х годов оказались не готовы воспринять ценности языка, в связи с чем он не выдержал конкуренции с другими языками программирования. Прохладному отношению к языку способствовало и то обстоятельство, что его реализация была весьма неэффективна, не в последнюю очередь из-за использования сборки мусора.

Тем не менее, этот язык активно использовался в образовательном процессе в высших учебных заведениях, особенно в Скандинавии; о влиянии Симулы на разработку им C++ отмечал его автор — Страуструп (в том числе в книге «Дизайн и эволюция C++»).

В современной терминологии язык можно охарактеризовать как объектное расширение Алгола 60. Конструкции языка очень сходны с аналогичными в современных объектно-ориентированных языках.

Минимальная программа

[править | править код]
Begin End; 

Программа «Hello, World»:

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

Классы, подклассы и виртуальные процедуры

[править | править код]
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; 
Real Procedure Sigma (k, m, n, u);    Name k, u;    Integer k, m, n; Real u; Begin    Real s;    k:= m;    While k <= n Do Begin s:= s + u; k:= k + 1; End;    Sigma:= s; End; 
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; 

Примечания

[править | править код]
  1. https://portablesimula.github.io/github.io/
  2. Alan Kay's Definition Of Object Oriented Programming (англ.). Дата обращения: 17 июля 2024. Архивировано 26 января 2018 года. «I invented the term object-oriented, and I can tell you that C++ wasn’t what I had in mind»