Файл: Классификация языков программирования . Критерии выбора среды и языка разработки программ.pdf

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

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

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

Добавлен: 04.04.2023

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

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

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

- в середине 1970-х гг. группа специалистов представила язык Smalltalk, который был уже всецело объектно-ориентированным;

- в период с 1969 по 1973 гг. велась разработка языка Си, популярного и по сей день, и ставшего основой для множества последующих языков, например, столь популярных, как С++ и Java;

- в 1972 г. был создан Пролог – наиболее известный (хотя и не первый, далеко не единственный) язык логического программирования;

- в 1973 г. в языке ML была реализована расширенная система полиморфной типизации, положившая начало типизированным языкам функционального программирования.

Каждый из этих языков породил по семейству потомков, и большинство современных языков программирования, в конечном счете, основано на одном из них. Кроме того, в 1960-1970-х гг. активно велись споры о необходимости поддержки структурного программирования в тех или иных языках [21, с. 90].

Голландский специалист Э. Дейкстра выступал в печати с предложениями о полном отказе от использования инструкций GOTO во всех высокоуровневых языках. Развивались также приемы, направленные на сокращение объема программ и повышение продуктивности работы программиста и пользователя.

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

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

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

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


Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ [20, с. 90].

К языкам программирования высокого уровня относят Фортран (переводчик формул – был разработан в середине 50-х гг. программистами фирмы IBM и в основном используется для программ, выполняющих естественно-научные и математические расчеты), Алгол, Кобол (коммерческий язык – используется, в первую очередь, для программирования экономических задач), Паскаль, Бейсик (был разработан профессорами Дармутского колледжа – Джоном Кемени и Томасом Курцом), Си (Деннис Ритч – 1972 г.), Пролог (в основе языка лежит аппарат математической логики) и т.д. [11, с. 931].

Эти языки машинно-независимы, так как они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов.

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

Языки программирования также можно разделять на поколения [21, с. 90]:

- языки первого поколения: машинно-ориентированные с ручным управлением памяти на компьютерах первого поколения;

- языки второго поколения: с мнемоническим представлением команд, так называемые автокоды;

- языки третьего поколения: общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль;

- языки четвертого поколения: усовершенствованные, разработанные для создания специальных прикладных программ, для управления базами данных;

