SoftCraft
разноликое программирование

Top.Mail.Ru

Применение обобщенных записей в процедурно-параметрическом языке программирования


[Возврат на основную страницу раздела]


© 2007 г. Легалов Игорь Александрович

Статья первоначально опубликована в журнале "Научный вестник НГТУ" и имеет следующие выходные данные:
Легалов И. А. Применение обобщенных записей в процедурно-параметрическом языке программирования. / И.А. Легалов // Научный вестник НГТУ. – 2007. – № 3 (28). – С. 25-38.

Полностью материал доступен в формате pdf (~227 кб)

Аннотация

Рассматривается применение обобщенных записей вместо процедурно-параметрических обобщений в рамках процедурно-параметрической парадигмы программирования. Обобщенная запись использует как основу обычную запись, расширяясь на конце процедурно-параметрическим обобщением. Это повышает эффективность создания новых типов данных и обеспечивает более гибкое построение эволюционно расширяемых программ.

Преамбула

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

Наличие инструментальной поддержки эволюционной разработки во многом способствовало популярности объектно-ориентированного программирования (ООП). В рамках ООП были предложены паттерны [1], обеспечивающие гибкое наращивание программы, за счет динамического полиморфизма, поддерживаемого в современных объектно-ориентированных (ОО) языках сочетанием виртуализации и наследования. Вместе с тем следует отметить, что безболезненное расширение кода в рамках ООП имеет определенные ограничения. В частности, невозможно прямое расширение мультиметодов. Предлагаемые для этого решения [2-4] в основном ведут к введению дополнительных конструктивов и алгоритмов, в которых, чаще всего, объектно-ориентированный стиль смешивается с процедурным.

Во многом эти проблемы ОО подхода обусловлены тем, что мультиметод в большей степени является внешней процедурой, поддерживающей множественный динамический полиморфизм, чем методом, размещаемым внутри класса, обеспечивающего только одиночный динамический полиморфизм. Не спасает положение и использование параметрического программирования, реализуемого, например, в языке C++ [5], посредством шаблонов. Шаблоны поддерживает только статический полиморфизм, который должен быть полностью определен во время компиляции, и не обеспечивают динамического связывания данных в ходе выполнения программы. Следует отметить, что множественный динамический полиморфизм был реализован в языке программирования CLOS [6]. Однако эта реализация оказалась излишне громоздкой, что не привело к ее заимствованию в других языках, в частности, в C++ [7].

Для повышения эффективности инструментальной поддержки множественного динамического полиморфизма была предложена процедурно-параметрическая парадигма [8], расширяющая возможности процедурного подхода в области эволюционного программирования. Ее использование базируется на параметрическом механизме формирования отношений между данными и обрабатывающими их процедурами, который может быть реализован различными способами [9]. Это обеспечивает эволюционную разработку как данных, так процедур и поддерживает механизм строгой типизации, присущий процедурным языкам. Для апробации парадигмы, на базе языка программирования Оберон-2, был разработан язык О2М [10], использование которого позволило продемонстрировать возможности процедурно-параметрического программирования (ППП) [11].

Спецификой ППП является возможность гибкого изменения состава параметрических обобщений – типов данных, объединяющих в единую категорию множество альтернативных понятий. Обобщения можно создавать как на основе уже существующих понятий, так и безболезненно расширять их за счет включения новых понятий в этой же или других единицах компиляции. Включаемые понятия отличаются признаками и образуют специализации, а существующая инструментальная поддержка обеспечивает ранжирование этих специализаций внутри обобщения, сопоставляя с каждым из них локальный индекс.

Обобщенные параметрические процедуры используют параметрические обобщения в качестве специальных формальных параметров. Множественный полиморфизм обеспечивается за счет использования в качестве параметров нескольких обобщений. При вызове такой процедуры в качестве фактических параметров осуществляется подстановка конкретной комбинации специализаций, признаки которых однозначно определяют алгоритм их обработки. Это позволяет сформировать для каждой из комбинаций специализаций отдельную процедуру – обработчик специализаций. Механизм инструментальной поддержки ППП обеспечивает независимое написание обработчиков специализаций, их добавление при расширении обобщений, контролирует наличие всех требуемых обработчиков. Выполнение указанных функций осуществляется во время компиляции модулей программы и их компоновки. Возможно также окончательное формирование параметрических отношений и во время выполнения. Добавление новых специализаций и их обработчиков может осуществляться в отдельных единицах компиляции, обеспечивая тем самым гибкое эволюционное расширение программы как по данным, так и процедурам.

