Файл: Классификация языков программирования высокого уровня (Обзор актуальных технологий программирования).pdf

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

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

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

Добавлен: 23.04.2023

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

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

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

ВВЕДЕНИЕ

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

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

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

Цель работы – рассмотреть классификацию языков программирования высокого уровня.

Объект работы – язык программирования высокого уровня направленный на решение задач вычислительной математики

Предмет работы – языки программирования высокого уровня.

Задачи исследования:

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

1. Обзор актуальных технологий программирования

1.1 Классификация языков программирования по уровням

На сегодняшний день в мире существует около 170 языков программирования, более 300 их реализаций. Каждый из них обладает своими особенностями, достоинствами и недостатками. Старые, не развивающиеся языки отмирают, поддержка их прекращается. Те же языки программирования, которые снискали большую популярность, толкают разработчиков на создание сред программирования (SDK), которые призваны ускорить процесс создания и отладки программ, значительно упростить жизнь программистам[1].


К языкам программирования высокого уровня относятся: Фортран, Кобол, Алгол, Pascal, Java, C, C++, C#, Objective C, Smalltalk, Delphi[2].

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

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

- кодирование - составление программы на любом из языков программирования, которую затем можно будет перевести на понятный для компьютера язык;

- трансляция - непосредственный перевод. Сборка работающей программы (исполняемого модуля) из всех составных частей. Это иерархическая структура, в которой высшие уровни базируются на низших[3].

Без четкой задачи и грамотной проработки алгоритма невозможно создать качественную программу.

Устройство всех систем взаимодействия схоже и во многом определяет классификацию языков программирования. Основные объекты языка программирования постоянны и напоминают компоненты человеческих языковых систем: синтаксис, определяющий формальные правила записи программы, допустимые виды и регистр символов; лексика, включающая в себя весь словарный запас языка: имена переменных и функций, константы, строки, операторы; грамматика, указывающая, как правильно сочетать единицы языка для образования словосочетаний и предложений[4]. Лексика и грамматика вместе определяют семантику языка. На этом уровне конкретные последовательности знаков приобретают особый смысл, понятный человеку и компьютеру. Например, слово while во многих системах программирования трактуется как начало циклической операции[5].

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

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


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

Рассмотрим классификацию и особенности языков программирования разного уровня:

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

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

Средний уровень. Системы программирования этой группы могут считаться и низко- и высокоуровневыми, в зависимости от конкретных представлений о степень абстракции. Сюда можно отнести C и C++[9].

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

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

Они обеспечивают: высокую скорость выполнения и максимальную компактность создаваемых программ; прямое взаимодействие с аппаратными ресурсами; полный контроль над памятью.

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

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


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

Компиляция - единовременный перевод всей программы в машинный код.

Интерпретация - последовательное выполнение каждого выражения.

Транскомпиляция - перевод на язык более низкого уровня, например, C или ассемблер, и его последующая компиляция.[12]

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

Интерпретатор работает с каждой строчкой программы отдельно, анализируя ее и сразу же выполняя. Его присутствие необходимо от начала и до самого конца работы программы[13].

Основные недостатки интерпретационной модели: постоянное нахождение транслятора в памяти ЭВМ; повторная обработка повторяющихся команд. Несмотря на это, интерпретируемые языки очень удобны для циклической разработки и отладки, так как позволяют быстро вносить изменения в программу. Компилятор же трудится только один раз, сразу преобразуя всю инструкцию в понятный для компьютера вид - машинный код или некий промежуточный байт-код, а затем покидает память ЭВМ. Здесь выполнение отделено от процесса трансляции, что является более эффективной моделью. Основные недостатки компиляционной модели: большая сложность. Прежде чем перевести программу на понятный машине язык, транслятор много раз проходит по исходной инструкции, анализируя и проверяя ее[14].

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

Классификация языков программирования высокого уровня по модели исполнения[15]:

Интерпретируемые - Python, Haskell, PHP, JavaScript.

Компилируемые сразу в машинный код: C, C++, Fortran, ASM. Компилируемые в байт-код: Python, Java.

Транскомпилируемые: Haskell, Fortran, C, C++. Обработка данных Любой язык программирования работает с информацией, которой нужно каким-то образом манипулировать, проверять на корректность, изменять. Данные могут быть самими разнообразными - числами, строками или сложными структурами. Разумеется, с каждым типом необходимо работать по-разному, но чтобы определить, как именно, сначала необходимо понять, с какими именно данными ЭВМ имеет дело. На основе метода определения разновидности данных построена классификация языков программирования по системе типов.


Нетипизированные языки.

Типизированные языки разной степени строгости. Нетипизированными являются языки ассемблера, которые способны обрабатывать непосредственно двоичные данные[16]. Тип данных при этом не имеет никакого значения. Для типизированных языков важно, с какой разновидностью данных они работают. Некоторые операции определены только для чисел, например, деление, другие - только для строк. При этом некоторые системы позволяют программисту определенные вольности. Например, они могут самостоятельно определять и «неявно» конвертировать один тип данных в другой, исходя из семантики команды. Это очень удобно, но усложняет отладку, так как может привести к незаметной ошибке. Ярким примером нестрогой типизации является JavaScript. Строго типизированные языки, например, Java, такой свободы не допускают и требуют указания типов и их явной конверсии, если она необходима[17].

Существует также классификация языков программирования высокого уровня по моменту проверки типов данных: статические языки обычно являются компилируемыми. Проверка типов происходит при анализе программы перед ее трансляцией на машинный язык. динамические языки проверяют типы данных при выполнении[18].

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

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

Объекты в программировании. Языки последней группы описывают все сущности в виде независимых объектов, скрывающих в себе сложные механики. Основными концепциями ООП (объектно-ориентированного программирования) являются: инкапсуляция - скрытие функционала внутри объекта; наследование одними объектами методов других; полиморфизм - изменение сути с сохранением внешнего интерфейса[20].