- •Лекция 11
- •2. Этапы становления и развития технологий программирования
- •3. Классификация языков программирования
- •4. Объектно–ориентированная технология программирования. Системы объектно-ориентированного визуального программирования
- •4.1 Отличительные признаки объектно-ориентированного программирования
- •4.2 Системы объектно-ориентированного визуального программирования
- •5. Компиляция программы
3. Классификация языков программирования
Языком программирования называют систему обозначений для описания данных и программ, а также их обработки на ЭВМ. Различают естественные и искусственные языки. Язык программирования относится к искусственным языкам, занимает промежуточное положение между естественными и формальными языками и не допускает неоднозначности и произвольных толкований.
У языков программирования, как и у естественных языков, имеется свой алфавит, синтаксис и своя семантика.
Алфавит – набор различных символов, букв, цифр, специальных знаков, разрешенный в данном языке . Так в машинных кодах алфавит состоит всего лишь из двух символов – «0» и «1».
Синтаксис – это набор правил, которые определяют основные внутренние структуры (конструкции) и последовательности символов, допустимых в данном языке программирования его алфавитом.
Семантика – совокупность правил истолкования конструкций языка, образованных в соответствии с синтаксисом.
Известно несколько подходов к классификации языков программирования. Мы воспользуемся подходом, связанным с поколениями ЭВМ.
Написание программ для ЭВМ первого поколения велось исключительно на машинном языке. Фрагмент программы сложения двух чисел 7 и 5 на машинном языке показан в таблице 11.1.
Таблица 11.1 – Фрагмент программы сложения двух чисел в машинных кодах
Адрес |
Команда, данные |
Содержание операции |
1101 0001 |
0011 1111 |
Запись в регистр А |
1101 0010 |
0000 0101 |
Число 5 |
1101 0011 |
0000 0110 |
Запись в регистр В |
1101 0100 |
0000 0111 |
Число 7 |
1101 0101 |
1000 0000 |
Сложение чисел, находящиеся в регистрах А и В |
1101 1101 |
0111 0110 |
Останов |
Более высоким уровнем, по сравнению с машинными языками являются машинно-ориентированные языки символического кодирования. Основной принцип при создании языков символического кодирования состоит в замене машинных кодов на их буквенные обозначения, а также в автоматизации процесса распределения памяти диагностики ошибок. Наиболее ярким примером таких языков является язык Ассемблера. Тот же самый фрагмент программы (сложения двух чисел 5 и 7) на языке Ассемблера принимает вид, показанный в таблице 11.2 (для учебно-отладочного устройства «Электроника-580»).
Таблица 11.2 - Фрагмент программы сложения двух чисел на языке Ассемблера
Адрес |
Мнемоническая запись команды, данных |
Содержание операции |
8200 |
MVI A |
Запись в аккумулятор |
8201 |
5 |
число 5 |
8202 |
MVI B |
Запись в регистр В |
8203 |
7 |
Число 7 |
8204 |
ADD B |
Сложение чисел, находящиеся в аккумуляторе и регистре В |
8205 |
HLT |
Останов |
Начальный адрес 8200 устанавливается автоматически при сбросе установки. Остальные адреса также устанавливаются автоматически счетчиком команд.
На следующем уровне развития языков находятся процедурно-ориентированные языки (языки высокого уровня. Разработка этих языков непосредственно связана с созданием ЭВМ второго поколения.
Одним из первых таких языков стал язык Фортран (FORmula TRANslator – переводчик формул). Язык создан в 1956 г и в дальнейшем претерпел несколько модификаций (версий) – Базовый Фортран, Фортран IV, Фортран-77. Основное назначение – решение научных и инженерных задач.
В 1960 году Международная конференция а Париже приняла алгоритмический язык Алгол -60 (ALGOritmic Language). Алгол -60 привлек к себе внимание в силу ряда новых обобщающих идей:
- понятия блочной структуры и области действия обозначений, позволяющие разделять работу по составлению больших программ на более обозримые части;
- возможность динамического распределения памяти;
- развитый аппарат вызова процедур.
В 1968 году была разработана его новая существенно усовершенствованная версия Алгол -68 – международный универсальный алгоритмический язык.
Одновременно с Алголом в 1959 – 1960 г.г. разработан язык программирования Кобол (COBOL) – специально ориентированный на разработку бизнес - приложений. Автором языка является Грейс Хоппер.
В эти же годы в Массачусетском технологическом институте разработан язык программирования Лисп (LISP), ориентированный на разработку символьной информации. Языки Лисп и Пролог были разработаны для решения задач, относящихся к искусственному интеллекту. Эти языки позволяют обрабатывать символьную (текстовую) информацию, решать логические и математические задачи. На базе языка Лисп разработана известная математическая система Derive.
Язык Пролог является непроцедурным языком логического программирования. Он выбран основным языком при разработке ЭВМ пятого поколения, которые должны обладать искусственным интеллектом.
Более 100 лет назад один английский мессионер, желая облегчить контакт с туземным населением, выделил из английского языка самую простую и распространенную его часть, содержащую около 300 слов и почти не имеющую грамматики. Это подмножество языка, названное BASIC ENGLISH, действительно оказалось весьма простым в освоении, поэтому вскоре завоевало популярность не только среди туземцев, но и иммигрантов.
Подобную цель создания средства для расширения и облегчения контактов между непрофессионалами и компьютерами поставили перед собой сотрудники Дартсмутского колледжа Дж. Кемени и Т. Курц. Разработанный ими в 1964 году алгоритмический язык BASIC (русская транскрипция – Бейсик) с большим успехом решил поставленную задачу.
Название BASIC является аббревиатурой английской фразы «Beginners All – purpose Symbolic Instruction Code» - многоцелевой язык символических команд для начинающих. Во многом язык в своей разработке обязан языку Фортран.
Важной чертой языка BASIC является не только его простота и доступность, но и предоставляемая им возможность решать задачи с терминалов в режиме разделения времени (в режиме диалога с ЭВМ). В настоящее время имеется множество различных модификаций этого языка. Одна из них - QuickBASIC (QBASIC) поставляется с операционной системой Windows.
Такое обилие языков программирования, появившихся в период разработки и внедрения ЭВМ второго поколения, объясняется невозможностью ни одним из существовавших языков описывать все возникшее к тому времени разнообразие задач.
Третье поколение ЭВМ поставило на повестку дня вопросы поиска нового подхода к созданию универсального алгоритмического языка. Одной из первых попыток такого рода явилось создание фирмой IBM в 1963-1966 г.г. многоцелевого универсального языка PL/1 – Programming Language (отечественная транскрипция ПЛ/1). В основу этого языка были положены языки Фортран, Алгол и Кобол. Язык обладает широким набором средств для эффективного описания вычислительных процессов, задач обработки данных, обработки символьной информации, процессов моделирования, решения логических задач, исследования логических схем, решения задач в реальном масштабе времени и даже для разработки систем математического обеспечения. В языке предусмотрена возможность параллельного выполнения отдельных участков программ.
В 1968-1971 годах Никласом Виртом, профессором Цюрихского Федерального института информационных технологий (Швейцария) был разработан универсальный язык программирования Паскаль (PASCAL), в основе которого лежат основные достоинства языков Алгол-60 и ПЛ/1.
Первоначальная цель разработки языка диктовалась необходимостью инструмента для обучения студентов программированию как систематической дисциплине. Однако очень скоро обнаружилась чрезвычайная эффективность языка Паскаль в решении разнообразных задач: от решения простейших задач вычислительного характера до разработки сложных программных систем - компиляторов, баз данных, операционных систем и т.д. К настоящему времени Паскаль принадлежит к группе наиболее распространенных и популярных в мире языков программирования.
Существуют многочисленные реализации языка Паскаль практически для всех типов ЭВМ, разработаны десятки диалектов и проблемно-ориентированных расширений языка Паскаль, используемых для обучения профессиональному программированию и решения различного класса задач. В дальнейшем Паскаль был стандартизован во многих странах. В 1983 году принят международный стандарт (ISO 7185:1983).
В Паскале реализована идея структурного программирования, благодаря которой реализуется модульное программирование, позволяющее над разработкой сложных программных комплексов одновременно работать нескольким группам программистов.
Вместе с тем, развитие вычислительной техники пошло по пути использования многопроцессорных компьютеров и распределенных вычислительных многомашинных комплексов. В связи с этим возникла потребность в создании языков программирования, позволяющих распараллеливать процессы вычисления и обработки информации.
На основе Паскаля в конце 70-х годов ХХ века по заказу Министерства обороны США во Франции был разработан язык программирования Ада. Это хорошо структурированный язык, однако, слишком громоздкий и многословный. Язык Ада используется при разработке программного обеспечения компьютерных систем, встроенных в самонаводящиеся ракеты, космические аппараты, самолеты и другие подобные объекты. Такие системы работают в реальном масштабе времени, где накладываются чрезвычайно жесткие требования на быстродействие.
Язык Ада поддерживает параллельное выполнение задач в многомашинных и многопроцессорных вычислительных системах. В этом случае программа распараллеливается и отдельные ее операции и составные части выполняются одновременно на нескольких процессорах (нескольких ЭВМ).
Наряду с Адой, имеется язык Linda, специально разработанный для параллельной обработки данных. При использовании этого языка вычислительный процесс делится на группу процессов, среди которых выделяется один – главный. Все процессы выполняются одновременно на разных процессорах и синхронизируются относительно друг друга.
К языкам параллельного программирования относятся также языки Erlang, Modula, Occam.
Создание языков высокого уровня несомненно внесло огромный вклад как в разрешение сложных научных проблем, так и в значительное приближение к программированию простых пользователей. Так, полная программа сложения двух чисел 5 и 7, рассмотренная для машинных языков и языка Ассемблера, создается на языке Паскаль достаточно просто и имеет следующий вид.
PROGRAM ADD(INPUT,OUTPUT);
VAR A,B,C:INTEGER;
BEGIN
A:=5;
B:=7;
C =A+ B;
WRITE (C);
END.
Вместе с тем, создание программ очень большой сложности на языках высокого уровня становится чрезвычайно непростым процессом и длительным во времени. Поэтому приходится создавать специальные языки, обладающие преимуществами машинно-ориентированных языков и языков высокого уровня. Так специально для создания операционной системы UNIX для ЭВМ PDP-11 Денис Ритчи из Bell Laboratories в 1972-1973 г.г. создал язык С (русская транскрипция Си). ОС UNIX была почти полностью написана на языке Си. Из 13 тысяч строк программы только около 800 написаны на Ассемблере. Многие важные идей языка Си являются развитием более раннего языка BCPL, разработанного М. Ричардсом.
Большое влияние на язык Си оказал также язык В, созданный К. Топсоном в 1970 г. для первой системы UNIX на ЭВМ PDP-7. Язык Си – язык относительно низкого уровня, если сравнивать его с языками высокого уровня.. Вместе с тем, низкий уровень языка (т.е. его максимальное приближение к аппаратной части ЭВМ) не умаляет его достоинств. Язык не ориентирован на какую-либо определенную систему. На нем пишут программы, которые без изменения могут использоваться на любой ЭВМ.
