кафедра ЮНЕСКО по НИТ * Языки программирования высокого уровня Информатика 900igr.net кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня В 20-х годах XIX века Ч.Бэббиджем была высказана мысль о предварительной записи порядка действий машины для последующей автоматической реализации вычислений - программе. И, хотя использованная Бэббиджем запись программы на перфокартах, придуманная для управления ткацкими станками французским изобретателем Жозефом Мари-Жаккаром, технически не имеет ничего общего с современными приемами хранения программ в ЭВМ, принцип здесь по-существу один. С этого момента начинается история программирования. Аду Лавлейс, одну из немногих современников Чарльза Бэббиджа, кто сумел по достоинству оценить аналитическую машину, называют первым в мире программистом. Она теоретически разработала некоторые приемы управления последовательностью вычислений, которые используются в программировании и по сей день, описала одну из важнейших конструкций практически любого современного языка программирования - цикл. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Следующий этап: появление системы кодирования машинных команд с помощью специальных символов, предложенной Джоном Моучли, сотрудником Пенсильванского университета. Грейс Мюррей Хоппер, которая посвятила всю свою жизнь компьютерам и программированию, стала «третьим в мире программистом первого в мире большого цифрового компьютера». кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня При работе на компьютере «Марк-1» Г.Хоппер и ее группе пришлось столкнуться со многими проблемами и все, что ими придумано, было впервые. В частности, они придумали подпрограммы. Сейчас любой программист не задумываясь использует аппарат подпрограмм в любом языке программирования. И еще одно фундаментальное понятие техники программирования впервые ввели Г.Хоппер и ее группа - «отладка». Однажды жарким летним днем 1945г. неожиданно произошла остановка компьютера «Марк-1». кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня На заре компьютерной эры машинный код был единственным средством общения человека с компьютером. Огромным достижением создателей языков программирования было то, что они сумели заставить сам компьютер работать переводчиком с этих языков на машинный код. В конце 40-х годов создана система под названием «Short Code», которая являлась примитивным языком программирования высокого уровня. В ней программист записывал решаемую задачу в виде математических формул, а затем, используя специальную таблицу, переводил символ за символом, преобразовывал эти формулы в двухлитерные коды. В дальнейшем специальная программа компьютера превращала эти коды в двоичный машинный код. Система, разработанная Дж. Моучли, была по существу одним из первых примитивных интерпретаторов. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня В 1951 г. Хоппер создала первый в мире компилятор и ею же был введен сам этот термин. Компилятор Хоппер осуществлял функцию объединения команд и в ходе трансляции производил организацию подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня в машинные команды. В 1954 г. разработана система, включающая язык программирования и компилятор, которая в дальнейшем получила название MATH-MATIC. В 1958 г. появился компилятор FLOW-MATIC – первый язык для задач обработки коммерческих данных. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Середина 50-х годов характеризуется стремительным прогрессом в области программирования. Роль программирования в машинных командах стала уменьшаться. Первым и одним из наиболее распространенных был Фортран (FORTRAN, от FORmula TRANslator - переводчик формул), разработанный группой программистов фирмы IBM в 1954 г. (первая версия). В середине 60-х годов сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых слов английского языка. Новый язык назвали «универсальным символическим кодом для начинающих» (Beginners All-Purpose Symbolic Instruction Code, или, сокращенно, BASIC). Годом рождения нового языка можно считать 1964 г. Сегодня универсальный язык Бейсик (имеющий множество версий) приобрел большую популярность и получил широкое распространение среди пользователей ЭВМ различных категорий во всем мире. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня В начале 60-х годов все существующие языки программирования высокого уровня можно было пересчитать по пальцам, однако впоследствии их число достигло трех тысяч. В 60-е годы были предприняты попытки преодолеть эту «разноголосицу» путем создания универсального языка программирования. Первым детищем этого направления стал PL/I (Programm Language One), 1967 г. Затем на эту роль претендовал АЛГОЛ-68 (1968 г.). Предполагалось, что подобные языки будут развиваться и усовершенствоваться и вытеснят все остальные. Однако ни одна из этих попыток на сегодняшний день не увенчалась успехом (хотя PL/I в усеченных версиях использовали многие программисты). Всеохватность языка приводила к неоправданной, с точки зрения программиста, сложности конструкций, неэффективности компиляторов. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Языки программирования служат разным целям и их выбор определяется удобностью пользователя, пригодностью для данного компьютера и данной задачи. Задачи для компьютера бывают самые разнообразные: вычислительные, экономические, графические, экспертные и т.д. Такая разнотипность решаемых компьютером задач и определяет многообразие языков программирования. В программировании наилучший результат достигается при индивидуальном подходе, исходящем из класса задачи, уровня и интересов программиста. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Области применения языков высокого уровня Бейсик широко употребляется при написании простых программ; Фортран является классическим языком программирования при решении на ЭВМ математических и инженерных задач; язык Кобол был задуман как основной язык для массовой обработки данных в сферах управления и бизнеса. язык ЛОГО, созданный для обучения программированию школьников Пролог, разработан как язык программирования для создания систем искусственного интеллекта. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня В конце 50-х годов появился язык программирования Алгол (ALGOL, от ALGOrithmic Language - алгоритмический язык). Алгол предназначен для записи алгоритмов, которые строятся в виде последовательности процедур, применяемых для решения поставленных задач. Специалисты-практики восприняли этот язык далеко неоднозначно, но, тем не менее, его влияние на развитие других языков и теорию программирования оказалось весьма значительным. В нашей стране в те годы был создан под руководством Сергея Петровича Ершова транслятор Альфа, который представлял довольно удачную русифицированную версию Алгола. Впоследствии академик Ершов сыграл важнейшую роль в становлении в СССР школьной информатики. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Язык Паскаль первоначально разрабатывался как учебный, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах. Однако, качества его в совокупности оказались столь высоки, что им охотно пользуются и профессиональные программисты. Француз Филип Кан разработал систему Турбо-Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы - компиляции, редактирования связей, отладки и диагностики ошибок - в едином интерфейсе. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Период с конца 60-х и до начала 80-х годов характеризуется бурным ростом числа различных языков программирования, сопровождавшим, как это ни парадоксально, кризис программного обеспечения. Этот кризис особо остро переживало военное ведомство США. В январе 1975 г. Пентагон решил навести порядок в хаосе трансляторов и учредит комитет, которому было предписано разработать один универсальный язык. В мае 1979 г. был объявлен победитель - группа ученых во главе с Жаном Ихбиа. Победивший язык окрестили АДА, в честь Огасты Ады Лавлейс. Язык АДА - прямой наследник языка Паскаль. - этот язык предназначен для создания и длительного (многолетнего) сопровождения больших программных систем, допускает возможность параллельной обработки, правления процессами в реальном времени и многое другое, чего трудно или невозможно достичь средствами более простых языков. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Большой отпечаток на современное программирование наложил язык Си (первая версия - 1972 г.), являющийся очень популярным в среде разработчиков систем программного обеспечения (включая операционные системы). Си сочетает в себе черты как языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки, как Бейсик и Паскаль. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Многие языки, первоначально разработанные для больших и малых ЭВМ, в дальнейшем были приспособлены к персональным компьютерам. В течение многих лет программное обеспечение строилось на основе операциональных и процедурных языков, таких как Фортран, Бейсик, Паскаль, Ада, Си. И сегодня современные версии этих и им подобных языков (Модула, Форт и др.) доминируют при разработке прикладных программных средств. Однако по мере эволюции языков программирования получили широкое распространение и другие, принципиально иные, подходы к созданию программ. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Классическое операциональное и/или процедурное программирование требует от программиста детального описания того, как решать задачу, т.е. формулировки алгоритма и его специальной записи. При этом ожидаемые свойства результата обычно не указываются. Основные понятия языков этих групп - оператор и данные. При процедурном подходе операторы объединяются в группы - процедуры. Структурное программирование в целом не выходит за рамки этого направления, оно лишь дополнительно фиксирует некоторые полезные приемы технологии программирования. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * История развития языков высокого уровня Другое направление в программировании связано с методологиями непроцедурного программирования. К ним можно отнести объектно-ориентированное и декларативное программирование. Объектно-ориентированный язык создает окружение в виде множества независимых объектов. Каждый объект ведет себя подобно отдельному компьютеру, их можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования. Из языков объектного программирования, популярных среди профессионалов, следует назвать прежде всего Си++, для более широкого круга программистов предпочтительны среды типа Delphi и Visual Basic. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Классификация языков программирования При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом процедуру его получения («алгоритм») программист не строит (по крайней мере, в идеале). В этих языках отсутствует понятие «оператор» («команда»). Декларативные языки можно подразделить на два семейства - логические (типичный представитель - Пролог) и функциональные (Лисп). кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Классификация языков программирования кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Языки программирования высокого уровня Основные понятия кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Основные понятия Языки программирования – это формальные языки специально созданные для общения человека с компьютером. Каждый язык программирования, равно как и «естественный» язык (русский, английский и т.д.), имеет алфавит, свои грамматику и синтаксис, а также семантику. Алфавит – фиксированный для данного языка набор основных символов, допускаемых для составления текста программы на этом языке. Синтаксис – система правил, определяющих допустимые конструкции языка программирования из букв алфавита. Семантика – система правил однозначного толкования отдельных языковых конструкций, позволяющих воспроизвести процесс обработки данных. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Основные понятия Взаимодействие синтаксических и семантических правил определяют те или иные понятия языка, например, операторы, идентификаторы, переменные, функции и процедуры, модули и т.д. В отличие от естественных языков правила грамматики и семантики для языков программирования, как и для всех формальных языков, должны быть явно, однозначно и четко сформулированы. Языки программирования, имитирующие естественные языки, обладающие укрупненными командами, ориентированными на решение прикладных содержательных задач, называют языками «высокого уровня». кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Достоинства языков программирования высокого уровня алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста; набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса; конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде; используется аппарат переменных и действия с ними; поддерживается широкий набор типов данных. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Метаязыки описания языков программирования Интерпретация конструкций языка программирования должна быть абсолютно однозначной, ибо фраза на языке программирования превращается в машинный код автоматически, с помощью программы-транслятора, и любой намек на неоднозначность либо делает эту фразу непереводимой, либо приводит к ошибке. В этом отношении языки программирования значительно отличаются от естественных языков, допускающих неоднозначно интерпретируемые фразы. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Метаязыки описания языков программирования Для строгого и точного описания синтаксиса языка программирования, как правило, используют специальные метаязыки (языки для описания других языков). Наиболее распространенными метаязыками являются металингвистические формулы Бэкуса - Наура (язык БНФ) и синтаксические диаграммы Вирта. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Язык БНФ Язык БНФ (называемый также языком нормальных форм) представляет компактную форму в виде некоторых формул, похожих на математические. Для каждого понятия языка существует единственная метаформула (нормальная форма). Она состоит из левой и правой частей. В левой части указывается определяемое понятие, а в правой - задается множество допустимых конструкций языка, которые объединяются в это понятие. В формуле используют специальные метасимволы в виде угловых скобок, в которых заключено определяемое понятие (в левой части формулы) или ранее определенное понятие (в ее правой части), а разделение левой и правой частей указывается метасимволом «::=», смысл которого эквивалентен словам «по определению есть». кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Язык БНФ (пример метаформул) ::=А|В ::=|+|- означают, что в том языке, на который эта метаформула распространяется, под термином понимается любая из букв А или В, а под термином - любая из следующих десяти записей: А; В; А+А; А+В; В+А; В+В; А-А; А-В: В-А; В-В Знак | следует читать «или». кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Язык БНФ (пример понятия «двоичный код») Правая часть метаформулы может содержать правило построения допустимых последовательностей. Допускаются рекурсивные определения терминов и понятий, т.е. когда в правой части формулы участвует понятие, определяемое левой частью. Например, пусть необходимо ввести понятие , под которым понимался любая непустая последовательность цифр 0 и 1. Тогда простое и компактное рекурсивное определение с помощью метаформул выглядит так: ::= 0|1 ::=| кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Язык БНФ (пример понятия «двоичный код») Для задания синтаксических конструкций произвольной длины часто используют фигурные скобки как метасимволы. Фигурные скобки означают, что конструкция может повторяться нуль или более раз. В частности, термин можно определить по другому, а именно: ::={} Для полноты множества синтаксических конструкций, необходимо определить конструкцию : ::=. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Синтаксическая диаграмма Синтаксическая диаграмма является графическим представлением значения метапеременной метаязыка. Диаграмма состоит из основных символов или понятий языка. Каждая диаграмма имеет входящую и выходящую стрелки, означающие начало и конец синтаксической конструкции и отражающие процесс ее чтения и анализа. Из каждого элемента выходит одна или несколько стрелок, оказывающих на те элементы, которые могут следовать непосредственно за данным элементом. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Синтаксическая диаграмма :: = Запись эквивалентна метаформуле ::= А|В. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Грамматика языка программирования Описанию грамматики языка предшествует описание его алфавита. Алфавит любого языка состоит из фиксированного набора символов, однозначно трактуемых. Алфавит языков программирования, как правило, связан с литерами клавиатуры печатной машинки. Клавиатуры персональных компьютеров близки к ним по наличию литер. Алфавиты большинства языков программирования близки друг другу и основываются на буквах латинского алфавита, арабских цифрах и общепринятых спецсимволах, таких как знаки препинания, математических операций, сравнений и обозначений. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Элементы алфавита ::= AaBbCcDdEeFf и т.д. ::= 0123456789 ::= */+- ::=.,;:()[]{}':= :: = begin end if then else for next и т.д. ::= | | ::= | | ::= кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Фундаментальных понятия языка Оператор - одно из ведущих понятий всех языков программирования. Каждый оператор представляет собой законченную фразу языка и определяет однозначно трактуемый этап обработки данных. В соответствии с теорией алгоритмов выделяют основные операторы языка: присвоения, условный и безусловный переход, пустой оператор. К производным, не основным, относят составной оператор, оператор выбора, оператор цикла и оператор присоединения. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Фундаментальных понятия языка Величины могут быть постоянными и переменными. Значения постоянных величин не изменяются в ходе выполнения программы. Величина характеризуется типом, именем и значением. Наиболее распространенные типы величин - числовые (целые и вещественные), символьные, логические. Тип величины определяется ее значением. Другая важная классификация величин - простые и структурированные. Простая величина в каждый момент может иметь не более одного значения. Структурированная величина, имея одно имя, может иметь разом несколько значений. Эти значения представляют собой элементы величины. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Структурированная величина Важнейшие характеристики структурированной величины: упорядоченность (да или нет), однородность (да или нет), способ доступа к элементам, фиксированность числа элементов (да или нет). Так, массив является упорядоченной однородной структурой с прямым доступом к элементам и фиксированным их количеством. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Идентификатор Всем программным объектам в языках даются индивидуальные имена. Имя программного объекта называют идентификатором (от слова «идентифицировать»). Чаще всего идентификатором является любая конечная последовательность букв к цифр, начинающаяся с буквы: ::= | | Многим слово «идентификатор» не нравится, и в настоящее время чаще употребляют слово «имя», поскольку ::=. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Объявление переменных Описания или объявления программных объектов связаны с правилами обработки данных. Данные бывают разные и необходимо для каждого из них определить его свойства. Например, если в качестве данных выступает массив, то необходимо задать его размерность, границы индексов, тип элементов массива. Описательная часть языка программирования является необходимой как для системных программистов - разработчиков трансляторов, которые должны, в частности, проводить синтаксическую и семантическую диагностику программ, - так и для «прикладного» программиста, которому объявления программных объектов часто облегчают процесс разработки и отладки программ. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Список наиболее употребительных обозначений типов данных, используемых в описаниях Целый - Integer Вещественный - Real Логический - Boolean Символьный - Char Строковый - String Массив - Array Множество -Set Файл - File Запись - Record Объект - Object кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Переменная Понятие «переменная» в языках программирования отличается от общепринятого в математике. Переменная - это программный объект, способный принимать некоторое значение с помощью оператора присваивания. В ходе выполнения программы значения переменной могут неоднократно изменяться. Каждая переменная после ее описания отождествляется с некоторой ячейкой памяти, содержимое которой является ее значением. Синтаксис переменной, точнее, ее идентификатора, как правило, имеет вид: ::= ——>———> —>———> —>——> —> кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Функция Функция - это программный объект, задающий вычислительную процедуру определения значения, зависимого от некоторых аргументов. Вводится в языки программирования для задания программистом необходимых ему функциональных зависимостей. В каждом языке высокого уровня имеется в наличии библиотека стандартных функций: арифметических, логических, символьных, файловых и т.п. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Процедура Процедура - это программный объект, представляющий некоторый самостоятельный этап обработки данных. Процедуры явились преемниками подпрограмм, которые были введены для облегчения разработки программ еще на самых ранних стадиях формирования алгоритмических языков. Процедура имеет входные и выходные параметры, называемые формальными. При использовании процедуры формальные параметры заменяются на фактические. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Модуль Модуль (Unit) - это специальная программная единица, предназначенная для создания библиотек и разделения больших программ на логически связанные блоки. Модуль - это набор констант, типов данных, переменных, процедур и функций. В состав модуля входят разделы: заголовок, интерфейс, реализация, инициализация. кафедра ЮНЕСКО по НИТ
кафедра ЮНЕСКО по НИТ * Языки высокого уровня Паскаль Бейсик Фортран Си и Си++ Пролог Лисп Delphi кафедра ЮНЕСКО по НИТ