- языки программирования пятого поколения: языки декларативные, объектно-ориентированные и визуальные. Например, Пролог, ЛИСП (используется для построения программ с использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi.

Языки программирования также можно классифицировать на процедурные и непроцедурные. В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры Говоря о программировании в Интернете, часто имеют в виду создание публикаций с использованием языка разметки гипертекстовых документов – HTML. Применение специальных средств (HTML-редакторов) позволяет не только создавать отдельные динамически изменяющиеся интерактивные HTML-документы, используя при этом данные мультимедиа, но и редактировать целые сайты [10, с. 71].


В книге Т. Пратта и М.Зелковича языки программирования разделены на четыре группы [23]:

- императивные;

- аппликативные;

- основанные на системах правил;

- объектно-ориентированные.

Приведены описания этих групп языков, но четких признаков, по которым тот или иной язык программирования относится к определенной группе не выделено.

Кобелев И.А., Иванова Л.В., Чекушина В.Е. предлагают разделить все языки программирования четко на две группы: императивные и функциональные [14, с. 56].

Таблица 2

Классификация языков программирования по И.А. Кобелеву, Л.В. Ивановой, В.Е. Чекушиной

Синонимы

Императивные

Функциональные

процедурные, алгоритмические

аппликагивные

Память

Система «склада». Изначально «склад» заполняется исходными данными, получаемыми непосредственно (с помощью специальной операции присваивания) или извне (с устройств ввода). Далее, данные берутся из одного «помещения» склада, обрабатываются (изменяются) и размещаются в другом. Результат – появление требуемых данных в указанном «помещении» склада (заполнение видеопамяти обеспечивает вывод ответа на мониторе ПК).

Отсутствие «склада». Для полу- чения данных один «специалист» требует их непосредственно от другого «специалиста», тот от следующего.

Переменная

Фиксированное помещение выше упомянутого «склада». Всегда глобальны, но придуманы способы «скрытия» отдельных «помещений», например системы «видимости» имен переменных, позволяющие иметь локальные переменные.

Информация, передаваемая от одного процесса обработки другому. Существует лишь для момента процесса передачи. Всегда локальны.

Теоретическая база

Принципы фон-Неймана, машина Тьюринга.

Исчисление Черча, вычислимые функции.

Режим работы

Компиляционный. Высокое быстродействие.

Интерпретационный. Режимы реального времени.

Описание действий (ироцедурность).

Описание возможностей (декларативность).

Источник: Кобелев И.А., Иванова Л.В., Чекушина В.Е. Два типа языков программирования // Современные проблемы науки и образования. – 2014. – №4. – С. 56.

Императивные (процедурные) языки программирования (ЯП) задают вычисления как последовательность команд (операторов). Они ориентированы на компьютеры с архитектурой фон Неймана [20, с. 63].


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

Основные понятия императивных ЯП тесно связаны с компонентами компьютера [3, с. 230]:

- переменные различных типов (моделируют ячейки памяти);

- операторы присваивания (моделируют пересылки данных);

- повторения действий в форме итерации (моделируют хранение информации в смежных ячейках памяти).

Таблица 3

Классификация императивных языков программирования

Переменные

Подпрограммы

Проблемы

Явно глобальные. Только базовые типы данных.

Слабо представлены

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

Появление областей видимости

Разделяются на

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

Хранение подпрограмм

Унификация подпрограмм

Активное применение указателей. Возвращение структурированных объек тов подпрограммами, как адресов этих объектов. Появление проблемы «очистки мусора».

Объединение в единое целое данных и средств их обработки (объекты).

Объектно-ориентированные языки программирования

Использование программными системами уже имеющихся средств – объектов операционной системы.

Источник: Кобелев И.А., Иванова Л.В., Чекушина В.Е. Два типа языков программирования // Современные проблемы науки и образования. – 2014. – №4. – С. 56.

В языки программирования первой подгруппы получение информации обеспечивается, в основном, присваиванием. Появляется режим пакетной обработки информации. По сути, получение пакета – обобщение операции присваивания. Для работы этих языков программирования операционная система не нужна. Средства языка достаточны для замены операционной системы [16, с. 24].

Много персональных компьютеров («Ямаха», «БК») выпускались с встроенным языком программирования, таким, как Бейсик или Фокал. К языкам этой группы можно отнести ассемблер, интерпретаторы Basic, Фортран. Язык ассемблера можно и отделить, как имеющий слабую типизацию данных, «машиннозависимый» язык. Фортран тоже занимает особую позицию, но с другой стороны: имеет достаточно серьезную типизацию данных [10, с. 71].


Глобальность переменных приводит к необходимости большого количества переприсваиваний. Перед каждым входом в подпрограмму (GWbasic, Qbasic) выполняется заполнение переменных подпрограммы значениями из переменных основной программы и обратная передача информации после завершения подпрограмм. Недопустимость одноименности переменных в программах и подпрограммах является причиной ошибок в больших программах и затрудняет использование чужих подпрограмм. Во избежание этих трудностей, в языки программирования второй группы, каждой подпрограмме предоставляется своя область определения, в том числе и имен. Появляется иерархия. При необходимости значения переменных берутся из области имен самой подпрограммы, если переменная в подпрограмме не объявлена, ищем в области определения подпрограммы, вызвавшей данную подпрограмму. Оказывается возможным применение рекурсии [24, с. 38].

Примерами языков программирования второй подгруппы являются: QBasic, Паскаль. Во всех рассмотренных языках сохраняется четкое разделение элементов программы на команды и выражения. И при выполнении программ, и при вычислении выражений часто приходится выполнять одинаковые действия, что организуется в виде подпрограмм [14, с. 59].

Подпрограммы – элементы программ получили название «процедуры», фактически, после объявления – отдельные команды программы. Подпрограммы – элементы выражений, называют функциями. С развитием теории алгоритмов, появляется отождествление понятий «алгоритм» и «функция». Как только мы представим исполнение программы вычислением некоторого результата (результатом, кроме данных, может быть и действие), а исходные данные сопоставим с аргументами, разница между процедурами и функциями стирается [14, с. 59].

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

Представителем языков программирования четвертой подгруппы можно считать языки dBASE, FoxPro. Работа с объектами появляется в очередных версиях языка Паскаль, Си и других [14, с. 60].

Языки группы объектно-ориентированных по сути одно и то же. Традиционными остались формы записи основных алгоритмических структур и объявление переменных, как у предшественников, но других различий почти нет. Basic → VisualBasic, Pascal → Delphi, C → C++→C#. Существенную часть программ на этих языках составляют объекты системных библиотек, одних и тех же [14, с. 60].

Функциональные (аппликативные) языки задают вычисления как вызовы функций [20, с. 67].

Синтаксис функциональной программы выглядит следующим образом: functionri(…function2 (function1 (данные))…). В начале вычислении к исходным данным применяется функция function1, затем к полученному промежуточному результату – function2 и т.д. В последнюю очередь применяется функция functionn. Она возвращает ожидаемый результат [20, с. 67].