Simula

редактировать
Ранний объектно-ориентированный язык программирования
Simula
Simula - logo.svg
Парадигмы Мультипарадигма : процедурный, императивный, структурированный, объектно-ориентированный
СемействоАЛГОЛ
Разработано Оле-Йоханом Далем
Разработчик Кристен Найгаард
Впервые появилась1962; 58 лет назад (1962 г.)
Стабильный выпуск Simula 67, Simula I
Дисциплина ввода Статический, именительный падеж
Объем Лексический
Язык реализацииАЛГОЛ 60 (в первую очередь; некоторые компоненты Simscript )
OS Unix-like, Windows, z / OS, TOPS-10, MVS
Веб-сайтwww.simula67.info
Под влиянием
АЛГОЛ 60, Simscript
Под влиянием
Объектно-ориентированные языки программирования

Simula - это название двух языков моделирования языков программирования, Simula I и Simula 67, разработанных в 1960-х годах в Norwegian Вычислительный центр в Осло, авторы Оле-Йохан Даль и Кристен Найгаард. Синтаксически, это довольно точный надмножество из АЛГОЛ 60, также на которое повлиял дизайн Simscript.

Simula 67 представила объекты, классы, наследование и подклассы, виртуальные процедуры, сопрограммы и дискретные eve nt Simulation и функции сборки мусора. Также в производных от Simula были введены другие формы подтипов (помимо наследования подклассов).

Simula считается первым объектно-ориентированным языком программирования. Как следует из названия, первая версия Simula к 1962 году была разработана для моделирования ; Simula 67 была разработана как язык программирования общего назначения и обеспечивала основу для многих функций объектно-ориентированных языков сегодня.

Simula использовалась в широком диапазоне приложений, таких как моделирование проектов очень крупномасштабной интеграции (СБИС), моделирование процессов, коммуникационных протоколов, алгоритмы и другие приложения, такие как набор текста, компьютерная графика и образование. Влияние Simula часто недооценивается, и объекты типа Simula повторно реализуются в C ++, Object Pascal, Java, C# и многих других языках. Компьютерные ученые, такие как Бьярн Страуструп, создатель C ++, и Джеймс Гослинг, создатель Java, признали, что Simula оказала большое влияние.

Содержание
  • 1 История
  • 2 Пример кода
    • 2.1 Минимальная программа
    • 2.2 Классический Hello world
    • 2.3 Классы, подклассы и виртуальные процедуры
    • 2.4 Вызов по имени
    • 2.5 Моделирование
  • 3 См. Также
  • 4 Примечания
  • 5 Источники
  • 6 Дополнительная литература
  • 7 Внешние ссылки
История

Следующий отчет основан на историческом эссе Яна Руне Холмевика.

Кристен Найгаард начала писать на компьютере программы моделирования в 1957 году. Найгаард увидел необходимость в лучшем способе описания неоднородности и работы системы. Чтобы продолжить свои идеи о формальном компьютерном языке для описания системы, Найгаард понял, что ему нужен кто-то с более навыками компьютерного программирования, чем он имел. Оле-Йохан Даль присоединился к нему в его работе в январе 1962 года. Вскоре после этого было принято решение связать язык с АЛГОЛОМ 60. К маю 1962 года были определены основные концепции моделирования языка. Так родился SIMULA I, язык программирования специального назначения для моделирования дискретных систем событий.

Кристен Найгаард была приглашена посетить Eckert – Mauchly Computer Corporation в конце мая 1962 года в связи с маркетингом их нового компьютера UNIVAC 1107. Во время этого визита Найгаард представил идеи Simula Роберту Бемеру, директору по системному программированию в Univac. Бемер был большим поклонником АЛГОЛА и нашел проект Simula привлекательным. Бемер также был председателем сессии на второй международной конференции по обработке информации, организованной Международной федерацией обработки информации (IFIP). Он пригласил Найгаарда, который представил доклад «SIMULA - Расширение Алгола для описания сетей с дискретными событиями».

Норвежский вычислительный центр получил UNIVAC 1107 в августе 1963 года со значительной скидкой, на который Даль реализовал SIMULA I по контракту с UNIVAC. Реализация была основана на компиляторе UNIVAC ALGOL 60. К январю 1965 года SIMULA I полностью работала на UNIVAC 1107. В следующие несколько лет Даль и Найгаард потратили много времени на обучение Simula. Simula распространилась в нескольких странах по всему миру, а SIMULA I была позже реализована на других компьютерах, включая Burroughs B5500 и российский Ural-16.

