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

Обновлено: 21.11.2024

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

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

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

Оглавление

  1. Что такое декларативное программирование?
  2. Каковы преимущества декларативного программирования?
  3. Каковы недостатки декларативного программирования?
  4. Что такое императивное программирование?
  5. Каковы преимущества императивного программирования?
  6. Каковы недостатки императивного программирования?
  7. Различия между декларативным и императивным программированием
  8. Заключительные мысли

Что такое декларативное программирование?

Мы можем назвать парадигму программирования декларативным программированием, если она может выражать логику вычислений без описания потока управления. Языки, подпадающие под декларативную парадигму, являются функциональными, логическими и предметно-ориентированными языками. Основное внимание в декларативном коде уделяется построению логики программного обеспечения без описания его потока. Несколько языков программирования используют эту парадигму для устранения побочных эффектов программирования. Основное внимание уделяется описанию выполнения программы в проблемной области, а не описанию подхода. Некоторыми хорошо известными примерами декларативного программирования являются XML, HTML, SQL, CSS, Prolog, Lisp и XQuery.

Например, предположим, что у нас есть кнопка, и мы хотим изменить ее цвет. Вот программа для этого в React.

Каковы преимущества декларативного программирования?

Улучшенное качество кода

Структура декларативного программирования точна и кратка. Декларативная парадигма кодирования также может значительно снизить сложность кода. Следовательно, качество кода лучше и эффективнее.

Реализация метода

Декларативная парадигма дает программистам возможность реализовать неизвестные методы во время программирования.

Легко оптимизируется

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

Поддерживается

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

Многоразовый

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

Каковы недостатки декларативного программирования?

Трудно понять

Иногда декларативное программирование становится очень сложным для понимания новичками.

Неизвестная теоретическая модель

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

Меньше возможностей настройки

В декларативном программировании сложно персонализировать коды в соответствии с требованиями, поскольку это зависит от реализации алгоритма. Декларативное программирование имеет сложный синтаксис. Таким образом, изменить программы довольно сложно.

Сложные инструменты

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

Дополнительная информация

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

Что такое императивное программирование?

В императивном программировании используются некоторые операторы, которые могут изменить состояние программы. Императивная программа имеет несколько команд для выполнения системой. Он всегда фокусируется на операционной процедуре программы. При этом программисты используют типичные стили кода, включая изменяемые состояния и циклы.

Программисты должны следовать пошаговым инструкциям, чтобы написать императивную программу. Здесь инструкция не подробная, но кто-то должен упомянуть этапы доработки программы.

Вот тот же пример, выполненный с использованием императивного программирования -

Каковы преимущества императивного программирования?

Читаемый

Программисты могут легко принять структуру императивного программирования. Новичок может легко выучить и прочитать коды императивного программирования.

Понятно

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

Функции приложения

Разработчики могут легко учитывать и использовать функции конкретного приложения для выполнения своих программ.

Осуществимость

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

Широко используется

В школах, колледжах и на предприятиях преподается императивное программирование. Программисты и разработчики хорошо знакомы с ним.

Каковы недостатки императивного программирования?

Запутанные коды

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

Ошибки редактирования

Существует риск ошибок редактирования, когда коды изменяются программистом.

Ограничения на расширения и обновления

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

Ограничение в разработке приложений

Императивное программирование — это системно-ориентированное программирование. Таким образом, это может заблокировать общую разработку приложения во время обслуживания.

Уязвим к гонке данных

Поскольку императивные программы содержат изменяемые переменные и всегда уязвимы для гонок данных.

Различия между декларативным и императивным программированием

Обычно декларативные языки, такие как SQL, XQuery, широко используются для управления базой данных. Например, Microsoft использует SQL в своих серверах SQL, Open Database Connectivity и объектах данных Active X. Большинство компаний используют SQL для эффективного и действенного управления своей базой данных. С другой стороны, декларативное программирование используется компаниями для проектирования и разработки веб-страниц. Такие языки, как CSS и HTML, упрощают процесс.

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

