💻
Подготовка к собеседованию
  • Оглавление
  • Архитектурные вопросы
    • Как избавиться от монолитности приложения?
    • Модульность VS Микросервисы
    • Микросервисы VS Монолит
    • Web services, RESTfull, SOAP
    • Распределенные системы
    • Вопросы по микросервисам
    • Разложение монолита
  • Языки программирования
    • Императивные и декларативные языки программирования
    • Функциональное программирование
  • Коммуникация
    • Основы WEB
    • Уровни модели OSI
    • IP
    • TCP
    • UDP
    • TCP и UDP – в чем разница?
    • TCP/IP
    • Приложения TCP / IP
    • ICMP
    • HTTP
    • HTTP/1.1 vs HTTP/2
    • Разница между HTTP и HTTPS
    • URL и URI - в чем различие?
    • SSL
    • TLS
    • Web Sockets
    • SOAP vs REST vs GraphQL vs RPC
    • DNS
    • Как работает интернет
  • среда выполнения
    • Процессы, потоки,нити
  • Алгоритмы
    • Алгоритмы и структуры данных
  • БД
    • Основы БД
    • Транзакции
    • Нормализация БД
    • SQL
  • Брокеры сообщений
    • Введение в kafka
    • kafka
    • 5 вещей, о которых должен знать любой разработчик Apache Kafka
  • Парадигмы проектирования
    • 10 важнейших принципов разработки программного обеспечения
    • Принципы для разработки: KISS, DRY, YAGNI, BDUF, SOLID, APO и бритва Оккама
  • Highload
    • За двумя зайцами погонишься — чеклист для HighLoad системы гуглить будешь
Powered by GitBook
On this page

Was this helpful?

  1. Языки программирования

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

PreviousРазложение монолитаNextФункциональное программирование

Last updated 4 years ago

Was this helpful?

Императивное программирование — это парадигма, основанная на составлении алгоритма действий (инструкций/команд), которые изменяют состояние (информацию/данные/память) программы. Первыми языками программирования, основанными на таком подходе, были машинные коды и ассемблеры. Фактически, программа на этих языках — это код, который выполняется компьютером сразу, без предварительной компиляции. Из языков высокого уровня, требующих компиляции исходного кода программы в машинный код (или интерпретации), к императивным можно отнести C, C++, Java.

Декларативное программирование — это парадигма, при которой описывается желаемый результат, без составления детального алгоритма его получения. В пример можно привести HTML и SQL. При создании HTML мы с помощью тегов описываем, какую хотим получить страничку в браузере, а не то, как нарисовать на экране заголовок статьи, оглавление и текст. В SQL, если нам нужно посчитать количество сотрудников с фамилией «Сидоров», мы напишем SELECT count(*) FROM employee WHERE last_name = 'Сидоров';. Тут ничего не сказано про то, в каком файле или области памяти находятся данные по сотрудникам, как именно выбрать из них всех Сидоровых и нужно ли вообще это делать для подсчёта их количества.

Рассмотрим ещё один пример. Допустим, мы хотим приготовить обед.

В императивной парадигме это выглядит как-то так:

  • купить мясо, огурцы, помидоры, соль;

  • порезать мясо, посолить;

  • поставить сковородку на плиту;

  • …

В декларативной: хочу на обед жареное мясо с овощами (неплохо звучит, правда? :)).

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

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

Ссылки:

Императивное и декларативное программирование простым языком — объясняют экспертыTproger
Logo