Объектно-ориентированные языки програмирования
С++ отойдет от объектно-ориентированного сообщества: в 1988 ассоциацией
пользователей UNIX (Usenix) была созвана отдельная конференция по С++, а
также был создан новый журнал The C++ Report издателями журнала Journal of
Object-Oriented Programming.
Среда
С++ - это язык программирования, а не среда разработки программ типа
Smalltalk. Поэтому ему нужны средства поддержки работы программиста: сюда
входят расширения существующих средств языки Си (редакторы, отладчики) и
средства поддержки работы с объектами (окна просмотра классов). В свою
очередь, эти средства должны соединяться со средой программирования.
Быстрый рост рынка С++ предоставляет хорошие перспективы продавцам, имеющим
продукты для С++. К ним относятся, например, существующие продавцы
компиляторов и трансляторов С++. Один из интересных проектов в этой области
- соглашение между ParcPlace Systems и Glockenspiel о разработке Cynergy -
версии среды Smalltalk, поддерживающей программы на С++.
Поставщики
AT&T поставляет транслятор, обрабатывающий программу на С++ и
генерирующий исходный код Ansi C, который затем компилируется нормальным
образом. Транслятор пока еще остается продуктом AT&T без сопровождения.
Лицензию можно купить прямо на фирме. Кроме этого, транслятор перенесен на
разнообразные платформы фирмой Glockenspiel (Дублин). Несколько организаций
имеют подлицензии: Oasys для рабочих станций (Sun, Apollo), Guidelines и
Lifeboat для IBM PC.
Две другие фирмы, Zortech и Oregon Software, недавно выпустили
компиляторы С++. Они больше основаны на справочном руководстве [Stroustrup
1986], а не на исходных текстах, и не имеют лицензии от AT&T.
2.3.2. OBJECTIVE-C
Язык
Другим ведущим продавцом продуктов, основанных на Си, является
Stepstone, бывший PPI. Objective-C - это гибридный язык, состоящий из
подмножества Ansi C и основных положений Smalltalk-80. Тексты программ
могут содержать чистые операторы языка Си или объектно-ориентированные
конструкции. Объекты задаются новым типом данных, называемым id. Сообщения
посылаются объектам с помощью модифицированной версии синтаксиса языка
Smalltalk. Новые объекты создаются посылкой сообщения new специальному типу
объекта, называемому объектом-производителем. Например, новый экземпляр
класса Pen создается с помощью следующего текста:
extern id Pen;
id aPen;
aPen = [Pen new];
Objective-C не поддерживает множественное наследование и автоматическую
сборку мусора, однако, тестовая версия последней создана и протестирована
фирмой Stepstone [Cox 1986].
Компилятор Objective-C генерирует исходный текст на языке Си. По умолчанию
используется динамическое связывание методов, однако, для повышения
надежности и эффективности можно выбрать статическое связывание.
Среда
Кроме компилятора, фирма Stepstone предоставляет (необязательно)
интерактивную среду программирования Objective-C Interpreter. Она
поддерживает целый ряд бычных действий программиста: написание программ,
компиляцию, связывание, тестирование и отладку. Она включает команды для
вычисления выражений, вывода данных, установки контрольных точек, поиска
каталогов файла, редактирования командного файла, проверки объектов, вывода
иерархии классов и наследуемых методов.
Также предоставляется две библиотеки классов для поддержки основного и
графического пользовательского интерфейса.
2.3.3 ДРУГИЕ ПРОДУКТЫ, ОСНОВАННЫЕ НА СИ
C-talk
C-talk - это запатентованный язык для MS-DOS и Apple Macintosh, созданный
отделом программных продуктов фирмы CNS Inc, специализирующейся на
продуктах диагностики для медицины. Синтаксис языка основан на Си с
дополнительными конструкциями, поддерживающими классы и методы,
наследование и посылку сообщений. Предоставляется набор основных классов
для структур данных типа Buffer, Stream и ByteArray. Он поставляется в виде
пакета, содержащего препроцессор для преобразования файлов на C-talk в
исходные тексты на Си, и среды программирования, называемой C-talk Browser,
основанной на оконном интерфейсе. Существуют средства редактирования файлов
и просмотра классов и методов.
Complete C
Complete Computer Corporation, New York работает над созданием объектно -
ориентированной среды разработки программ, называемой Complete C. Она
состоит из прекомпилятора, генерирующего стандартный Ansi С из объектно-
ориентированного Си, набора инструментов (отладчика, компоновщика,
генератора документов) и библиотеки основных классов. Complete C работает
под MS-DOS, OS/2 и Unix.
2.4. ПРОДУКТЫ, ОСНОВАННЫЕ НА ЛИСПЕ
Объектно-ориентированные расширения Лиспа предназначены в основном для
сообщества исследователей искусственного интеллекта. Некоторые из этих
расширений были первоначально созданы в университетах. Лидерами являются
две самостоятельные версии: New Flavors, разработанный в Symbolics, и
CommonLoops, разработанный в Xerox PARC. Они составили базу для Common Lisp
Object System (CLOS).
Отличительной особенностью некоторых систем, основанных на Лиспе, является
способ управления взаимодействием объектов. В отличие от традиционных
вызовов функций, здесь первый аргумент соответствует объекту-приемнику.
Фактически вызываемая функция зависит от вида объекта, обозначенного этим
первым аргументом, в то время как имя функции эквивалентно имени сообщения.
CommonLoops
Loops - это многопарадигмовая система для обработки знаний и
программирования, разработанная в Xerox PARC. В представлении знаний
используется объектно-ориентированный подход. поддерживающий классы и
наследование. Объектно - ориентированная часть Loops позднее была оформлена
как пакет в составе продукта Common Lisp, более известного как CommonLoops.
Характеристики языка:
частичная интеграция системы типа Common Lisp с классами CommonLoops;
использование синтаксиса обобщенных функций вместо посылки сообщений;
способность определять методы, различающиеся не только по первому аргументу
( так называемые мультиметоды);
поддержка реализации других объектно-ориентированных языков с помощью ядра
метаклассов, набора предопределенных классов, составляющих оставшуюся часть
системы.
Опытная реализация, названная Portable CommonLisp (PCL), распространена для
небольшого сообщества пользователей. Она используется в Hewlett-Packard
Laboratories для реализации другого объектно - ориентированного языка -
CommonObjects [Kempf, Harris, D'Souza and Snyder 1987].
New Flavors
Flavors - это расширение MacLisp/ZetaLisp. Это система посылки сообщений,
используемая в коммерческих целях фирмами Symbolics и TI Explorers. New
Flavors - это производная от Flavors, совместимая с ней, но использующая
синтаксис обобщенных функций.
Common Lisp Object System (CLOS)
В 1986 г. группы с фирм Xerox PARC и Symbolics, а также группа с фирмы
Lucid, начала работу над проектом спецификации для CLOS, представленный на
рассмотрение технической рабочей группе Ansi, X3J13. Эта спецификация
одобрена для вероятного принятия в качестве части развивающегося стандарта
Common Lisp. Цели CLOS: использование набора уровней для независимых друг
от друга действий языка программирования; сделать как можно больше в рамках
первого класса Object System (объект первый класс - это объект, который
можно явно создать и работать с ним); желание избавиться от сложного
поведения для упрощения понятий и их объяснений; сделать спецификацию языка
как можно более точной [DeMichiel and Gabriel 1987]. Основные средства
CLOS:
три слоя языка: интерфейс для объектно-ориентированного программирования,
функциональный интерфейс для Object System, и инструменты, позволяющие
программисту создавать свои собственные объектно-ориентированные языки;
использование обобщенных функций вместо посылки сообщений; при таком
подходе объекты и функции являются анонимными объектами: ни один из них не
является собственностью другого;
поддержка множественного наследования: список старшинства классов
используется для решения потенциальных конфликтов между наследуемой
структурой и поведением; средство комбинации методов для получения значений
обобщенной функции - задание способа комбинации методов, применимых к
набору аргументов (в результате множественного наследования);
гарантия, что обобщенные функции и классы являются объектами первого класса
(т.е. они могут храниться в любом месте, где разрешено хранение обобщенных
объектов).
Delphi Common Lisp
Delphi - это итальянская фирма, считающая себя первой в реализации
стандарта для CLOS. Последний выступает как часть продукта Delphi Common
Lisp (DCL), основанного на расширенной версии Kyoto Common Lisp.
Разработано три расширения CLOS:
поддержка традиционных систем;
поддержка постоянной памяти;
поддержка параллельности.
Allegro Common Lisp
Allegro CL - это реализация Common Lisp, разработанная и выставленная на
рынок фирмой Franz Inc на широком наборе аппаратуры. В настоящее время он
включает объектно-ориентированные расширения для поддержки Flavors и
Portable CommonLoops. Поддержка стандарта CLOS буде реализована как только
он станет доступным.
ExperCommon Lisp
ExperTelligence разрабатывает и выставляет на рынок объектно -
ориентированное расширение ExperLisp для Macintosh. Поддерживает Macintosh
Toolbox и MacApp.
2.5. EIFFEL
Язык
Eiffel - это запатентованный язык, разработанный и продаваемый фирмой
Interactive Software Engineering. Его разработка велась под влиянием
объектно-ориентированных понятий языка Симула, объединенных с синтаксисом
языка Ада и современными методами технологии программирования. Кроме
поддержки классов и наследования, Eiffel вводит ряд новых средств:
утверждения для выражения формальных свойств классов: это могут быть
preconditions, postconditions или invariants;
обобщенные параметры для представления типов в объявлениях классов;
средство rename для поддержки множественного наследования разрешением
конфликтов имен в случае, когда у класса более одного родителя;
средство переопределения в нижестоящих классах, позволяющее осуществлять
динамическое связывание вопреки статической проверки типов;
отложенные программы, реализация которых находится только в нижних классах.
Размещение и освобождение памяти осуществляется системой времени
выполнения, включающей пошаговый сборщик мусора. Есть интерфейс с другими
языками с помощью понятия external, выдающего список каждой внешней
подпрограммы, используемой в программе.
Среда
Система Eiffel состоит из компилятора и набора инструментальных средств.
Они содержат средства автоматической конфигурации, отладки, проверки
утверждения во время работы программы, документирования, оптимизирующий
постпроцессор и библиотеку базовых классов для общих структур данных
(списков, деревьев, стеков, хэш-таблиц). Постпроцессор может генерировать
отдельный пакет на Си, который можно использовать для поставки на системы,
не поддерживающие Eiffel.
2.6. ЯЗЫКИ, ОСНОВАННЫЕ НА ПАСКАЛЕ
2.6.1. ACTOR
Actor - это объектно-ориентированные язык и среда, основанные на Паскале и
работающие под Microsoft Windows. Он соединяет систему управления
динамической памятью и автоматическую сборку мусора. Actor был создан
группой Whitewater Group. Он используется для создания отдельных прикладных
задач для Windows, которые можно скомпоновать с существующими программами
на Microsoft C.
2.6.2. OBJECT PASCAL
Object Pascal - это объектно-ориентированное расширение Паскаля,
разработанное Н. Виртом совместно с командой с фирмы Apple. Классы (типы)
реализованы как расширение паскалевской структуры RECORD. В Object Pascal
они могут содержать как поля данных, так и поля методов. Методы
определяются как процедуры или функции Паскаля, определяемые по имени
класса. Сообщения посылаются с помощью обычных конструкций Паскаля для
определения поля.
Object Pascal использовался для внутренних разработок фирмы Apple.
Библиотека классов Object Pascal составляет основу интегрированной системы
разработки прикладных программ MacApp. Язык свободно распространяется
[Schmucker 1986].
2.7. ЯЗЫКИ, ПОДДЕРЖИВАЮЩИЕ АБСТРАКЦИЮ ДАННЫХ
Раздаются возгласы, что ряд других языков также либо объектно -
ориентированные, либо поддерживают объектно-ориентированные понятия. В этом
разделе рассматриваются два языка, имеющие существенную поддержку
программистов - Modula-2 и Ada, которые сравниваются с вышеприведенными
объектно-ориентированными языками. В таблице С2.4 подведены итоги основных
средств этих языков и основных коммерческих объектно-ориентированных
языков.
2.7.1. ADA
Ada был создан в Министерстве Обороны США для использования во встроенных
компьютерных системах. Его использование обязательно в государственных
контрактах в некоторых областях как в США, так и в Великобритании.
Благодаря этому такие системы являются естественными прикладными задачами
для объектно - риентированных понятий: значительные усилия были затрачены
на доказательство того, что Ада поддерживает ООС.
Новые типы данных (классы) можно задать в языке Ада как пакеты. Пакет
содержит как общую, так и частную информацию. Пользовательский интерфейс
задан как спецификация пакета, в то время как реализация задается отдельно
в теле пакета, предоставляя эффективный механизм инкапсуляции. Связывание
происходит во время компиляции, когда явно проверяются типы всех данных. В
пакете можно переопределять операторы, давая новый смысл традиционным
операторам типа +. Ада не позволяет типам наследовать информацию или
поведение от других типов, хотя есть возможность использовать разновидность
наследования - обобщение (genericity), позволяющее экспортировать
ограниченное число частных типов и операций.
Ада может использоваться для разработки программ, основанных на объектах.
Для проектов в военной и аэрокосмической областях другого выбора и нет.
Пользователи, не ограниченные этими областями, могут с удовлетворением
отметить, что их требования могут быть выполнены другим объектно-
ориентированным языком типа Eiffel.
Таблица С2.4 Сравнение языков программирования
Язык |Скрытие
информации |Классы |Наследо-вание |Связы-вание |Сборка мусора |Инстру-
ментарий | |Simula |да |да |един. |стат. |нет |есть | |Smalltalk-80 |да
|да |един. |динам. |автом. |полный | |С++ |да |да |един.* |оба |нет |нет |
|Objective-C |да |да |един.* |оба |нет |есть | |Eiffel |да |да |оба |оба
|нет |есть | |Ada |да |да |нет |стат. |нет |нет | |Modula-2 |да |нет
|нет |стат. |нет |нет | |
* множественное наследование в стадии разработки
2.7.2. 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].
ЗАКЛЮЧЕНИЕ
Ведущие продавцы ПО для персоналок являются активными пользователями
объектно-ориентированных языков и средств. Microsoft считается создателем
объектно-ориентированных иерархий классов для Word и Excel.
Позиция Microsoft стала ясна после нескольких публикаций и интервью.
Компания поддержала объектно-ориентированные расширения существующих
языков, включая Basic. Bill Gates также поразил всех заявлением о том, что
он не видит будущего за введением новых объектно-ориентированных языков
после 1988 г., но ОС будущего должны иметь объектно-ориентированную
поддержку: "Вы не поднимите всю глубину прикладных задач, работая только с
ними, до тех пор, пока мы не сделаем это внутри ОС" [Byte, 1988]. Это будет
достигнуто дополнительными возможностями OS/2.
Практически все объектно-ориентированные языки программирования являются
развивающимися языками, их стандарты регулярно уточняются и расширяются.
Следствием этого развития являются неизбежные различия во входных языках
компиляторов различных систем программирования. Наиболее распространенными
в настоящее время являются системы программирования Microsoft C++ ,
Microsoft Visual C++ и системы программирования фирмы Borland
International.
Список литературы
А. Г. Иванов «Объектно-ориентированные системы: Состояние и перспективы»,
Москва 1992 г.
Подбельский В.В. Язык С++. – М.:Финансы и статистика, 1996.
Объектно-ориентированные языки программирования,
[http://www.citforum.ru/win/programming/oop_rsis/glava1_2.shtml]
Объектно-ориентированное программирование,
(http://www.object.newmail.ru/index.html)
Страницы: 1, 2, 3
|