Файл: Классификация языков программирования высокого уровня (Основные сведения о программировании).pdf
Добавлен: 30.03.2023
Просмотров: 213
Скачиваний: 2
СОДЕРЖАНИЕ
ГЛАВА 1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ
1.1. Основные сведения о программировании
1.2. Процесс создания программ
1.4. Качество программ. Методы контроля качества программ
ГЛАВА 2. КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ
2.1. Классификация языков программирования с исторической точки зрения
2.2. Классификация языков программирования с точки зрения основных характеристик
2.3. Краткая характеристика известных языков программирования высокого уровня
ГЛАВА 3. ОСОБЕННОСТИ СОВРЕМЕННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ
3.1. Объектно-ориентированная парадигма программирования
Со времени создания ткацких станков Жаккара и программ Бэббиджа, человечество придумало более восьми тысяч языков программирования
Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты могут владеть десятком и более разных языков программирования.
Физический принцип работы электронных компонентов ЭВМ таков, что компьютер может оперировать только бинарными состояниями электронных цепей (напряжение в цепи либо есть, либо отсутствует). Такая последовательность перепадов напряжения, записанная в виде нулей и единиц, представляет собой язык самого низкого уровня, или машинный код. В самом начале эволюции ЭВМ, человек должен был составлять программы для исполнения на понятном компьютеру языке, в виде машинного кода, и в то время, любая программа для ЭВМ выглядела как последовательность нулей и единиц. С помощью машинного кода, программист мог задавать команды, напрямую оперируя ячейками памяти процессора, и полностью используя возможности машины. Суть этого языка — набор кодов, обязательно понятных процессору, к которому обращаются. «Слова» этого языка называются инструкциями, каждая из которых представляет собой одно элементарное действие для центрального процессора, как, например, считывание информации из одной ячейки памяти. Лишь при понимании устройства компьютерного оборудования и знания этих целочисленных кодов можно было непосредственно управлять процессором.
Запись программ в виде машинного кода очень громоздка и неудобна в использовании. Очень легко допустить ошибку в программе, записав не в той последовательности 1 или 0. Очень сложно читать и модифицировать программу, поскольку машинный код не может быть воспринят человеком напрямую. Кроме того, при программировании в машинных кодах, надо хорошо знать внутреннюю архитектуру ЭВМ, понимать принцип работы центрального процессора и каждого блока. И самый большой недостаток этого языка в том, что программы, записанные в машинном коде, являются машинно-зависимыми, то есть для каждой разновидности ЭВМ необходимо было писать свою программу.
Довольно скоро стало понятно, что процесс формирования машинного кода можно автоматизировать и облегчить. Уже в 1950 году для записи программ стали применять мнемонический язык. Этот язык, получивший название Ассемблер (от англ. assembler «сборщик»), позволил представить машинный код в более удобной для программиста форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова, которые отражали суть команды. Например, на языке Ассемблер команда сложения двух чисел обозначается словом ADD, тогда как ее машинный код может быть таким: 000010.
Ассемблер, как и машинный код, является языком низкого уровня, который ориентирован на конкретный тип процессора и учитывает его особенности. Его операторы близки к машинному коду, и ориентированы на непосредственные инструкции процессору. Появление ассемблера значительно облегчило жизнь программистов, так как теперь, вместо маловразумительной записи, состоящей из рябящих в глазах нулей и единиц, они могли записывать программы мнемоническими командами, состоящими из символов, приближенных к обычному человеческому языку. Для того времени этот язык был новшеством и пользовался популярностью, так как позволял писать программы небольшого размера, и был гораздо удобнее в использовании, чем «голый» машинный код.
Шло время, росла сложность задач и объем программ. Появилась необходимость исполнения одного программного кода на процессорах с разной архитектурой. Ассемблер перестал отвечать возрастающим требованиям программистов, его недостатки не позволяли использовать язык в разработке больших программных комплексов, что и привело к появлению языков третьего поколения — языков высокого уровня, о которых и пойдет речь далее.
В 1954 году была начата разработка принципиально нового языка высокого уровня, лишенного недостатков низкоуровневых машинных кодов и ассемблера, получившего название Фортран (англ. FORTRAN — FORmula TRANslator). К разработке такого языка подтолкнули новые возможности внедрённого в 1954 году компьютера IBM 704, в котором на аппаратном уровне были реализованы индексная адресация и операции с плавающей точкой.
Программы, созданные на Фортране, были ближе к человеческому языку, чем к языку машинных кодов, и не могли выполняться непосредственно на аппаратном уровне ЭВМ, поэтому понадобилось создание транслятора («переводчика») с языка понятного человеку, на язык понятный процессору. Транслятор (компилятор) для Фортрана появился в апреле 1957 года.
Фортран, как высокоуровневый язык, значительно облегчал написание программ, поскольку в нем используются некоторые привычные слова разговорного языка и общепринятые математические символы. Фортран и другие высокоуровневые языки более удобны для человека, с их помощью можно писать программы до нескольких тысяч строк длиной. С появлением компилятора, язык стал машинно-независимым, и такой подход позволял писать программы, не задумываясь о внутренней архитектуре ЭВМ, позволяя программисту сосредоточиться на чистом алгоритме, а не на его аппаратной реализации. Стал возможен запуск одной и той же программы на разных по внутреннему устройству машинах, что способствовало обмену идеями и воплощениями идей (программами).
Особенностью появившихся императивных языков высокого уровня было следующее [15][23]:
• Одна инструкция (оператор) высокого уровня, соответствовала последовательности ряда команд низкого уровня.
- Возможность повторного использования ранее записанных программных блоков. Эти блоки называются функциями или процедурами [19][24].
- Снижение зависимости от аппаратной архитектуры ЭВМ
Характерные примеры императивных языков программирования:
- Алгол,
- Паскаль,
- COBOL,
В 60-е годы[6][25] появляется декларативный подход к программированию. Программа больше не является набором команд и описанием действий, которые необходимо выполнить. Программист работает над набором инструкций и абстрактных понятий, которые могут быть обобщены. [9, с.67]
Конкретные примеры декларативных языков программирования:
- LISP,
- Haskell,
- SML,
- Пролог.
В 70-е годы появились логические языки программирования. Суть логического программирования [10][26]:
• программа представляет собой набор правил или логических операторов;
• используется логика причинно-следственных связей.
Языки программирования логики подходят для экспертных систем и сосредоточены на поддержке бизнеса.
Конкретными примерами языков логического программирования являются: [19][27]
- Пролог
- Mercury
В 80-е годы появились объектно-ориентированные языки программирования. Особенностью этих языков было:
- программа представляет собой описание объектов, их атрибутов, классов, отношений, взаимодействий между ними и методов;
- концептуальная близость к предметной области;
- поддержка механизма обработки событий
Конкретные примеры объектно-ориентированного языка программирования: [6][28]
- C ++
- C ++ / CLI
- Ява
- JavaScript
- С
- С#
2.2. Классификация языков программирования с точки зрения основных характеристик
Языки программирования могут быть классифицированы по различным критериям. [16][29]. Пример классификации языков программирования приведен на рисунке 8.
Рассмотрим наиболее важные характеристики языков программирования:
-
-
- - по степени ориентации на возможности ЭВМ [4][30]:
- машинно-зависимые - Некоторые языки ориентированы на низкий уровень, конкретной вычислительной машины;
- машинно-независимые - предпочитают использовать абстрактные модели вычислений.
- - по степени ориентации на возможности ЭВМ [4][30]:
-
Рисунок 8– Общая классификация языков программирования
-
-
- - по типу решаемых задач [4][31]:
- языки системного программирования – предназначены для написания системного кода программ;
- языки прикладного программирования – ориентированы на решения задач в определенной области. Язык HTML, например, был разработан специально для web-технологий;
- - по степени детализации алгоритма [6][32]:
- языки низкого уровня – предназначены для написания высокопроизводительного кода, ориентированного на конкретное устройство;
- языки высокого уровня [12][33] – языки ориентированные на использование функций, модулей и классов;
- языки сверхвысокого уровня [12][34] - с очень высоким уровнем абстракции. Группа языков, используемых для быстрого прототипирования.
- - по типу решаемых задач [4][31]:
-
Рисунок 9 – Классификация по степени детализации
-
-
- - по способу получения результата (рис. 10) [6][35]:
- процедурные - сборка модулей на основе функций;
- декларативные (функциональные и логические) - ближе по духу к математике, что позволяет описать желаемые свойства, не обозначая конкретные шаги для их достижения.;
- объектно-ориентированные [15][36] – основные понятия: класс, наследования, полиморфизм, методы, абстрактные типы данных;
- - по возможности создания новых типов данных и операций:
- расширяемые;
- нерасширяемые;
- - по способу получения результата (рис. 10) [6][35]:
-
Рисунок 10 – Классификация по способу получения результата
-
-
- – по модели трансляции (Рисунок 11) [6][37]
-
Программа, написанная на языке высокого уровня [15][38], перед исполнением должна быть преобразована в программу на языке машины. Этот процесс называется трансляцией или компиляцией. Согласно типу выходных данных, существуют два основных типа трансляторов:
Рисунок 11 – Классификация по модели трансляции [18][39]
- Компиляция окончательного исполняемого кода [18][40];
- Компилирование интерпретируемого кода, для которого требуется дополнительное программное обеспечение.
Конечный исполняемый код - это приложения, реализованные как EXE-файлы, DLL-библиотеки [20][41], COM-компоненты. Интерпретируемый код включает в себя байт-код JAVA-программ, исполняемых виртуальной машиной JVM.
Программа, написанная на языке программирования высокого уровня, называется исходной программой, и каждый независимый программный блок, который формирует эту программу, является программным модулем. Чтобы перевести исходную программу в ее исполняемый файл, транслятор выполняет определенную последовательность действий.
Эта последовательность зависит как от языка программирования, так и от конкретной реализации самого транслятора. Во время трансляции важно не просто скомпилировать программу, но и получить довольно эффективный код.
Во время трансляции выполняется анализ исходной программы, а затем синтез исполнимой формы этой программы.
-
-
- - по степени ориентации на класс задач [6][42]:
- проблемно-ориентированные – решают задачи в узком классе задач;
- универсальные языки – могут использоваться для широкого класса задач;
- - по степени ориентации на класс задач [6][42]:
-
2.3. Краткая характеристика известных языков программирования высокого уровня
Как уже говорилось выше, на текущий момент известно более восьми тысяч языков программирования. Рассмотрим некоторые языки, получившие наибольшее распространение (рис. 12).
1.Бейсик (Beginner's All-purpose Symbolic Instruction Code) [18][43]– данный язык популярен среди начинающих изучать программирование. Используется при написании простых программ.
2. Паскаль (Pascal)[1][44] – используется в школьном и университетском изучении программирования. Потомками языка Паскаль являются следующие языки: Модула, Ада, Дельфи.