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

Отправная точка
Программирование
Windows API
Автоматы
Нейроинформатика
Парадигмы
Параллелизм
Проектирование
Теория
Техника кодирования
Трансляторы
Прочие вопросы

Разное

Беллетристика
Брюзжалки
Цели и задачи
Об авторе


Эволюционное расширение программ при различных парадигмах программирования


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


© 2011 г.
Легалов Александр Иванович,
Легалов Игорь Александрович,
Солоха Арсений Федорович

Статья первоначально опубликована в трудах XVI Байкальской Всероссийской конференции «Информационные и математические технологии в науке и управлении» и имеет следующие выходные данные:
Легалов А.И., Легалов И.А., Солоха А.Ф. Эволюционное расширение программ при различных парадигмах программирования. - Труды XVI Байкальской Всероссийской конференции «Информационные и математические технологии в науке и управлении». Часть III. - Иркутск: ИСЭМ СО РАН, 2011. ISBN 978-5-93908-094-1. - С. 42-49.

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

Преамбула

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

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

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

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

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

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

Литература

  1. Легалов, А.И. Разнорукое программирование // А.И. Легалов – http://www.softcraft.ru/paradigm/dhp/.
  2. Гамма, Э. Приемы объектно-ориентированного проектирования. Паттерны проектирования.: Пер. с англ. / Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес – Спб.: «Питер», 2001. – 368 с.
  3. Легалов А.И. Процедурно-параметрическая парадигма программирования. Возможна ли альтернатива объектно-ориентированному стилю? – Красноярск: 2000. Деп. рук. № 622-В00 Деп. в ВИНИТИ 13.03.2000. - 43 с.
  4. Легалов, А. И. Процедурный язык с поддержкой эволюционного проектирования. / А. И. Легалов, Д. А. Швец // Научный вестник НГТУ. – 2003. – № 2 (15). – С. 25-38.
  5. Легалов, И. А. Применение обобщенных записей в процедурно-параметрическом языке программирования. / И. А. Легалов // Научный вестник НГТУ. – 2007. – № 3 (28). – С. 25-38.
  6. Керниган, Б.У. Язык программирования C. 2-е изд.: Пер с англ / Б.У Керниган, Д.М. Ритчи – М.: Издательский дом «Вильямс», 2009. – 304 с.
  7. Павловская, Т.А. Паскаль. Программирование на языке высокого уровня: Учебник для вузов. / Т.А. Павловская - Спб.: «Питер», 2007. – 393 с.
  8. Wirth, N. Programming in Oberon. A derivative of Programming in Modula-2 (1982). / N. Wirth – http://www.oberon.ethz.ch/wirthPiO/.
  9. Moessenboeck, H. The Programming Language Oberon-2. / H. Moessenboeck, N. Wirth – Institut fur Computersysteme, ETH Zurich July. – 1996.
  10. Сайт компании Oberon Microsystems, посвященный языку программирования Component Pascal – http://www.oberon.ch/
  11. Barnes, J. Programming in Ada 95, 2nd Edition. / J. Barnes – Addison-Wesley. – 1998.
  12. Страуструп, Б. Язык программирования C++. Третье издание.: Пер. с англ. / Б. Страуструп – СПб.; М.: «Невский диалект» – «Издательство БИНОМ», 1999. – 991 с.
  13. Троелсен, Э. Язык программирования C# 2010 и платформа .NET 4.0. 5-е изд.: Пер. с англ. / Э. Троелсен – М.: ООО «ИД Вильямс», 2011. - 1392 с.
  14. Эккель, Б. Философия Java. Библиотека программиста. 4-е изд.: Пер. с англ. / Б. Эккель – Спб.: «Питер», 2009. – 640 с.
  15. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++, 2-е изд.: Пер. с англ. / Г. Буч – М.: "Издательства Бином", СПб: "Невский диалект", 1998 г. - 560 с.
  16. Элджер, Дж. C++: библиотека программиста.: Пер. с англ. / Дж. Элджер. – СПб.: ЗАО "Издательство Питер", 1999. – 320 с.
  17. Легалов, А. И. ООП, мультиметоды и пирамидальная эволюция. / А. И. Легалов // Открытые системы. – 2002. – № 3. – С. 41-45.
  18. Легалов, А. И. Мультиметоды и парадигмы. / А. И. Легалов // Открытые системы. – 2002. – № 5. – С. 33-37.
  19. Александреску, А. Современное проектирование на C++: Пер. с англ. / А. Александреску – М.: Издательский дом «Вильямс», 2002. – 336 с.
  20. Мейерс, С. Наиболее эффективное использование C++. 35 новых рекомендаций по улучшению ваших программ и проектов: Пер. с англ. / С. Мейерс – М.: ДМК Пресс, 2000. – 304 с.
  21. Горбунов-Посадов, М. М. Расширяемые программы. / М. М. Горбунов-Посадов – М.: Полиптих, 1999.


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