Файл: Классификация языков программирования высокого уровня.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 30.03.2023

Просмотров: 462

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Характерные свойства основных парадигм программирования представлены в Таблице 1.

Таблица 1.

Свойства парадигм программирования

Парадигма

Ключевой концепт

Программа

Выполнение программы

Результат

Императивная

Команда

Последовательность команд

Исполнение команд

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

Функциональная

Функция

Набор функций

Вычисление функций

Значение главной функции

Логическая

Предикат

Логические формулы

Логическое доказательство

Результат доказательства

Объектно-ориентированная

Объект

Набор классов объектов

Обмен сообщениями между объектами

Результирующее состояние объектов

Поскольку парадигмы существуют и развиваются в рамках языков программирования, которые призваны обеспечивать удобные механизмы решения различных прикладных задач, неизбежна интеграция парадигм. Так, уже в первых императивных алгоритмических языках, таких как Фортран, существовали элементы функционального стиля. В то же время применялись и языки, сохраняющие чистоту своей парадигмы, например, объектно-ориентированный Smalltalk [7] и логический Пролог [2].

Большинство современных языков [3] аккумулируют в себе элементы и приемы нескольких стилей, и тем не менее их можно классифицировать по основному их ядру, реализующему приёмы определенной парадигмы программирования, в частности:

  • Императивная парадигма: языки Паскаль, Си, Ада;
  • Функциональная парадигма: языки Лисп, Рефал, Плэнер, Schema, Haskel;
  • Логическая парадигма: языки Пролог и Datalog;
  • Объектно-ориентированная парадигма: Smalltalk, Eiffel.

Хотя Smalltalk, являющийся первым чисто объектно-ориентированным языком программирования, не получил должной известности, его основные идеи (абстрактные типы данных, инкапсуляция данных, полиморфизм операций) легко интегрировались в языки программирования других парадигм, в частности, императивной. Действительно, метод объекта может представлять из себя процедуру или функцию, а отправка сообщения – соответственно вызов процедуры или функции. Именно поэтому объектно-ориентированная парадигма программирования получила широкое распространение с тех пор, как ее средства были включены в популярные императивные языки Си и Паскаль, породив тем самым языки С++ и объектный Паскаль.


Подобным образом из объединения объектно-ориентированной с другими парадигмами возникли объектно-ориентированные варианты других языков программирования, например, язык CLOS – объектно-ориентированный Лисп. В настоящее время существует целый ряд современных языков программирования, в которых объединены две парадигмы:

  • Императивная и объектно-ориентированная: C++, C#, Delphi, Java и др.;
  • Функциональная и объектно-ориентированная: CLOS, Erlang и др.;
  • Логическая и объектно-ориентированная: Object Prolog.

В целом, сравнивая разные языки и парадигмы, следует отметить существенное отличие средств и приёмов традиционной императивной парадигмы программирования от средств и приёмов нетрадиционных парадигм – функциональной и логической. Языки программирования, основанные на нетрадиционных парадигмах, отличаются ещё и методом реализации: программы на таких языках обычно интерпретируются, а не компилируются, как в императивных и императивных объектно-ориентированных языках. Еще одно важное их отличие – они ориентированы на символьную обработку данных, поскольку средства этих языков включают:

  • Древесные структуры данных, такие как списки Лиспа или термы Пролога;
  • Встроенный механизм сопоставления с образцом (Рефал, Плэнер, Пролог) и бэктрекинга (Плэнер, Пролог);
  • Функционалы, или функции высшего порядка (Лисп, Schema, Haskel);
  • Механизм частичных вычислений (Haskel).

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

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


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

Поскольку не существует языка, в полной мере содержащего возможности всех парадигм, для их изучения необходимо подобрать несколько различных языков программирования. С нашей точки зрения, для каждой из основных парадигм должен быть взят по крайней мере один язык, который охватывает базовые ее средства и является тем самым типичным ее представителем – именно это позволит изучить и освоить во всей полноте средства и приёмы данной парадигмы. На этом принципе построен существующий более 20 лет практикум по программированию кафедры алгоритмических языков факультета вычислительной математики и кибернетики МГУ им. М.В. Ломоносова. Выпускники кафедры в своей производственной деятельности быстро осваивают новые языки программирования, что подтверждает верность выбранного принципа.

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

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

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

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


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

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

операция

операнды

Примечание

MOV AX, WORDB

Записать значение, содержащееся по адресу WORDB, к регистру AX

MOV BX, WORDC

Записать значение, содержащееся по адресу WORDС, к регистру Вx

ADD AX, BX

Добавить значение регистра BX до значения регистра AX, сумму записать в регистр AX

MULL WORDD

Умножить значение регистра AX на значение, содержащееся по адресу WORDD (результат - в регистре AX)

MOV WORD, AX

Записать значение регистра AX по адресу Word

идентификатор переменной

Адрес ячейки ОП

WORDA

100

WORDB

101

WORDC

102

WORDD

103

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

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

3.3. Языки программирования высокого уровня


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

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

Основные отличия языка программирования высокого уровня от машинно-ориентированной:

  • Алфавит алгоритмического языка значительно шире алфавита машинно-ориентированной, что существенно повышает наглядность текста такой программы;
  • Набор допустимых в алгоритмическом языке операций не зависит от набора машинных операций, а выбирается из соображений удобства формулирования последовательности действий;
  • Формат предложений в алгоритмическом языке достаточно гибкий, что позволяет с помощью одного предложения задать достаточно содержательный этап обработки данных;
  • Необходимые операции в алгоритмическом языке задаются в удобном для человека виде, например, с помощью общепринятых математических обозначений;
  • В алгоритмическом языке может быть предусмотрен значительно больший набор типов данных по сравнению с набором машинных типов данных.

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

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

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