Паради́гма программи́рования — совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.
Парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм ((мультипарадигменное программирование)). Так, на языке Си, который не является объектно-ориентированным, можно работать в соответствии с принципами объектно-ориентированного программирования, хотя это и сопряжено с определёнными сложностями; функциональное программирование можно применять при работе на любом императивном языке, в котором имеются функции, и т. д.
Также существующие парадигмы зачастую пересекаются друг с другом в деталях (например, модульное и объектно-ориентированное программирование), поэтому можно встретить ситуации, когда разные авторы употребляют названия из разных парадигм, говоря при этом, по сути, об одном и том же явлении.
История термина
Своим современным значением в научно-технической области термин «парадигма» обязан, по-видимому, Томасу Куну и его книге «Структура научных революций» (см. (парадигма)). Кун называл парадигмами устоявшиеся системы научных взглядов, в рамках которых ведутся исследования. Согласно Куну, в процессе развития научной дисциплины может произойти замена одной парадигмы на другую (как, например, геоцентрическая небесная механика Птолемея сменилась гелиоцентрической системой Коперника), при этом старая парадигма ещё продолжает некоторое время существовать и даже развиваться благодаря тому, что многие её сторонники, по тем или иным причинам, неспособны перестроиться для работы в другой парадигме.
Термин «парадигма программирования» впервые применил в 1978 году (Роберт Флойд) в своей лекции лауреата премии Тьюринга.
Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:
Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.
Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.
Различные определения
Далеко не все авторы, использующие термин «парадигма программирования», решаются дать интенсиональное определение данному термину. Однако и те определения, которые удаётся найти, серьёзно отличаются друг от друга.
(Диомидис Спинеллис) даёт следующее определение:
Слово «парадигма» используется в программировании для определения семейства обозначений (нотаций), разделяющих общий способ (методику) реализаций программ.
Оригинальный текст (англ.)The word paradigm is used in computer science to talk about a family of notations that share a common way for describing program implementations
Для сравнения тот же автор приводит определения из других работ. В статье Дэниела Боброва парадигма определяется как «стиль программирования как описания намерений программиста». Брюс Шрайвер (Bruce Shriver) определяет парадигму программирования как «модель или подход к решению проблемы», Линда Фридман (Linda Friedman) — как «подход к решению проблем программирования».
Памела Зейв (Pamela Zave) даёт определение парадигмы как «способа размышления о компьютерных системах» (в оригинале «way of thinking about computer systems»).
Питер Вегнер (Peter Wegner) предлагает другой подход к определению термина парадигмы программирования. В его работе «Concepts and paradigms of object-oriented programming» парадигмы определяются как «правила классификации языков программирования в соответствии с некоторыми условиями, которые могут быть проверены».
Тимоти Бадд предлагает понимать термин «парадигма» как «способ концептуализации того, что значит „производить вычисления“, и как задачи, подлежащие решению на компьютере, должны быть структурированы и организованы».
Парадигма программирования как исходная концептуальная схема постановки проблем и их решения является инструментом грамматического описания фактов, событий, явлений и процессов, возможно, не существующих одновременно, но интуитивно объединяемых в общее понятие.
Основные модели программирования
- Императивное программирование
- (Декларативное программирование)
- Структурное программирование
- Функциональное программирование
- Логическое программирование
- Объектно-ориентированное программирование
- (Компонентно-ориентированное программирование)
- (Прототипно-ориентированное программирование)
- (Агентно-ориентированное программирование)
Подходы и приёмы
- Структурное программирование
- Процедурное программирование
- (Аппликативное программирование)
- (Обобщённое программирование)
- (Доказательное программирование)
- (Порождающее программирование)
- (Аспектно-ориентированное программирование)
- (Агентно-ориентированное программирование)
- Контрактное программирование
- Рекурсия
- (Автоматное программирование)
- Событийно-ориентированное программирование
- (Компонентно-ориентированное программирование)
- (Грамотное программирование)
См. также
Примечания
- Роганов, 2001, подраздел «Парадигмы программирования».
- R. W. Floyd. The Paradigms of Programming от 11 февраля 2007 на Wayback Machine Communications of the ACM, 22(8):455—460, 1979. Русский перевод см. в кн.: Лекции лауреатов премии Тьюринга за первые двадцать лет (1966—1985), М.: МИР, 1993.
- 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.
- 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.
- B. D. Shriver. Software paradigms. IEEE Software, 3(1):2, January 1986.
- L. W. Friedman. Comparative programming languages: generalizing the programming function. Prentice Hall, 1991, page 188.
- P. Zave. A compositional approach to multiparadigm programming. IEEE Software, 6(5): 15—25, September 1989.
- P. Wegner. Concepts and paradigms of object-oriented programming. {OOPS} messenger}, 1(1): 7—87, August 1990.
- T. A. Budd. Multi-Paradigm Programming in LEDA. Addison-Wesley, Reading, Massachusetts, 1995.
Литература
- Роганов Е. А. Основы информатики и программирования. — М.: МГИУ, 2001. от 8 октября 2013 на Wayback Machine
Ссылки
- Peter Van Roy. The principal programming paradigms (2008). Дата обращения: 29 марта 2015.
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер