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

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

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

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

Добавлен: 05.04.2023

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

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

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

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

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

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

Транслятор - это программа или техническое средство, которое выполняет перевод программы в одной архитектуры устройства на другую. Иными словами преобразует программу, написанную на одном из языков программирования, в бинарный файл программы, состоящей из машинных команд, либо непосредственно выполняет действия программы. А также, транслятор представляет собой программу, на основе которой машина преобразует вводимые в нее программы на машинный язык, поскольку вычислительная машина может выполнять программы, записанные только на языке машины, и алгоритмы, заданные на другом языке, должны быть перед их выполнением переведены на машинный язык.

Трансляторы реализуются в виде: интерпретаторов, компиляторов, препроцессоров и эмуляторов.

Интерпретатор переводит каждую команду программы с одновременным ее выполнением и, если обнаруживает ошибку, сообщает о ней и прекращает выполнение программы.

А также интерпретатор, превращают часть программы в машинный код. После выполняют его и переходят к следующей части. Но метод интерпретации имеет два недостатка:

  • интерпретирующая программа должна находиться в памяти ЭВМ в течение всего процесса выполнения исходной программы, т. е. занимать определенный объем памяти;
  • процесс трансляции одного и того же оператора повторяется столько раз, сколько раз должна выполняться эта команда в программе, что резко снижает производительность работы программы.

Несмотря на вышеперечисленные недостатки, трансляторы-интерпретаторы получили достаточное распространение.

Компиляторы[9] - превращают текст программы в машинный код. Этот код можно сохранить, а затем использовать уже без компилятора. Например, файлы с расширением *. exe.

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


Данный процесс программы включает два действия:

  • анализ (определение правильности записи исходной программы в соответствии с правилами построения языковых конструкций входного языка)
  • синтез (генерирование эквивалентной программы в машинных кодах).

Препроцессор - это транслятор без создания исполняемого файла или выполнения программы.

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

Препроцессоры бывают синтаксические и лексические.

Синтаксические препроцессоры впервые появились в семействе языков Lisp. Их роль заключалась в обработке синтаксических деревьев согласно набору правил, определенных пользователем. Для некоторых языков программирования, правила писались на том же самом языке, что и сама программа (симметрия компиляции). Используются обычно для уточнения синтаксиса языка, расширения языка путем добавления новых примитивов, или встраиванием предметно-ориентированного языка программирования в основной язык.

Примерами служат такие языки, как Lisp и OCaml. В некоторых языках используется полностью независимый язык для описания преобразований: XSLT препроцессор для XML или его аналог со статическими типами CDuce.

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

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

1.3 Непроцедурные языки программирования

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


Источник: Основы алгоритмизации и программирования : учебное пособие / Г. Р. Кадырова. - Ульяновск : УлГТУ, 2014. 95 с. . Раздел: Языки и методологии программирования., Классификация языков программирования. с.15., Рис 2.1 .

Объектно-ориентированный язык окружает себя множеством независимых объектов. Каждый объект ведет себя подобно отдельному компьютеру, их можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования. Наиболее популярный язык программирования: Си++. Для широкого круга используется : Delphi и Visual Basic.

Для признания проекта объектно-ориентированным, объекты должны соответствовать таким требованиям, как : инкапсуляция, наследование и полиморфизм.

Инкапсуляция – механизм, который объединяет данные и код. Управляет этими данными, а также защищает и то, и другое от внешнего вмешательства. В объектно-ориентированном программировании код и данные могут быть объединены вместе. Объект создается посредством объединения кода и данных.

Наследование – свойство объектов порождать своих «потомков». Это значит, что новый объект можно определить на основе уже существующих объектов, При этом он будет собирать в себе все свойства и методы родительского. Наследование полезно, когда требуется создать новый объект, обладающий дополнительными свойствами по сравнению со старым.

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

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

При использовании декларативного языка программист указывает :

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

Процедуру его получения («алгоритм») программист не выстраивает В этих языках отсутствует понятие «оператор» или «команда».

К подвидам декларативного языка программирования относятся - логическое функциональное программирование.

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


Этот язык ориентирован на систематическое и формализованное описание задачи. Цель заключается в решении, исходя из составленного описания.

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

Язык логического программирования несомненно формализует логику поведения. Применим для описаний правил принятия решений. Но недостатком этого языка приходится низкое быстродействие (из-за метода проб и ошибок посредством поиска с возвратами).

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

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

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

Этот подход породил целое семейство языков. Родоначальником этого семейства стал язык программирования LISP.

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

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

II. КРИТЕРИИ ВЫБОРА ЯЗЫКА ПРОГРАММИРОВАНИЯ

2.1 Факторы выбора

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


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

Очень важно, при выборе языка нужно учитывать множество факторов. К примеру, если при разработке динамической Web-страницы в качестве лучшего варианта нужно выбирать JavaServer Pages (JSP)/сервлеты, PHP или похожий язык сценариев. Нет какого-то одного языка, который является лучше остальных. У каждого из нас есть возможность выбора языка при определенных факторах. Кто-то отдает свое препочтение производительности и безопасности корпоративных приложений, а кто-то первым делом обращает внимание на количество строк кода. В любом случае это решение достигается с помощью компромиссов.

Джерри Регунад и Неха Джайн утверждают :

"После получения проекта или задания нужно выполнить подготовительную работу до решения поставленной задачи. Очень часто выбор языка не рассматривается как часть этой подготовительной работы."[10]

На месте выбора, как мы и приводили выше важным может оказаться количество строк кода; Например: очевидным выбором для нас, как для специалистов будет язык, который позволяет выполнить задачу в 10 строк кода, вместо 20. Первым делом мы работаем, чтобы получить решение. А позже уже заботимся о читаемости или производительности.

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

Правильный выбор языка программирования косвенно влияет на создание компактного, простого в отладке, расширения, документирования и исправления ошибок решения.

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

  • Целевая платформа.
  • Гибкость языка.
  • Время исполнения проекта.
  • Производительность.
  • Поддержка и сообщество.

2.2 Целевая платформа

Целевая платформа, является одним из наиболее важных факторов, на котором будет работать программа. Рассмотрим на примере Java™ и C.

Если программа написана на C и должна работать на машинах с Windows® и Linux®, потребуются компиляторы для платформ и два разных исполняемых файла. В случае с Java, сгенерированного байт-кода будет достаточно для выполнения программы на любом компьютере, на котором имеется виртуальная Java-машина.