В 1966 году C. А. Р. Хоар представил концепцию конструкции класса записи, которую Даль и Найгаард расширили концепцией префикса и других функций для удовлетворения своих требований к концепции обобщенного процесса. Даль и Найгаард представили свою статью об объявлениях класса и подкласса на Рабочей конференции IFIP по языкам моделирования в Осло, май 1967 года. paper стал первым формальным определением Simula 67. В июне 1967 года была проведена конференция по стандартизации языка и инициированию ряда реализаций. Даль предложил объединить тип и концепцию класса. Это привело к серьезным обсуждениям, и совет отклонил предложение. Simula 67 была официально стандартизирована на первом заседании Simula Standards Group (SSG) в феврале 1968 года.

Simula оказала влияние на разработку Smalltalk, а затем и объектно-ориентированного программирования. языков. Это также помогло вдохновить модель акторов параллельных вычислений, хотя Simula поддерживает только сопрограммы, а не истинный параллелизм.

В конце шестидесятых и начале семидесятых годов было четыре основных реализации Simula:

Эти реализации были перенесены на широкий спектр платформ. В TOPS-10 реализована концепция общедоступных, защищенных и закрытых переменных и процедур-членов, которая позже была интегрирована в Simula 87. Simula 87 - это последний стандарт, портированный на широкий спектр платформ. В основном существует четыре реализации:

  • Simula AS
  • Lund Simula
  • GNU Cim
  • Portable Simula Revisited

В ноябре 2001 г. Даль и Найгаард были награждены премией Медаль Джона фон Неймана IEEE от Института инженеров по электротехнике и электронике «За представление концепций, лежащих в основе объектно-ориентированного программирования, посредством разработки и реализации SIMULA 67». В апреле 2002 года они получили награду AM Turing Award от Association for Computing Machinery (ACM) со ссылкой: «За идеи, фундаментальные для появления объектно-ориентированного программирования, посредством их дизайн языков программирования Simula I и Simula 67 ». К сожалению, ни Даль, ни Найгаард не смогли попасть на лекцию ACM Turing Award, которая должна была быть прочитана на конференции OOPSLA в Сиэтле в ноябре 2002 г., поскольку они умерли в июне и августе того же года, соответственно.

Исследовательская лаборатория Simula - это исследовательский институт, названный в честь языка Simula, и Найгаард работал там по совместительству с момента открытия в 2001 году. Новое здание компьютерных наук в Университете Осло назван Домом Оле Йохана Даля в честь Даля, а главная аудитория - Симула.

Пример кода

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

Пустой компьютерный файл - это минимальная программа в Simula, измеренная размером исходный код. Он состоит только из одного; фиктивный оператор .

Однако минимальную программу более удобно представить в виде пустого блока:

BeginEnd ;

Она начинает выполнение и немедленно завершается. В языке отсутствует какое-либо значение , возвращаемое программой.

Классический Hello world

Пример программы Hello world в Simula:

BeginOutText ("Hello, World ! "); Outimage ; Конец ;

Simula без учета регистра.

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

Более реалистичный пример с использованием классов, подклассов и виртуальных процедур:

Begin Класс Глиф; Виртуальный : Процедура print IsПроцедура print ;; НачалоКонец ; Глиф Класс Char (c); Символ c; НачатьПроцедура печать; OutChar (c); Конец ; Глиф Класс Линия (элементы); Ref (Glyph) Массив элементов; НачатьПроцедура печать; НачатьЦелое число i; Для i: = 1 Шаг 1 До UpperBound (elements, 1) Do elements (i).print; OutImage; Конец ; Конец ; Ссылка (Глиф) rg; Ссылка (Глиф) Массив rgs (1: 4); ! Основная программа; rgs (1): - Новый символ ('A'); rgs (2): - Новый Char ('b'); rgs (3): - Новый Char ('b'); rgs (4): - Новый Char ('a'); rg: - Новая строка (rgs); rg.print; Конец ;

В приведенном выше примере есть один суперкласс (Glyph) с двумя подклассами (Charи Line). Существует одна виртуальная процедура с двумя реализациями. Выполнение начинается с выполнения основной программы. В Simula отсутствует концепция абстрактных классов, поскольку классы с чистыми виртуальными процедурами можно создать экземпляры. Это означает, что в приведенном выше примере могут быть созданы все классы. Однако вызов чистой виртуальной процедуры приведет к ошибке времени выполнения .

