Modula-2

Ada

Языки, поддерживающие абстракцию данных

Object Pascal

Actor

Actor - это объектно-ориентированные язык и среда, основанные на Паскале и работающие под Microsoft Windows. Он соединяет систему управления динамической памятью и автоматическую сборку мусора. Actor был создан группой Whitewater Group. Он используется для создания отдельных прикладных задач для Windows, которые можно скомпоновать с существующими программами на Microsoft C.

Object Pascal - это объектно-ориентированное расширение Паскаля, разработанное Н. Виртом совместно с командой с фирмы Apple. Классы (типы) реализованы как расширение паскалевской структуры RECORD. В Object Pascal они могут содержать как поля данных, так и поля методов. Методы определяются как процедуры или функции Паскаля, определяемые по имени класса. Сообщения посылаются с помощью обычных конструкций Паскаля для определения поля.

Object Pascal использовался для внутренних разработок фирмы Apple. Библиотека классов Object Pascal составляет основу интегрированной системы разработки прикладных программ MacApp. Язык свободно распространяется [Schmucker 1986].

Раздаются возгласы, что ряд других языков также либо объектно-ориентированные, либо поддерживают объектно-ориентированные понятия. В этом разделе рассматриваются два языка, имеющие существенную поддержку программистов - Modula-2 и Ada, которые сравниваются с вышеприведенными объектно-ориентированными языками. В таблице С2.4 подведены итоги основных средств этих языков и основных коммерческих объектно-ориентированных языков.

Ada был создан в Министерстве Обороны США для использования во встроенных компьютерных системах. Его использование обязательно в государственных контрактах в некоторых областях как в США, так и в Великобритании. Благодаря этому такие системы являются естественными прикладными задачами для объектно-ориентированных понятий: значительные усилия были затрачены на доказательство того, что Ада поддерживает ООС.

Новые типы данных (классы) можно задать в языке Ада как пакеты. Пакет содержит как общую, так и частную информацию. Пользовательский интерфейс задан как спецификация пакета, в то время как реализация задается отдельно в теле пакета, предоставляя эффективный механизм инкапсуляции. Связывание происходит во время компиляции, когда явно проверяются типы всех данных. В пакете можно переопределять операторы, давая новый смысл традиционным операторам типа +. Ада не позволяет типам наследовать информацию или поведение от других типов, хотя есть возможность использовать разновидность наследования - обобщение (genericity) , позволяющее экспортировать ограниченное число частных типов и операций.

Ада может использоваться для разработки программ, основанных на объектах. Для проектов в военной и аэрокосмической областях другого выбора и нет. Пользователи, не ограниченные этими областями, могут с удовлетворением отметить, что их требования могут быть выполнены другим объектно-ориентированным языком типа Eiffel.

 

 

Таблица С2.4 Сравнение языков программирования
Язык Скрытие информации Классы Наследование Связывание Сборка мусора Инструментарий
Simula да да един. стат. нет есть
Smalltalk-80 да да един. динам. автом. полный
С++ да да един.* оба нет нет
Objective-C да да един.* оба нет есть
Eiffel да да оба оба нет есть
Ada да да нет стат. нет нет
Modula-2 да нет нет стат. нет нет
  * множественное наследование в стадии разработки

Modula-2, разработанная Н. Виртом, является прямым потомком языков Algol 60 и Pascal, и привлекает многих, обученных на традиции этих языков. Ее ключевое средство - принцип скрытия информации, заключающийся в отделении спецификации модуля от его реализации. Абстрактные типы данных могут быть определены как закрытые типы. Спецификация типа содержится в модуле с определением, который описывает тип данных и процедуры для доступа к нему. Программы, выполняющие эти процедуры, содержатся в модуле реализации. Как и в Аде, такое разделение служит в качестве механизма инкапсуляции. Однако Modula-2 более ограничивает, чем Ада, не разрешая ни переопределение, ни обобщение операций.

Появилось несколько статей, показывающих, как Modula-2 может быть использована для разработки объектно-ориентированных систем. Это требует существенной нагрузки на программиста, поскольку язык не поддерживает объектно-ориентированные средства, описанные в главе B1. Необходимость пользователей языков Algol-Pascal-Modula в средствах ООП могут быть удовлетворены, например, реализацией языка Modula-3, объектно- ориентированного потомка Modula-2, разработанного группой исследовательского центра фирм DEC и Olivetti в Калифорнии [Cardelli et al 1988].