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].