Например, Microsoft использовала C для написания Windows. В 1972 году код Unix Os был написан на C из сборки. В 1983 году Oracle также обновила свой код с ассемблера до C. Adobe Inc. использовала C++ для разработки Image Ready, Illustrator и Premiere Pro.

Заключительные мысли

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

Таношан М.В.

Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям.
― Мартин Фаулер

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

Разрабатывая приложение или решая простую задачу, мы часто говорим: «Если бы у меня было больше времени, я бы написал более простую программу». Причина в том, что мы сделали программу с большей сложностью. Чем меньше у нас сложности, тем легче его отлаживать и понимать. Чем сложнее становится программа, тем труднее над ней работать.

Управление сложностью — главная забота программиста. Так как же программисты справляются со сложностью? Существует много общих подходов, которые уменьшают сложность программы или делают ее более управляемой. Одним из основных подходов является парадигма программирования. Давайте углубимся в парадигмы программирования!

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

Термин "парадигма программирования" относится к стилю программирования.Это относится не к конкретному языку, а скорее к тому, как вы программируете.

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

Типы парадигм программирования

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

Слово «императивный» происходит от латинского «impero», что означает «приказываю».

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

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

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

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

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

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

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

ПРИМЕЧАНИЕ. Процедуры не являются функциями. Разница между ними в том, что функции возвращают значение, а процедуры — нет. В частности, функции спроектированы таким образом, чтобы иметь минимальные побочные эффекты и всегда выдавать один и тот же результат при одинаковых входных данных. Процедуры, с другой стороны, не имеют никакого возвращаемого значения. Их основная цель — выполнить поставленную задачу и вызвать желаемый побочный эффект.

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

Для иллюстрации давайте найдем сумму первых десяти натуральных чисел в подходе процедурной парадигмы.

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

Процедурное программирование часто является лучшим выбором, когда:

  • Существует сложная операция, включающая зависимости между операциями, и когда необходимо четко видеть различные состояния приложения ("загрузка SQL", "загрузка SQL", "сеть в сети", "нет аудиооборудования", так далее). Обычно это подходит для запуска и завершения работы приложения (Holligan, 2016).
  • Программа очень уникальна, и некоторые ее элементы были общими (Холлиган, 2016 г.).
  • Программа статична, и ожидается, что со временем она не изменится (Holligan, 2016).
  • Ожидается, что со временем в проект не будет добавлено ни одной функции или будет добавлено лишь несколько функций (Holligan, 2016).

Почему вам стоит изучить парадигму процедурного программирования?

  • Это просто.
  • Более простой способ отслеживать ход выполнения программы.
  • Он может быть строго модульным или структурированным.
  • Требуется меньше памяти: это эффективно и действенно.

1.2 Парадигма объектно-ориентированного программирования

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

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

К ключевым характеристикам объектно-ориентированного программирования относятся классы, абстракция, инкапсуляция, наследование и полиморфизм.

Класс – это шаблон или план, на основе которого создаются объекты.

Объекты являются экземплярами классов. Объекты имеют атрибуты/состояния и методы/поведение. Атрибуты — это данные, связанные с объектом, а методы — это действия/функции, которые может выполнять объект.

Объясняет состояния и поведение объекта (Источник: guru99.es)

Абстракция отделяет интерфейс от реализации. Инкапсуляция — это процесс сокрытия внутренней реализации объекта.

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

Для иллюстрации давайте найдем сумму первых десяти натуральных чисел в подходе объектно-ориентированной парадигмы.

Пример на Java:

Первую строку можно прочитать так: «Сократ — человек». Это основное предложение, которое представляет собой простой факт.

