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

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

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

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

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

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

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

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

  • Данная парадигма предполагает описания вычислений в форме инструкций, которые постепенно меняют состояние программы.
  • В языках низкого уровня, например в ассемблерах, состояниями могут являться память, регистры и флаги. Инструкциями же выступают команды, которые поддерживаются целевым процессором.
  • В языках более высокого уровня, например в Си, состоянием является исключительно память. Инструкции в таком случае могут быть более сложными, а также приводить к выделению и высвобождению памяти по мере своего функционирования.
Читайте также:  How to make spaces in html

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • приобрести рыбу, овощи, приправы;
  • нарезать продукты, посыпать приправы;
  • разогреть духовку и т. п.

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

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

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

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

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

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

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

Источник

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