Вместе с тем, использование «чистых» параметрических обобщений, рассмотренных в работах [8-11] не вполне удобно для программирования, так как в ряде случаев требует использования дополнительных промежуточных структур данных. Для повышения эффективности процедурно-параметрического программирования в работе предлагаются обобщенные записи, в состав которых включается параметрическое обобщение. Рассматриваются особенности реализации и использования обобщенных записей.

Основные разделы

  1. Введение
  2. Специфика обобщенных записей
  3. Реализация обобщенных записей
  4. Основные операции над обобщенными записями
  5. Использование обобщающих параметрических процедур
  6. Дополнительные возможности
  7. Отличие от существующих методов создания обобщений
  8. Заключение

Список литературы

  1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. / Пер. с англ. - СПб: Питер, 2001. - 368 с.
  2. Мейерс С. Наиболее эффективное использование C++. 35 новых рекомендаций по улучшению ваших программ и проектов: Пер. с англ. - М.: ДМК Пресс, 2000. - 304 с.
  3. Легалов А.И. ООП, мультиметоды и пирамидальная эволюция. // Открытые системы - 2002, № 3 (март). С. 41-45.
  4. Легалов А.И. Мультиметоды и парадигмы. // Открытые системы - 2002, № 5 (май). С. 33-37.
  5. Вандэвурд Д. Д., Джосаттис Н. М. Шаблоны C++: справочник разработчика. : Пер. с англ. – М.: Издательский дом «Вильямс», 2003. – 544 с.
  6. Steele G.L. Common Lisp the Language, 2nd Edition. – Digital Press, Bedford, Massachusetts, 1990 (электронная версия документа размещена на сервере http://www.cs.cmu.edu/).
  7. Страуструп Б. Дизайн и эволюция C++: Пер. с англ. - М.: ДМК Пресс, 2000. - 448 с.
  8. Легалов А.И. Процедурно-параметрическая парадигма программирования. Возможна ли альтернатива объектно-ориентированному стилю? - Красноярск: 2000. Деп. рук. № 622-В00 Деп. в ВИНИТИ 13.03.2000. - 43 с.
  9. Легалов А.И. Методы поддержки параметрического полиморфизма // Научный вестник НГТУ. – 2004. – № 3 (18). – С. 73-82.
  10. Легалов А.И. Швец Д.А. Язык программирования О2М (электронная версия документа размещена по адресу http://www.softcraft.ru/ppp/o2m/o2mref.shtml).
  11. Легалов А.И. Швец Д.А. Процедурный язык с поддержкой эволюционного проектирования. – Научный вестник НГТУ, № 2 (15), 2003. С. 25-38.
  12. Wirth N. Type Extensions. / ACM Transactions on Programming Languages and Systems. Vol. 10, No 2, April 1988, p. 204-214.
  13. Страуструп Б. Язык программирования C++. Третье издание. /Пер. с англ. - СПб.; М.: "Невский диалект" - "Издательство БИНОМ", 1999. - 991 с.
  14. Reiser M., Wirth N. Programming in Oberon: steps beyond Pascal and Modula. / Addison-Wesley, ACM Press. – 1992.
  15. Джехани Н. Программирование на языке Си: Пер. с англ. – М.: Радио и связь, 1988. – 272 с.
  16. Немюгин С., Перколаб Л. Изучаем Turbo Pascal. – СПб., Питер. 2000.
  17. Вирт Н. Программирование на языке Модула-2. /Пер. с англ. - М.: Мир, 1987. – 244 с.
  18. Джехани Н. Язык Ада. /Пер. с англ. – М.: Мир, 1988. – 522 с.


[Возврат на основную страницу раздела]