Вторую строку можно прочитать так: «X смертен, если X человек», другими словами: «Все люди смертны.'' Это предложение или правило для определения того, когда его вход X является "смертным". (Символ ":-'', иногда называемый турникетом, произносится как «если».) Мы можем протестировать программу, задав вопрос:

то есть «Смертен ли Сократ?» («?-» — это подсказка компьютера для вопроса). Пролог ответит "да". Другой вопрос, который мы можем задать:

То есть: «Кто (X) смертен?» Пролог ответит: «X = Сократ».

Чтобы дать вам представление, Джон — отец Билла и Лизы. Мэри — мать Билла и Лизы. Теперь, если кто-то задаст вопрос типа «кто отец Билла и Лизы?» или "кто мать Билла и Лизы?" мы можем научить компьютер отвечать на эти вопросы с помощью логического программирования.

Пример на Прологе:

Приведенный выше код определяет, что Джон — отец Билла.

Мы спрашиваем Prolog, какое значение X делает это утверждение верным? X должен быть Мэри, чтобы утверждение было верным. Он ответит X = Мэри

Языки, поддерживающие парадигму логического программирования:

  • Пролог
  • Абсис
  • ALF (алгебраический логический язык функционального программирования)
  • Алиса
  • Чао

Парадигма логического программирования часто лучше всего подходит, когда:

  • Если вы планируете работать над такими проектами, как доказательство теорем, экспертные системы, переписывание терминов, системы типов и автоматизированное планирование.

Почему вам стоит изучить парадигму логического программирования?

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

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

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

Парадигма функционального программирования уходит своими корнями в математику и не зависит от языка. Ключевым принципом этой парадигмы является выполнение ряда математических функций.

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

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

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

Пример в JavaScript:

В приведенном выше примере мы использовали математические функции Math.floor() и Math.sqrt() для эффективного решения нашей задачи. Мы можем решить эту проблему без использования встроенных математических функций JavaScript, но для эффективной работы кода рекомендуется использовать встроенные функции JS.

number привязан к функции isPrime(), и на него не будут влиять никакие значения вне его области. Функция isPrime() всегда выдает один и тот же результат при одинаковых входных данных.

ПРИМЕЧАНИЕ. В функциональном программировании нет циклов for и while. Вместо этого в функциональных языках программирования для итерации используется рекурсия (Бхадвал, 2019 г.).

Языки, поддерживающие парадигму функционального программирования:

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

  • Работа с математическими вычислениями.
  • Работа с приложениями, ориентированными на параллелизм или параллелизм.

Почему вам стоит изучить парадигму функционального программирования?

  • Функции можно запрограммировать быстро и легко.
  • Функции общего назначения можно использовать повторно, что ускоряет разработку программного обеспечения.
  • Модульное тестирование стало проще.
  • Отладка упрощается.
  • В целом приложение менее сложное, поскольку функции довольно просты.

2.3 Подход к обработке базы данных

Эта методология программирования основана на данных и их перемещении. Операторы программы определяются данными, а не последовательностью шагов.

База данных – это организованный набор структурированной информации или данных, обычно хранящихся в электронном виде в компьютерной системе. База данных обычно управляется системой управления базами данных (СУБД) («Что такое база данных», Oracle, 2019 г.).

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

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

Большинство баз данных используют язык структурированных запросов (SQL) для записи и запроса данных.

Вот пример подхода к обработке базы данных (SQL):

Столбец PersonID имеет тип int и содержит целое число. Столбцы LastName , FirstName , Address и City имеют тип varchar и содержат символы, а максимальная длина этих полей составляет 255 символов.

Теперь пустая таблица Persons будет выглядеть так:

Описывает, как будет выглядеть таблица Persons после выполнения

Подход к обработке базы данных часто лучше всего использовать, когда:

  • Работа с базами данных для их структурирования.
  • Доступ, изменение, обновление данных в базе данных.
  • Взаимодействие с серверами.

Почему важны базы данных и почему вам следует изучить подход к обработке баз данных?

  • База данных обрабатывает огромные объемы данных. В отличие от электронных таблиц или других инструментов базы данных используются для ежедневного хранения больших объемов данных.
  • Точность. С помощью встроенных в базу данных функций мы можем легко выполнить проверку.
  • Простота обновления данных: языки манипулирования данными (DML), такие как SQL, используются для простого обновления данных в базе данных.
  • Целостность данных. С помощью встроенных проверок достоверности мы можем обеспечить согласованность данных.

Заключение

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

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

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

Я настоятельно рекомендую вам прочитать больше статей о парадигмах программирования. Надеюсь, эта статья помогла вам.

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

Определение

A — это стиль или «способ» программирования.

Некоторые языки позволяют легко писать в одних парадигмах, но не в других.

Никогда не используйте фразу «парадигма языка программирования».

Парадигма — это способ выполнения чего-либо (например, программирования), а не конкретная вещь (например, язык). Верно, что если язык программирования L позволяет легко выразить конкретную парадигму программирования P, то мы часто говорим: «L — это язык P» (например, «Haskell — язык функционального программирования»), но это не означает, что любая такая вещь, как «парадигма функционального языка».

Некоторые общие парадигмы

Вы должны это знать:

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

    Парадигмы не должны исключать друг друга; в одной программе может быть несколько парадигм!

    Взгляд на некоторые основные парадигмы

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

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

    Структурированное программирование

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

    Ранние языки с упором на структурное программирование: Algol 60, PL/I, Algol 68, Pascal, C, Ada 83, Modula, Modula-2. Структурное программирование как дисциплина иногда зародилось знаменитым письмом Эдсгера Дейкстры, озаглавленным «Перейти к утверждению, которое считается вредным».

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

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

    Одним из наиболее заметных аспектов более чистых объектно-ориентированных языков является то, что условные операторы и циклы сами становятся сообщениями, аргументами которых часто являются блоки исполняемого кода. В синтаксисе, подобном Smalltalk:

    Это можно сократить до:

    Многие популярные языки, которые называют себя объектно-ориентированными языками (например, Java, C++), на самом деле просто берут некоторые элементы ООП и смешивают их с императивным кодом. Далее мы видим, что length и toUpper являются методами, а не функциями верхнего уровня, но for и if снова стали управляющими структурами:

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

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

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

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

    В , поток управления выражается путем объединения вызовов функций, а не путем присвоения значений переменным:

    Ой! Мы опишем это позже. А пока будьте благодарны за синтаксический сахар:

    А? Это все равно не очень красиво. Почему людям нравится этот материал? Настоящая сила этой парадигмы заключается в передаче функций в функции (и возврате функций из функций).

    Мы можем добиться большего успеха, используя крутой оператор |>. Здесь x |> f просто означает f(x) . Оператор имеет очень низкий приоритет, поэтому вы можете читать слева направо:

    Продолжаем! Обратите внимание, что вы не стали бы писать map(λx. square(x)) , верно? Вы бы написали map(square) . Мы можем сделать что-то подобное выше, но мы должны использовать композицию функций, вы знаете, (fo g)x is f(g(x)) , поэтому:

    Вот три вещи, которые нужно прочитать, чтобы понять суть функционального программирования:

    С функциональным программированием:

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

    Некоторые любят говорить:

    • Функциональное, или аппликативное, программирование — это программирование без операторов присваивания: вы просто применяете функции к аргументам. Примеры: Scheme, Haskell, Miranda, ML.
    • Программирование на уровне функций избавляется от переменных; one объединяет функции с , a.k.a. Примеры: FP, FL, J.

    Упражнение. Изучите следующие стили программирования и определите, чем они похожи и чем отличаются друг от друга: (а) основанный на стеке, (б) конкатенативный, (в) бесточечный, (г) неявный.< /p>

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

    Программирование логики и ограничений

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

    Языки, которые подчеркивают эту парадигму: Prolog, GHC, Parlog, Vulcan, Polka, Mercury, Fnil.

    Языки и парадигмы

    Одной из характеристик языка является поддержка определенных парадигм программирования. Например, Smalltalk имеет прямую поддержку объектно-ориентированного программирования, поэтому его можно назвать объектно-ориентированным языком. Программы OCaml, Lisp, Scheme и JavaScript, как правило, интенсивно используют передачу функций, поэтому их называют «функциональными языками», несмотря на наличие переменных и множества императивных конструкций.

    • Очень немногие языки реализуют парадигму на 100 %. Когда они это делают, они . Невероятно редко бывает «чистый язык ООП» или «чистый функциональный» язык. Многие языки имеют несколько побегов; например, в OCaml вы будете программировать с функциями в 90% или более случаев, но если вам нужно состояние, вы можете его получить. Другой пример: очень немногие языки реализуют ООП так, как это представлял себе Алан Кей.
    • Многие языки упрощают программирование в одной или нескольких парадигмах. В Scala вы можете легко выполнять императивное, объектно-ориентированное и функциональное программирование.Если язык преднамеренно разработан для обеспечения возможности программирования во многих парадигмах, он называется . Если язык только случайно поддерживает несколько парадигм, у нас нет специального слова для этого.

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

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

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

    Первое различие — между императивными и декларативными языками программирования.

    Императивное программирование выражает команды для выполнения компьютером — оно сосредоточено на явном процессе работы программы. Например, если вы хотите получить четные числа массива, вот как может выглядеть императивный код:

    Декларативное программирование — это более высокий уровень, ориентированный на логику и концепции, а не на процедурный поток. Другими словами, его интересует то, что должно быть сделано, а не то, как именно это должно быть сделано. Используя тот же пример, что и раньше, декларативное программирование решило бы проблему следующим образом:

    Мы также можем понять разницу между императивным и декларативным на реальных примерах. Их много, но вот простой, который нам нравится:

    Предположим, друг приезжает в гости, но не знает, где вы живете.

    Императивным подходом было бы предоставление подробных указаний для конкретного маршрута к вашему дому.

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

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

    Обязательные парадигмы

    Процедурный

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

    Примеры: C, Pascal, BASIC.

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

    Эта парадигма основана на идее, что код можно разбить на "объекты", которые имеют разные свойства и выполняют разные действия. Объекты могут взаимодействовать друг с другом для достижения желаемых результатов. Основным принципом ООП является «инкапсуляция», которая включает в себя упаковку всех компонентов объекта (то есть данных и методов) в единую самодостаточную единицу (иногда известную как «класс»). ООП — популярная парадигма, поскольку она имитирует наше представление об объектах в «реальном мире», что делает ее относительно простой для понимания. Благодаря инкапсуляции объекты/классы можно легко использовать повторно, а также обеспечить масштабируемость и безопасность.

    Примеры: C++, Java, Python.

    Параллельная обработка

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

    Примеры: C, C++, MPI.

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

    Логика

    Это программирование основано на понятии формальной логики. Программы записываются в виде набора фактов и правил, которые следуют логической структуре (например, «X истинно, если Y и Z верны»). Эта логика служит структурой знаний, с помощью которой компьютеры могут производить определенные результаты — вместо того, чтобы явно указывать, что делать, компьютеру даются границы того, что он должен учитывать. Логическое программирование в основном декларативно, поскольку машины могут использовать разум для решения проблемы, хотя в некоторых случаях в код также могут быть включены императивные команды. Логическое программирование можно использовать для исследования и проверки сложных теорем — оно также тесно связано с развитием машинного обучения и искусственного интеллекта. Ключевые преимущества включают гибкость и минималистский синтаксис. Однако если логические правила выражены неправильно, это может сбивать с толку.

    Примеры: Prolog, Datalog, Mercury.

    Функциональность

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

    Примеры: JavaScript, Haskell, Scala.

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

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

    Заинтересованы в найме талантливых латиноамериканских разработчиков для расширения возможностей вашей команды? Связаться с нами Jobsity : вариант увеличения штата сотрудников для американских компаний.

    Маурисио уже 12 лет находится в авангарде технологий. Он постоянно интегрирует новые технологии, включая фреймворки, CMS и стандартные отраслевые модели. Он прагматичен в решении проблем и подбирает решения на основе лучшей схемы/языка/приложения для каждого проекта. Как руководитель отдела технологий в Jobsity, он следит за тем, чтобы его команда всегда была в курсе последних достижений в области разработки программного обеспечения, исследуя экосистему программного обеспечения, реализуя несколько инициатив в области профессионального развития и координируя свои потребности с новыми и существующими клиентами.
    Он имеет степень бакалавра бизнеса и маркетинга UTEG Эквадор

    Читайте также: