Что это такое? Парадигмы программирования – это набор правил и ограничений, которые используют в работе те или иные языки. Это не подробный стоп-лист, а скорее подходы к решению задач.
Какие бывают? Выделяют две основные парадигмы: императивную и декларативную. На их основе были разработаны языки программирования, часть из которых уже устарела, а другая до сих пор популярна.
В статье рассказывается:
- Понятие парадигмы программирования
- Что не относится к парадигме программирования
- Императивная парадигма программирования
- Декларативная парадигма программирования
- Сравнение парадигм программирования
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Понятие парадигмы программирования
Парадигма языков программирования представляет собой совокупность правил, принципов и методик, используемых в процессе разработки ПО. От неё зависит стиль написания программы. При этом выбор языка программирования никак не зависит от парадигмы.
Парадигмы занимают самую высокую позицию в иерархии. Они определяют все остальные составляющие процесса программирования, включая шаблоны, свойства, паттерны, структуру и архитектуру приложения.
Что не относится к парадигме программирования
Стоит сразу отметить, что парадигма не является языком или инструментом. Ее можно назвать ориентиром, состоящим из набора образцов и принципов. Именно ими будет руководствоваться программист при написании кода. Данные правила сформулированы большим количеством разработчиков, которые придерживались их в своей работе.
Не все языки программирования привязаны к конкретным парадигмам. Однако некоторые формальные знаковые системы действительно были разработаны под определенные правила и принципы написания кода. К примеру, Haskel и функциональное программирование.
Отметим, что приемы из одной парадигмы могут использоваться совместно с приемами из другой.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Есть так называемые многопарадигмальные языки, которые позволяют адаптировать код под различные парадигмы программирования. Например, Python и JavaScript.
Императивная парадигма программирования
Наиболее распространённой и простой парадигмой является императивный вариант. Её основное отличие заключается в последовательном выполнении операций.
Под эту парадигму заточено большое количество языков. Она имеет много видов.
Некоторое время назад практически все разработчики использовали процедурные языки. Однако теперь наиболее актуальным является современное объектно-ориентированное программирование (ООП). Именно такой стиль написания кода стал самой популярной разновидностью императивной парадигмы. Процедурное программирование применяется лишь в тех случаях, когда не может использоваться ООП.
Процедурное программирование
Языки: C, Pascal, COBOL, ALGOL, BASIC, Fortran и т.д.
Базовым понятием в процедурном программировании является функция (процедура), которая представляет собой последовательность записанных и названных действий. Для наглядности рассмотрим бытовой пример. Допустим, что вы купили компьютерный стол и вам нужно его собрать. Инструкция производителя будет являться функцией.
Рассмотрим ещё один пример. Когда человек сообщает официанту название напитка, который хочет получить, его вряд ли интересует, что должен будет сделать работник кафе. Ему важно получить конкретный результат. Примерно то же самое происходит и при вызове функции. Разработчику не нужно знать, что сделает функция для выполнения поставленной задачи. Необходимо лишь помнить название процедуры и технику ее использования.
Объектно-ориентированное программирование
Языки: Java, Python, C++, Ruby, C#, Objective-C, PHP и т.д.
Это наиболее популярная, простая и многофункциональная парадигма среди современных вариантов. В ней появляются объекты, которые могут самостоятельно выполнять те или иные функции.
С помощью объектно-ориентированного программирования разработчик может настраивать связи между частями программы, которые нацелены на выполнение разных операций. Это позволяет без труда разделять программу между специалистами. Кроме того, ПО становится проще поддерживать и автоматически тестировать.
ООП является наиболее простой современной парадигмой. Кроме того, в ней реализовано самое большое количество функций.
Декларативная парадигма программирования
Особенность декларативной парадигмы заключается в том, что разработчику необходимо сосредоточиться не на том, что нужно сделать, а на том, какой должен быть результат. После получения команд компьютер будет самостоятельно искать способ выполнения задачи. Следовательно, программисту нужно чётко сформулировать требуемый результат. В противном случае компьютер начнёт подбирать все доступные варианты решение задачи.
Скачать файлПредположим, что разработчик дал команду собрать компьютерный стол, но не предоставил точного описания его составляющих. Чтобы добиться нужного результата, компьютер будет перебирать все существующие детали, и соединять их между собой.
В итоге сначала программа может собрать кухонный стол, затем прикроватный стол и т.д. Компьютер будет делать это до тех пор, пока не наткнется на нужную комбинацию деталей. С одной стороны, вы добьётесь поставленной цели, но с другой — потратите слишком много средств и времени.
Функциональная парадигма программирования
Языки: Haskell, Erlang, Scala, F#, OCaml, ELM, Lisp и т.д.
Строгое функциональное программирование предполагает, что все функции чистые и не имеют никаких побочных эффектов. Таким образом, человек может сколько угодно раз попросить официанта принести ему ванильный мокко. В результате он всегда получит один и тот же напиток. Однако здесь есть свои нюансы. В настоящем кафе может закончиться ванильный сахар и его заменят обычным.
на обучение «Инженер-программист» до 01 декабря
Либо бариста вообще не найдёт какао-бобов и функция отобразит ошибку «невозможно приготовить ванильный мокко». Именно такие изменения, которые произошли в процессе исполнения функции, называются побочными эффектами.
Во избежание данной проблемы разработчик должен не просто сформулировать команду, но и предоставить все ингредиенты, которые нужны для приготовления кофе. Если останутся какие-то продукты, то программа отдаст их вместе с чашечкой мокко.
Довольно сложно спрогнозировать появление побочных эффектов. К примеру, повару нужно приготовить картофельное пюре и тыквенный суп. В общей сложности на оба эти блюда нужно будет потратить 20 г соли. В процессе готовки пюре повар расходует 10 г соли, а оставшуюся часть он оставляет на полке. Это можно назвать побочным эффектом приготовления пюре. После этого повар приступает к готовке тыквенного супа и высыпает в него оставшиеся 10 г.
Читайте также!
Однако через некоторое время шеф резко меняет рецепт: с этого момента нужно будет использовать для пюре сванскую соль. Следовательно, на полке останется не 10, а уже 20 г обычной соли. Повар использует их для приготовления тыквенного супа. В результате клиенту подают пересоленое блюдо. Примерно то же самое происходит и при написании программы.
Функциональные языки не имеют побочных эффектов. Следовательно, в них не могут изменяться объекты. Иными словами, функция не меняет старый объект, а возвращает новый. Представьте, что человек будет каждый день приобретать новый календарь, хотя можно просто перевернуть страницу. Лишние расходы чаще всего может предотвратить транслятор. Это приложение выбирает, каким образом будет исполняться код.
Сравнение парадигм программирования
Рассмотрим конкретный пример. Возьмём несколько чисел:
5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9
Задача заключается в том, чтобы получить из этого ряда все числа, которые больше 3, но меньше 100.
Если человек будет писать код декларативным методом, то ему нужно будет вбить следующую команду: получить из массива N все числа, которые больше 3 и меньше 100. Программисту неважно, каким образом программа будет решать поставленную задачу. Ему лишь нужно сформулировать искомый результат.
Императивное программирование несколько сложнее. Разработчику потребуется собственноручно создать код, который будет проверять все числа из массива. Найдя подходящее число, программа запишет его в новый массив. Например:
- сформировать массив N с числами …;
- объявить переменную i со значением 0;
- начало цикла:
- если значение элемента номер i больше 3 и меньше 100, то добавить его в массив N2;
- прибавить к переменной i единицу;
- повторять, пока значение переменной i меньше количества элементов массива N;
- конец цикла;
- вернуть массив N2.
В качестве примера проанализируем два языка — C# и SQL
C# (императивный) | SQL (декларативный) |
int[] N = new int[] { 5, 1, 3, 9, 12, 583, 998, 7538, 72, 53, 71, 85, 7, 2, 9 };
List<int> nums = new List<int>(); for(int i = 0; i < N.Length; i++) { if(N[i] > 3 && N[i] < 100) { nums.Add(N[i]); } } int[] N2 = nums.ToArray(); |
SELECT num FROM N WHERE num > 3 AND num < 100; |
Какой вообще смысл писать код на императивном языке? Ведь исходя из вышеописанного примера, становится очевидным, что декларативное программирование гораздо проще и удобнее.
Выделяют три основные причины:
- Декоративное программирование вообще не может работать без императивного. Компьютер не понимает, что нужно разработчику. Он воспринимает лишь конкретные инструкции, в которых записана чёткая последовательность действий. Следовательно, чтобы декларативное программирование на SQL начало работать, нужны заранее сформированные инструкции.
- С помощью декларативного программирования не получится работать с задачами, для решения которых необходимо иметь доступ к состоянию программы. К примеру, если разработчику требуется понять, поставлена ли галочка в checkbox. Декоративное программирование не позволяет отслеживать состояние и его изменения.
- Императивное программирование имеет меньше ограничений. Именно по этой причине она часто применяется в творческих сферах деятельности. В особенности это касается областей, где важна последовательность выполняемых действий
У каждой парадигмы программирования есть свои особенности. Императивный вариант больше подходит для работы с анимацией, графическими интерфейсами, скриптами, играми и т.д. Декоративная парадигма оптимальна для вычисления и работы с информацией. Следовательно, нельзя назвать ни одну из этих совокупностей образцов и правил программирования более эффективной. Всё зависит от цели и задач программиста.
Каждая парадигма имеет свои преимущества и недостатки. К примеру, императивный вариант обеспечивает строгий контроль над действиями программы. Опыт работы с функциональной парадигмой показывает, что побочные эффекты могут приводить к путаницам.
Учтите, что результат программы — это не только те задачи, которые она выполняет, но и то, каким образом написан ее код. Если он будет слишком сложным, то другие программисты не смогут его прочитать. Это затруднит процесс исправления ошибок и улучшения программы.