Получите бесплатно 4 курса для лёгкого старта работы в IT
Получить курсы бесплатно
ГлавнаяБлогИмперативное программирование: суть, концепция, основные языки
Профессиональное развитие личности
11 585
Время чтения: 16 минут

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

11 585
Время чтения: 16 минут
Сохранить статью:
Сохранить статью:

В статье рассказывается:

  1. Императивная парадигма программирования
  2. Принципы императивного программирования
  3. Сравнение императивного и декларативного программирования
  4. Языки императивного программирования
  5. Виды императивного программирования
  6. Парадигмы императивного стиля программирования
  7. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.
    Бесплатно от Geekbrains

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

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

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

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

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

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

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

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

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

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

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

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

Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
pdf иконка

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

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

doc иконка

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

pdf иконка

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

pdf 3,7mb
doc 1,7mb
Уже скачали 27784 pdf иконка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дарим скидку от 60%
на обучение «Программист Java» до 28 апреля
Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей
Забронировать скидку

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

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

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

Только до 22.04
Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней
Список документов:
ТОП-100 площадок для поиска работы от GeekBrains
20 профессий 2023 года, с доходом от 150 000 рублей
Чек-лист «Как успешно пройти собеседование»
Чтобы получить файл, укажите e-mail:
Введите e-mail, чтобы получить доступ к документам
Подтвердите, что вы не робот,
указав номер телефона:
Введите телефон, чтобы получить доступ к документам
Уже скачали 52300

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

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

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

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

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

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

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

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

Откройте для себя захватывающий мир IT! Обучайтесь со скидкой до 61% и получайте современную профессию с гарантией трудоустройства. Первый месяц – бесплатно. Выбирайте программу прямо сейчас и станьте востребованным специалистом.

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

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

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

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

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

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

Сортировать:
По дате публикации
По рейтингу
До конца акции осталось
0 дней 00:00:00
Дарим скидку 64% на обучение «Разработчик»
  • Получите новую профессию с гарантией трудоустройства
  • Начните учиться бесплатно, 3 месяца обучения в подарок
Забронировать скидку на обучение
Забрать подарок

Получите подробную стратегию для новичков на 2023 год, как с нуля выйти на доход 200 000 ₽ за 7 месяцев

Подарки от Geekbrains из закрытой базы:
Осталось 17 мест

Поздравляем!
Вы выиграли 4 курса по IT-профессиям.
Дождитесь звонка нашего менеджера для уточнения деталей

Иван Степанин
Иван Степанин печатает ...