StandUp «Путь в IT» с Павлом Волей
Кнопка закрыть топ-бар
ГлавнаяБлогИмперативное программирование: суть, концепция, основные языки
Профессиональное развитие личности
3 142
Время чтения: 16 минут

Императивное программирование: суть, концепция, основные языки

Сохранить статью:
Сохранить статью:
В статье рассказывается: 
  1. Императивная парадигма программирования
  2. Принципы императивного программирования
  3. Сравнение императивного и декларативного программирования
  4. Языки императивного программирования
  5. Виды императивного программирования
  6. Парадигмы императивного стиля программирования

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

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

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

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

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

Это более простой, т. е. понятный и логичный подход, когда задаётся последовательность действий (команд, инструкций), необходимых для получения результата – изменения состояния (информации, данных, памяти) программы с помощью переменных, операторов присваивания и составных выражений. Здесь имели место машинные коды, языки ассемблера и ранние языки высокого уровня, по типу Fortran, сейчас императивная парадигма – база C, C++, Java.

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

Особенности:

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

Основные понятия:

  • Инструкция.
  • Состояние.

Порожденные понятия:

  • Присваивание.
  • Переход.
  • Память.
  • Указатель.

Почти все современные основные языки сочетают в себе элементы и декларативного, и функционального программирования. То есть они при необходимости могут поддерживать императивную парадигму. Огромное влияние оказывает такое программирование на JavaScript, Java, C++, C# и т. д.

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

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

Базовым способом императивного подхода выступает процедурное программирование. Именно по этой причине между данными терминами иногда возникает некоторая путаница.

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

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

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

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

ТОП IT-профессий
2022 года с доходом
от 170 000 ₽
Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.
Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

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

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

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

pdf иконка

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

pdf иконка

ТОП сервисов и приложений, на которые следует перейти уже сегодня

pdf иконка 3,7 MB
Уже скачали 11794 pdf иконка

В процессе создания HTML программист использует теги, которые описывают конкретную веб-страницу в браузере, а не способ отражения наименования статьи на экране, а также оглавления и самого текста. В SQL при необходимости определения численности сотрудников с фамилией «Иванов», нужно написать SELECT count(*) FROM employee WHERE last_name = ‘Иванов’;. Здесь нет информации касательно конкретного файла или области памяти, в которых имеются данные о сотрудниках, каким образом отобрать именно Ивановых, и необходимо ли это для расчета их численности. Декларативные языки подразделяются на функциональные и логические.

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

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

В случае использования императивной парадигмы это может выглядеть следующим образом (несколько уточним представленный выше пример с рецептом):

  • приобрести рыбу, овощи, приправы;
  • нарезать продукты, посыпать приправы;
  • разогреть духовку и т. п.
В декларативной парадигме это бы звучало так: «Хочу пообедать запеченной с овощами рыбой» – то есть нет последовательности действий, а есть объявление того, что хочется получить в итоге действий (т. е. описание желаемого результата или данных).

На первый взгляд отличия видны вполне отчетливо. Но преимущество императивного программирования заключается в том, что этот язык не затрудняет обобщение и автоматизацию конкретных задач. Имеется возможность привести в действие некий «слой» кода, библиотеки. Этот слой будет реализовывать отдельные этапы алгоритма: как в нашем кулинарном примере – находить по рецепту требующиеся продукты, заказывать их доставку, использовать духовку и пр. Таким образом, программный код императивного языка программирования, обладающий такими библиотеками, не будет иметь столь весомые отличия от декларативного метода.

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

Языки императивного программирования

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

Первый язык, в котором не было границ машинного кода для конструирования сложных программ, был FORTRAN. Его создал Джон Бэкус в IBM в 1954 году. FORTRAN подарил разработчикам новые возможности (именование переменных, составные выражения, подпрограммы и т. д.), которые и сейчас являются неотъемлемой частью императивных языков.

Зарегистрируйся на интенсив StandUp «Путь в IT»
с Павлом Волей
и получи подборку
полезных документов от Geekbrains
Павел Воля Павел Воля
Только до 26 мая
Бесплатно
Павел Воля
Tелеведущий и гуманитарий

Мы вместе с экспертами по построению карьеры подготовили документы, которые помогут не ошибиться с выбором и определить, какая профессия в IT подходит именно вам.

Благодаря этим гайдам 76% наших студентов смогли найти востребованную профессию своей мечты!

Скоро мы уберем их из открытого доступа, успейте скачать бесплатно:

pdf иконка

Женщины в IT: мифы и перспективы в карьере

pdf иконка

Как прокачать свою технику речи

pdf иконка

100 тыс. руб за 100 дней с новой профессией

Список из 6 востребованных профессий с заработком от 100 тыс. руб

pdf иконка

Критические ошибки, которые могут разрушить карьеру

Собрали 7 типичных ошибок, четвертую должен знать каждый!

pdf иконка

Гайд по профессиям в IT

5 профессий с данными о навыках и средней заработной плате

pdf иконка 4,7 MB
pdf иконка 107 MB
Уже скачали 12677 pdf иконка

Следом появились новые формальные правила для создания программ более высокого уровня. К концу 50–60-х годов ХХ в. формируется язык АЛГОЛ, сделавший более легким использование математических алгоритмов. В то время языки COBOL (1960) и BASIC (1964) представляли собой способы адаптации синтаксиса программирования под синтаксис естественного языка (английского). В 70-х годах прошлого века специалисты Bell Labs создали: Никлаус Вирт – Паскаль, а Деннис Ритчи (работают в) – язык C. После этого Вирт приступил к работе над языками Модула-2 и Оберон. В конце 1960-х был сформирован первый объектный язык Simula.

Языки императивного программирования
Языки императивного программирования

Для решения задач Министерства обороны США в 1978 году Джин Ичбиа совместно с командой Honeywell начали формировать язык Ada. В 1983 году был выпущен документ, который отражал требования языка, а в 1995 и 2006 гг. он видоизменялся.

В 1980-х годах заинтересованность в объектно-ориентированном программировании стала возрастать. Создаваемые языки в то время были императивными, но имели поддержку объектов, можно было наблюдать весомое количество таких языков. В 1980 году Palo Alto Research Center Xerox опубликовала Smalltalk-80 языка, который изначально задумывался Аланом Кеем в 1969 г.

К концу 1990-х было сформировано множество императивных языков, которые базировались на фундаменте объектно-ориентированного программирования. Широко использовались Perl (Ларри Уолл, 1987), Python (Гвидо ван Россум, 1990), PHP (Расмус Лердорф, 1994), Java (Sun Microsystems, 1994) и C # (Microsoft, 2000).

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

Императивное программирование с ХХI веке подразделяется на несколько основных групп:

  • Наивная парадигма. В некоторых случаях воспринимается как отдельный тип или даже вовсе не упоминается как подход к программированию. Таким языкам присуща хаотичность, отсутствие систематизированного синтаксиса и семантики. Фактически можно провести параллель с похожими бесструктурными языками. К примеру, первые версии BASIC не обладали развитым механизмом организации подпрограмм, поэтому его принято относить к этой парадигме и называть одним из операциональных языков.
  • Неструктурированная парадигма. Схожа с ассемблером. Такие программы имеют вид линейных цепочек команд. Переходы осуществляются за счет команды по типу «перейти к…» т. е. «перейти к (строке)». Между тем в первых языках этой группы каждая строка программы была наделена своим номером, а переходы можно было совершать исключительно за счет выбора нужного из всех. Это было довольно неудобно и требовало лишнего времени. Позднее стали формироваться языки, имеющие специфичные элементы — метки. Они представляли собой текстовые описания мест, в которые должна переходить программа. Типичными представителями были, к примеру, изначальные версии FORTRAN и COBOL.
  • Структурная парадигма. Вследствие трудоемкости действия команды «перейти к…» был сформирован метод структурного императивного программирования и разработана соответствующая парадигма. Её главным плюсом было то, что она осуществляла замену оператора перехода с условными петлями («повторить до тех пор, пока условие истинно») и прочих упорядоченных по своей структуре инструкций, которые находятся в оболочке друг друга. Яркими примерами являются: C, Pascal и Ada.

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

Стилистика программирования эволюционировала довольно много лет, в течение которых образовались практики и методы, сформировавшиеся в отдельные парадигмы, активно функционирующие сегодня:

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

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

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

Наиболее распространенная сейчас парадигма императивного подхода — объектно-ориентированное программирование (ООП).

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

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

ООП включает в себя несколько основных характеристик:

  • Абстракция — выделение таких атрибутивных качеств объекта, которые могут в точности описать его поведение, но не включают в себя детали.
  • Инкапсуляция — размещение данных в рамках того объекта, который их применяет.
  • Полиморфизм — возможность взаимодействовать с различными видами объектов или данных.
  • Наследование — свойство объекта, благодаря которому он может наследовать различные параметры «родителей». Важно понимать, что такое преемство имеет ряд неразрешимых трудностей, вследствие наличия которых разработчики чаще используют наследование композиции.

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

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

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

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

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

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

Оцените статью
Рейтинг: 5
( голосов 1 )
Поделиться статьей
Добавить комментарий

Забрать
гарантированный
подарок
Забрать гарантированный
подарок
Скачать файл

Зарегистрируйся на интенсив StandUp «Путь в IT» с Павлом Волей и получи подборку полезных документов от Geekbrains

pdf-файл 302mb

Поздравляем!
Вы выиграли:

2-х дневный интенсив "Путь в IT"

Не пропустите сообщение!
Мы скоро свяжемся с вами!

Редирект для продолжения диалога