Файл: Обзор языков программирования высшего уровня.pdf

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

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

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

Добавлен: 24.04.2023

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

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

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

Введение

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

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

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


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

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

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

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

Первые ЯВУ

В середине 50-х годов под руководством Джона Бэкуса (IBM) был разработан первый язык программирования высшего уровня – FORTRAN (FORmula TRANslator). В отличие от уже существовавших на тот момент времени транслируемых языков программирования, FORTRAN предоставлял возможность записи алгоритма вычислений с использованием условных операторов и операторов ввода/вывода. Как и другие новые языки программирования, FORTRAN имел серьезные недостатки, а также в нем отсутствовала поддержка современных концепций структурирования данных и модульного проектирования программного продукта. Однако, несмотря на все перечисленные недостатки, преимущества абстракции были по достоинству оценены большинством программистов. Эффективность использования FORTRAN подтверждалась снижением времени и сил, требуемых для разработки программ, повысилась их надежность. Также, снизился уровень машинозависимости из-за абстрагирования от регистров и машинных команд. Многие конструкции языка первоначально разрабатывались под архитектуру IBM 407. Данная разработка имела успех и это привело к тому, что производители других вычислительных систем стали создавать свои версии трансляторов.

Альтернативой языку FORTRAN, изначально создававшемуся под архитектуру IBM, стал разработанный Питером Науром язык ALGOL (ALGOrithmic Language). Целью разработчиков являлась независимость от архитектуры целевой вычислительной машины. Язык разрабатывался для общих и научных приложений, однако достичь популярности FORTRAN ему не удалось из-за недостаточной поддержки со стороны производителей ЭВМ.


Стоит упомянуть еще один язык программирования высшего уровня, который был создан в числе первых. Язык Cobol был разработан в 1950-х для обработки коммерческих данных. Изначально предполагалось, что он будет лишь временным решением до тех пор, пока не создан лучший проект, однако он быстро стал самым распространенным в своей области.

Эволюция ЯВУ

Из первых языков программирования Algol больше других повлиял на последующие языки – от него произошли два таких важных языка как Jovial, который использовался для операционных систем реального времени в Военно-воздушных силах США и Simula, ставший одним из первых языков моделирования. Но наиболее известным языком-потомком Algol является Pascal.

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

Параллельно с разработкой языка Pascal по инициативе Министерства обороны США началась работа по созданию языка высокого уровня Ada, названного в честь Ады Лавлейс. Предпосылкой к этому стало накопление большого количества программ на различных языках программирования (FORTRAN, Algol и т.д.), сопровождение которых становилось все более затруднительным. Создание языка началось с определения требований и выработки спецификаций к «универсальному» языку программирования. Далее, в процессе конкурсного отбора был выбран наиболее соответствующий требованиям язык программирования, который впоследствии был доработан и в результате стал языком программирования Ada. Новый язык обладал строгой типизацией данных, строго описанным синтаксисом. Однако несмотря на все преимущества данный язык программирования оказался сложным для восприятия, что затруднило процесс сопровождения программ, написанных на нем. Это стало причиной провала попытки создания Ada как универсального языка программирования.

Универсальный язык программирования C был разработан в середине 70-х годов Денисом Ритчи, сотрудником Bell Laboratories, как язык для написания ядра операционной системы UNIX. Операционные системы традиционно писали на ассемблере, поскольку языки высокого уровня считались неэффективными. Язык С абстрагируется от деталей программирования, присущих ассемблерам, предлагая структурированные управляющие операторы и структуры данных и сохраняя при этом всю гибкость ассемблерного низкоуровневого программирования. Так как система UNIX была легко доступна и написана на переносимом языке, то она быстро стала популярна в академических и исследовательских учреждениях. Когда новые компьютеры и прикладные программы выходили из этих учреждений на коммерческий рынок, вместе с ними распространялись UNIX и С. Язык С проектировался так, чтобы быть близким к языку ассемблера, и это обеспечивает ему чрезвычайную гибкость, но проблема состоит в том, что эта гибкость приводит к возможности допущения скрытых ошибок в программе, поскольку ненадежные конструкции не проверяются компилятором. Язык С – превосходный инструмент в руках профессионала и удобен для небольших программ, но при разработке на нем больших программных комплексов группами разработчиков разной квалификации могут возникнуть серьезные проблемы. Впоследствии данный язык лег в основу разработки языков программирования C++ и Java.


В 80-х годах Бьерн Страуструп, также из Bell Laboratories, использовал С как основу для языка C++, добавив поддержку объектно-ориентированного программирования, аналогичную той, которую предоставлял язык Simula. Кроме того, в C++ исправлены многие ошибки языка С, и ему следует отдавать предпочтение даже в небольших программах, где объектно-ориентированные свойства не так важны.

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

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

В 90-х годах с популяризацией и распространением сети Интернет появляются новые возможности распределенной обработки данных. Вследствие этого создаются языки для разработки серверных приложений (Java, Perl, PHP), языки разметки (HTML, XML). Традиционные языки программирования также претерпевают изменения. Под понятием язык программирования начинает пониматься не только функциональность самого языка, но и библиотеки классов, предоставляемые средой программирования.

В настоящее время языки программирования применяются в самых различных областях, таких как:

  • Научные расчеты
  • Системное программирование
  • Обработка информации
  • Искусственный интеллект
  • Издательская деятельность
  • Удаленная обработка информации
  • Описание документов

Парадигмы программирования

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

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

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


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

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

Объектно-ориентированный подход основывается на 3 основных принципах:

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

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

Языки программирования – это формальные языки специально созданные для взаимодействия человека с компьютером. Каждый язык программирования, как и естественные языки имеет:

  • Алфавит
  • Синтаксис
  • Семантика

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

Синтаксис

Синтаксис – система правил, определяющих допустимые конструкции языка программирования.

Синтаксис задается с помощью формальной нотации.

Самая распространенная формальная нотация синтаксиса — это расширенная форма Бекуса — Наура (РБНФ). В РБНФ мы начинаем с объекта самого верхнего уровня, с программы, и применяем правила декомпозиции объектов, пока не достигнем уровня отдельного символа.