Вызов по имени

Simula поддерживает вызов по имени, поэтому Устройство Дженсена можно легко реализовать. Однако режим передачи по умолчанию для простого параметра - вызов по значению, в отличие от ALGOL, который использовал вызов по имени. Исходный код для устройства Jensen должен поэтому указывать вызов по имени для параметров при компиляции компилятором Simula.

Другим гораздо более простым примером является функция суммирования ∑ {\ displaystyle \ sum}\ sum , которая может быть реализована следующим образом:

Real Процедура Сигма (k, m, n, u); Имя k, u; Целое число k, m, n; Реальный u; BeginReal s; k: = m; Пока k <= n DoНачать s: = s + u; к: = к + 1; Конец ; Сигма: = s; End ;

В приведенном выше коде используется вызов по имени для управляющей переменной (k) и выражения (u). Это позволяет использовать в выражении управляющую переменную.

Обратите внимание, что стандарт Simula допускает определенные ограничения на управляющую переменную в для цикла. Поэтому приведенный выше код использует цикл while для максимальной переносимости.

следующее:

Z = ∑ i = 1 100 1 (i + a) 2 {\ displaystyle Z = \ sum _ {i = 1} ^ {100} {1 \ over (i + a) ^ {2}}}Z = \ sum _ {i = 1} ^ {100} {1 \ over (i + a) ^ {2}}

затем может быть реализовано следующим образом:

Z: = Sigma (i, 1, 100, 1 / (i + a) ** 2);

Simulation

Simula включает пакет Simulation для выполнения моделирования дискретных событий. Этот пакет моделирования основан на объектно-ориентированных функциях Simula и его концепции сопрограммы.

Сэм, Салли и Энди покупают одежду. Они должны жить в одной примерочной. Каждый из них просматривает магазин около 12 минут, а затем использует исключительно примерочную около трех минут, каждый следуя нормальному распределению. Моделирование их опыта в примерочной выглядит следующим образом:

Моделирование НачатьКласс FittingRoom; НачатьСсылка (Голова) дверь; Логическое inUse; Процедура запрос; Начать IfinUse ЗатемНачать Подождите (дверь); door.First.Out; Конец ; inUse: = Истина ; Конец ; Процедура отпуск; Начать inUse: = False ; Активировать дверь. Сначала; Конец ; дверь: - Новая Головка; Конец ; Процедура отчет (сообщение); Текст сообщение; Начать OutFix (Время, 2, 0); OutText (":" сообщение); OutImage; Конец ; Процесс Класс Человек (pname); Текст pname; НачатьПокаИстина DoНачать Удерживать (Нормальный (12, 4, u)); отчет (pname "запрашивает примерочную"); примерочная1.request; отчет (pname "зашел в примерочную"); Удерживать (Нормальный (3, 1, u)); примерочная1.leave; отчет (pname "покинул примерочную"); Конец ; Конец ; Целое число u; Ссылка (Примерочная) FittingRoom1; FittingRoom1: - New FittingRoom; АктивироватьНовый Человек («Сэм»); АктивироватьНовый Человек («Салли»); АктивироватьНовый Человек («Энди»); Удерживайте (100); Конец ;

Главный блок имеет префикс Simulationдля включения моделирования. Пакет моделирования можно использовать на любом блоке, и моделирование можно даже вложить при моделировании кого-либо, выполняющего моделирование.

Объект примерочной использует очередь (дверь) для получения доступа в примерочную. Когда кто-то запрашивает примерочную, и она уже используется, они должны ждать в этой очереди (Ждать (дверь)). Когда кто-то выходит из примерочной, первый (если есть) освобождается из очереди (Активировать door.first) и соответственно удаляется из дверной очереди (door.First.Выход).

Человек является подклассом Процесса, и его деятельность описывается с помощью удержания (время просмотра магазина и времени, проведенного в примерочной) и вызовов процедур в объекте примерочной для запроса и выход из примерочной.

Основная программа создает все объекты и активирует все объекты-личности, чтобы поместить их в очередь событий. Основная программа длится 100 минут смоделированного времени до завершения программы.

См. Также
Notes
Sources
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-06-08 02:11:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте