Парадигмы программирования функциональное императивное объектно ориентированное программирование

Парадигмы программирования: какие бывают и на что влияют

Что это такое? Парадигмы программирования – это набор правил и ограничений, которые используют в работе те или иные языки. Это не подробный стоп-лист, а скорее подходы к решению задач.

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

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

Парадигма языков программирования представляет собой совокупность правил, принципов и методик, используемых в процессе разработки ПО. От неё зависит стиль написания программы. При этом выбор языка программирования никак не зависит от парадигмы.

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

Что не относится к парадигме программирования

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

Не все языки программирования привязаны к конкретным парадигмам. Однако некоторые формальные знаковые системы действительно были разработаны под определенные правила и принципы написания кода. К примеру, Haskel и функциональное программирование.

Отметим, что приемы из одной парадигмы могут использоваться совместно с приемами из другой.

Есть так называемые многопарадигмальные языки, которые позволяют адаптировать код под различные парадигмы программирования. Например, Python и JavaScript.

Читайте также:  Русско английский словарь программирования

Императивная парадигма программирования

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

Под эту парадигму заточено большое количество языков. Она имеет много видов.

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

Процедурное программирование

Языки: C, Pascal, COBOL, ALGOL, BASIC, Fortran и т.д.

Базовым понятием в процедурном программировании является функция (процедура), которая представляет собой последовательность записанных и названных действий. Для наглядности рассмотрим бытовой пример. Допустим, что вы купили компьютерный стол и вам нужно его собрать. Инструкция производителя будет являться функцией.

Стоит отметить один важный нюанс. Процедура и функция являются синонимичными понятиями, однако функциональное и процедурное программирование — не одно и то же. В первом случае речь идёт о декларативной парадигме, а во втором — об императивной.

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

Объектно-ориентированное программирование

Языки: Java, Python, C++, Ruby, C#, Objective-C, PHP и т.д.

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

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

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

Декларативная парадигма программирования

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

Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.

Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Александр Сагун - исполнительный директор Geekbrains

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

Подборка 50+ ресурсов об IT-сфере

Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT

ТОП 50+ сервисов и приложений от Geekbrains

Безопасные и надежные программы для работы в наши дни

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

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

Функциональная парадигма программирования

Языки: Haskell, Erlang, Scala, F#, OCaml, ELM, Lisp и т.д.

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

Либо бариста вообще не найдёт какао-бобов и функция отобразит ошибку «невозможно приготовить ванильный мокко». Именно такие изменения, которые произошли в процессе исполнения функции, называются побочными эффектами.

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

Довольно сложно спрогнозировать появление побочных эффектов. К примеру, повару нужно приготовить картофельное пюре и тыквенный суп. В общей сложности на оба эти блюда нужно будет потратить 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

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

Выделяют три основные причины:

  1. Декоративное программирование вообще не может работать без императивного. Компьютер не понимает, что нужно разработчику. Он воспринимает лишь конкретные инструкции, в которых записана чёткая последовательность действий. Следовательно, чтобы декларативное программирование на SQL начало работать, нужны заранее сформированные инструкции.
  2. С помощью декларативного программирования не получится работать с задачами, для решения которых необходимо иметь доступ к состоянию программы. К примеру, если разработчику требуется понять, поставлена ли галочка в checkbox. Декоративное программирование не позволяет отслеживать состояние и его изменения.
  3. Императивное программирование имеет меньше ограничений. Именно по этой причине она часто применяется в творческих сферах деятельности. В особенности это касается областей, где важна последовательность выполняемых действий

Источник

Оцените статью