
- •1.3.3. Классы
- •1.3.4. Возможность применения в специальных областях
- •2.1. Синтаксис
- •2.2. Семантика ,; V-
- •2.2.1. Подклассы
- •2.2.2. Сочленение . -
- •2.2.3. Виртуальные величины
- •4.3.2.2. Генераторы объектов ,
- •4.3.2.3. Локальный объект
- •4.3.2.4. Оперативная квалификация «
- •7. Дистанционное обращение
- •7.1.2. Семантика
- •10.8.2. Семантика
- •11.3.2. Семантика
- •1 12.1. Последовательности псевдослучайных чисел
- •14.2.1.2. Семантика-
СПЕЦИАЛИЗИРОВАННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ
До сих пор вычислительная машина была мощным, vho в то же бремя пугающим многих инструментом. Это положе-' ние должно со временем измениться, и вычислительная ма-'шина станет делом обычным. Все больше людей будут учиться «разговаривать на ты» с машинами и получать от них* информацию, которая им необходима в сфере их про фессиональной деятельности, и, таким образом, расширять свои производственные и творческие возможности. А необхо димым условием для этого является уменьшение требований ■к человеку, т. е. облегчение и упрощение способов * его об щения с машиной. ■ .. ; .
В настоящее время общение с машиной для неспециалиста облегчается в значительной мере за счет так называемых «пакетов применения», охватывающих различные области знания и применяемых методов. Но эти «пакеты», вообще говоря, не являются достаточно гибкими, области их применения трудно расширять и для их использования также нередко требуется помощь специалиста по программированию.
Будущее, по-видимому, принадлежит «специализированным языкам», которые будут, по всей вероятности, предельно специализированными. Такие языки могут содержать основ-1 ные понятия и методы, связанные с данной областью. Они позволят пользователю формулировать конкретные задачи на основе его предшествующего опыта и знаний. В то же время необходимо, чтобы такие языки были способны к расширению в том смысле, что все новое в данной области исследования могло бы легко включаться в язык самими пользователями^
Потребность в специализированных языках лишь кажущимся образом противоречит желанию иметь универсальный язык программирования вместо множества различных языков, существующих в настоящее время. Задача состоит в теш, чтобы разработать такой универсальный язык прогр'амщШ-вания, который служил бы базой для построения спещЙДЙ-зированных языков. Такой язык должен легко приспосабливаться для применения в специальных областях путем создания на его базе составных понятий и конструкций, которые служили бы «строительными блоками» при программировании в специальной области.
■ Если сделать универсальный язык высоко стандартизированным и реализовать его на машинах многих различных типов, то и специализированные языки, построенные на его основе, окажутся легко переносимыми с одной машины на другую. Кроме того, это будет сдерживать нынешний быстрый рост затрат на разработку систем математического обеспечения.
1.3. ОСНОВНЫЕ ХАРАКТЕРИСТИКИ ЯЗЫКА СИМУЛА-67
1.3.1. Алгоритмические возможности
• Язык СИМУЛА-67 содержит в качестве своего подмножества почти все средства универсального алгоритмического языка АЛГОЛ-60. Основанием для выбора языка АЛГОЛ-60 в качестве исходной базы было то, что основная структура этого языка допускает его расширение. Было бы непрактичным и неудобным положить в основу языка СИМУЛА-67 какой-нибудь новый алгоритмический язык, в то время как АЛГОЛ-60 уже имеет широкий круг пользователей, главным образом в-Европе и Советском Союзе.
1.3.2. Разложимость
При работе с задачами и системами, состоящими из большого количества элементов, возможность разложения на составные части приобретает первостепенное значение. Внимание человека должно сосредотачиваться; чтобы мыслить точно и связно, необходимо по возможности сокращать количество 'одновременно охватываемых понятий. Разлагая большую задачу на части, можно получить задачи-компоненты с таким небольшим количеством деталей, чтоб каждую из этих задач можно было обдумывать и анализировать в целом. Разложение на составные части абсолютно необходимо, если в анализе и программировании задачи принимает участие несколько человек. -
Фундаментальным механизмом для разложения на части в языке АЛГОЛ-60 является понятие блока. Пока дело касается лишь локальных величин, блок совершенно не зави-■сит от остальной части программы. Принцип локализации
позволяет любое обращение к локальной величине понимать правильно независимо от окружения данного блока, .
Понятие блока соответствует интуитивному понятию «подзадачи» или «подалгоритма», которое является удобной единицей разложения при решении задач обычных типов. . Блок является формальным описанием («образцом») некоторой структуры данных и связанных с ней алгоритмов и действий. Когда блок исполняется, порождается динамический «экземпляр» этого блока. В машине экземпляр блока может осуществляться в виде области памяти, содержащей необходимую динамическую информацию о блоке и место для хранения значений переменных, локализованных в этом блоке.
Экземпляр блоки можно представлять как буквальную копию его формального описания, в которой локальные переменные обозначают участки памяти, выделенной данному экземпляру блока. Все внутренние блоки некоторого данного экземпляра блока тоже являются «образцами», в которых вхождения нелокальных идентификаторов, однако, обозначают величины, локализованные в текстуально объемлющих экземплярах блоков. Такое «связывание» нелокальных идентификаторов внутреннего блока остается действительным для любого последующего динамического экземпляра этого внутреннего блока.
Понятие экземпляра блока подразумевает возможность порождать несколько различных экземпляров одного и того же блока, которые могут сосуществовать и взаимодействовать, как, например, экземпляры рекурсивной процедуры. Это в свою очередь позволяет понимать блок как «класс объектов», каждый из которых является динамическим экземпляром этого блока и поэтому следует одному и тому же образцу.
Расширенное понятие блока вводится в язык СИМУЛА-67 через декларации «класса» и соответствующие механизмы взаимодействия, такие, как «ссылки на объекты» (указатели), «дистанционные обращения», «квазипараллельное исполнение» и «сочленение» блоков.
В то время как исполнение программы на АЛГОЛЕ-60 сопровождается образованием последовательности динамически вложенных друг в друга экземпляров блоков, при исполнении программы на языке СИМУЛА-67 экземпляры блоков могут образовывать произвольные списочные структуры. Механизмы взаимодействия, введенные в язык, служат для расширения силы понятия блока как средства разложения и разбиения на классы*
1.3.3. Классы
w M ч
Центральным новым понятием языка СИМУЛА-67 является «объект». Объект — это экземпляр блока, имеющий свои собственные локальные данные и действия1), описанные в «декларации класса». Декларация класса определяет образец программы (т. е. ее данные и действия), поэтому об объектах, следующих этому образцу, говорят, что «они принадлежат к одному и тому же классу».
Если в декларации класса не указано никаких действий вовсе, то такая декларация определяет просто класс структур данных.
Пример:
class заказ (номер); integer номер; •
begin integer количество, время прибытия; real время, обработки; end;
: Новый объект, принадлежащий классу заказ, порождается выражением вида
new заказ (103);
Посредством таких выражений можно создать столько заказов, сколько требуется.
Потребность манипулировать с объектами и связывать их друг с другом заставляет ввести в язык средства обработки списков (как описано ниже).
Класс можно использовать в качестве «префикса» к декларации другого класса; тем самым свойства, заданные префиксом, будут внесены в объекты, задаваемые новой декларацией класса.
Примеры:
заказ class групповой заказ;
begin integer размер партии; real время установки; end ; заказ class отдельный заказ;
begin real время установки, время окончания, вес; end ; отдельный заказ class плита ;
begin real длина, ширина; end;
Объекты, принадлежащие к подклассам групповой заказ, отдельный заказ и плита, имеют данные, определенные для объекта заказ, плюс дополнительные данные, объявленные
!
)
Декларация класса определяет правило
действий всех- объектов, принадлежащих
этому классу. Каждый объект может
«совершать» индивидуальные действия
в области, определенной декларацией
класса. Поэтому объект можно рассматривать
как самостоятельную программу, присущую
этому объекту. — Прим. перев.
в различных объявлениях классов с префиксами. Например, объекты, принадлежащие к классу плита, будут состоять из следующих элементов информации: номер, количество, вре мя прибытия, время обработки, время установки, время окон чания, вес, длина, ширина. ' ■'
Если в' декларации класса описаны какие-либо действия, то все объекты, принадлежащие этому классу, могут испол нять действия по заданному таким образом образцу. Все дей ствия, принадлежащие одному объекту, могут быть исполнены последовательно друг за другом (как для процедуры), но имеется и другая возможность, когда действия, принадлежа щие одному объекту, исполняются как последовательность отдельных подпоследовательностей, называемых «активными фазами». Между двумя последовательными активными фа-. зами одного объекта может иметь место любое количество активных фаз других объектов. ,... '( ■
Общая база языка СИМУЛА-67 содержит элементарные ь оператора, необходимые для того, чтобы организовать исполнение всей программы в виде последовательности активных фаз объектов. Однако в случае некоторых специальных применений пользователь должен иметь в своем распоряжении удобные средства для специальной (т. е. соответствующей конкретной задаче) организации последовательности выполнения программы.