Парадигма программирования

Паради́гма программи́рования — совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером[1].

Парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм (мультипарадигменное программирование). Так, на языке Си, который не является объектно-ориентированным, можно работать в соответствии с принципами объектно-ориентированного программирования, хотя это и сопряжено с определёнными сложностями; функциональное программирование можно применять при работе на любом императивном языке, в котором имеются функции, и т. д.

Также существующие парадигмы зачастую пересекающиеся друг с другом в деталях (например, модульное и объектно-ориентированное программирование), поэтому можно встретить ситуации, когда разные авторы употребляют названия из разных парадигм, говоря при этом, по сути, об одном и том же явлении.

История термина править

Своим современным значением в научно-технической области термин «парадигма» обязан, по-видимому, Томасу Куну и его книге «Структура научных революций» (см. парадигма). Кун называл парадигмами устоявшиеся системы научных взглядов, в рамках которых ведутся исследования. Согласно Куну, в процессе развития научной дисциплины может произойти замена одной парадигмы на другую (как, например, геоцентрическая небесная механика Птолемея сменилась гелиоцентрической системой Коперника), при этом старая парадигма ещё продолжает некоторое время существовать и даже развиваться благодаря тому, что многие её сторонники, по тем или иным причинам, неспособны перестроиться для работы в другой парадигме.

Термин «парадигма программирования» впервые применил в 1978 году Роберт Флойд в своей лекции[2] лауреата премии Тьюринга.

Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:

Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.

Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.

Различные определения править

Далеко не все авторы, использующие термин «парадигма программирования», решаются дать интенсиональное определение данному термину. Однако и те определения, которые удаётся найти, серьёзно отличаются друг от друга.

Диомидис Спинеллис даёт следующее определение[3]:

Слово «парадигма» используется в программировании для определения семейства обозначений (нотаций), разделяющих общий способ (методику) реализаций программ.

Для сравнения тот же автор приводит определения из других работ. В статье Дэниела Боброва[4] парадигма определяется как «стиль программирования как описания намерений программиста». Брюс Шрайвер (Bruce Shriver) определяет парадигму программирования как «модель или подход к решению проблемы»[5], Линда Фридман (Linda Friedman) — как «подход к решению проблем программирования».[6]

Памела Зейв (Pamela Zave) даёт определение парадигмы как «способа размышления о компьютерных системах» (в оригинале «way of thinking about computer systems»).[7]

Питер Вегнер (Peter Wegner) предлагает другой подход к определению термина парадигмы программирования. В его работе «Concepts and paradigms of object-oriented programming»[8] парадигмы определяются как «правила классификации языков программирования в соответствии с некоторыми условиями, которые могут быть проверены».

Тимоти Бадд предлагает понимать термин «парадигма» как «способ концептуализации того, что значит „производить вычисления“, и как задачи, подлежащие решению на компьютере, должны быть структурированы и организованы».[9]

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

Основные модели программирования править

Подходы и приёмы править

См. также править

Примечания править

  1. Роганов, 2001, подраздел «Парадигмы программирования».
  2. R. W. Floyd. The Paradigms of Programming Архивная копия от 11 февраля 2007 на Wayback Machine Communications of the ACM, 22(8):455—460, 1979. Русский перевод см. в кн.: Лекции лауреатов премии Тьюринга за первые двадцать лет (1966—1985), М.: МИР, 1993.
  3. D. D. Spinellis. Programming paradigms as object classes: a structuring mechanism for multiparadigm programming. PhD thesis, University of London, London SW7 2BZ, United Kingdom, February 1994.
  4. D. G. Bobrow. If Prolog is the answer, what is the question. // Fifth Generation of Computer Systems, pages 138—145, Tokyo, Japan, November 1984. Institute for New Generation Computer Technology (ICOT), North-Holland.
  5. B. D. Shriver. Software paradigms. IEEE Software, 3(1):2, January 1986.
  6. L. W. Friedman. Comparative programming languages: generalizing the programming function. Prentice Hall, 1991, page 188.
  7. P. Zave. A compositional approach to multiparadigm programming. IEEE Software, 6(5): 15—25, September 1989.
  8. P. Wegner. Concepts and paradigms of object-oriented programming. {OOPS} messenger}, 1(1): 7—87, August 1990.
  9. T. A. Budd. Multi-Paradigm Programming in LEDA. Addison-Wesley, Reading, Massachusetts, 1995.

Литература править

  • Роганов Е. А. Основы информатики и программирования. — М.: МГИУ, 2001. Архивная копия от 8 октября 2013 на Wayback Machine

Ссылки править