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

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

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

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

Добавлен: 25.04.2023

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

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

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

ВВЕДЕНИЕ

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

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

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

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

Для достижения поставленной цели необходимо решить следующие задачи:

  1. Проанализировать предметную область.
  2. Выделить основные виды систем программирования.
  3. Классификация языков программирования.
  4. Сравнительный анализ языков программирования.
  5. Сформировать критерии выбора среды и языка разработки программ.

1. Анализ предметной области

1.1 Основы программирования

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


Программное обеспечение (ПО) (software) - общий термин для обозначения «неосязаемых» (в отличие от физических) составных частей вычислительной системы. В большинстве случаев он относится к программам, выполняемым вычислительной системой, чтобы подчеркнуть их отличие от аппаратных средств той же системы. Этот термин охватывает как программы в символической записи, так и исполняемые формы этих программ. Все существующее ПО можно разделить на следующие классы:

• системное: операционные системы; драйверы устройств; различные утилиты;

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

• для конечных пользователей: текстовые процессоры; электронные таблицы;

графические редакторы; решатели математических задач; обучающие и контролирующие системы; компьютерные игры; прикладные программы.

Прикладная программа (application program) - любая программа, способствующая выполнению задачи, возложенной на ЭВМ в пределах данной организации, и вносящая прямой вклад в реализацию этой задачи.[1]

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

Известно, что первым программистом была женщина − леди Ада Лавлейс, дочь лорда Байрона. Она разрабатывала программы для одного из первых механических компьютеров, созданного в начале XIX века английским ученым Чарльзом Беббиджом[2]. Однако настоящее программирование в современном понимании началось с момента создания первой электронной вычислительной машины. Но теме не менее, имя этой замечательной женщины - Ada - присвоено одному из самых мощных современных ЯП, который является базовым для министерства обороны США.

Первые ЭВМ, созданные человеком, имели небольшой набор команд и встроенных типов данных, но позволяли выполнять программы на машинном языке. Машинный язык (МЯ)[3] - единственный язык, понятный ЭВМ. Он реализуется аппаратно: каждую команду выполняет некоторое электронное устройство. Программа на машинном языке представляет собой последовательность команд и данных, заданных в цифровом виде. Например, команда вида 1А12 в 16-ричном виде или 0001101000010010 в двоичном виде означает операцию сложения (1А) содержимого регистров 1 и 2[4].


Стремление программистов оперировать [5]не цифрами, а символами, привело к созданию мнемонического языка программирования, который называют ассемблером, мнемокодом, автокодом. Этот язык имеет определенный синтаксис записи программ, в котором, в частности, цифровой код операции заменен мнемоническим кодом. Например, команда сложения записывается в виде AR 1,2 и означает сложение (Addition) типа регистр-регистр (Register) для регистров 1 и 2. Теперь программа имеет более удобочитаемую форму, но ее не понимает ЭВМ. [6] Поэтому понадобилось создать специальную программу транслятор, который преобразует программу с языка ассемблера на машинном языке. Эта проблема потребовала, в свою очередь, глубоких научных исследований и разработки различных теорий, например теорию формальных языков, которые легли в основу создания трансляторов. Практически любой класс ЭВМ имеет свой язык ассемблера. На сегодняшний день язык ассемблера используется для создания системных программ, использующих специфические аппаратные возможности данного класса ЭВМ.

Следующий этап характеризуется созданием языков высокого уровня (ЯВУ)[7].Эти языки являются универсальными (на них можно создавать любые прикладные программы) и алгоритмически полными, имеют более широкий спектр типов данных и операций, поддерживают технологии программирования. На этих языках создается неисчислимое множество различных прикладных программ.

Принципиальными отличиями ЯВУ [8]от языков низкого уровня являются:

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

С усложнением языков программирования усложняются и трансляторы для них. Теперь в набор инструментов программиста, кроме транслятора, входит текстовый редактор для ввода текста программ[9], отладчик для устранения ошибок, библиотекарь для создания библиотек программных модулей и множество других служебных программ. Все вместе это называется системой программирования. Наиболее яркими представителями языков программирования высокого уровня являются FORTRAN, PL/1, Pascal, C, Basic, Ada.

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


Одновременно с развитием универсальных языков высокого уровня стали развиваться проблемно-ориентированные языки программирования, которые решали экономические задачи (COBOL), задачи реального времени (Modula-2, Ada), [10]символьной обработки ( Snobol), моделирования (GPSS, Simula, SmallTalk), численно-аналитические задачи (Analitic) и другие. Эти специализированные языки позволяли более адекватно описывать объекты и явления реального мира, приближая язык программирования к языку специалиста в проблемной области. [11]

Другим направлением развития языков программирования является создание языков сверхвысокого уровня. На языке высокого уровня программист задает процедуру (алгоритм) получения результата по известным исходным данным, поэтому они называются процедурными языками программирования. На языках программирования сверхвысокого уровня программист задает отношения между объектами в программе, например систему линейных уравнений, и определяет, что нужно найти, но не задает, как получить результат. Такие языки еще называют непроцедурными, т.к. сама процедура поиска решения встроена в язык (в его интерпретатор). Такие языки используются, например, для решения задач искусственного интеллекта (Lisp, Prolog, Matlab) [12]и позволяют моделировать мыслительную деятельность человека в процессе поиска решений.

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

1.2 Структуры управления и подпрограммы

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

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


• узлы принятия решения - изображаются в виде ромбов с одной входящей дутой и двумя выходящими (истина и ложь). Эти узлы представляют предикаты, и управление из узла принятия решения передается дальше либо по ветви истина, либо по ветви ложь;

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

Любая блок-схема состоит только из этих трех компонентов.

Правильная программа — блок-схема, являющаяся некоторой формальной моделью структуры управления, которая имеет: одну входящую дугу; одну выходящую дугу; путь от входящей дуги к любому узлу и из любого узла - к выходящей дуге.[13] Первичная программа является правильной программой, которую нельзя разделить на более мелкие правильные программы. Исключением из этого правила является последовательность функциональных узлов, которая считается одной первичной программой.

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

Ни один из этих вариантов первичных программ не представляет эффективной структуры управления в программе. Многие из описанных выше наборов управляющих структур были включены в существующие языки программирования. Эти структуры представляют собой первичные программы с небольшим количеством узлов и просты для понимания.[14]

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

Операторы выбора используются для выбора одного из нескольких возможных путей, по которому должно выполняться вычисление. Обобщенный оператор выбора называется case- оператором (switch-оператор в языке С). Условный оператор является частным случаем case- или switch-оператора, в котором выражение имеет булев тип.

Так как булевы типы имеют только два допустимых значения, условный оператор делает выбор между двумя возможными путями. Конструкция для двух альтернатив на Паскале имеет следующий вид: if L then begin {Действие при L-True} end; else begin {Действие при L=False} end; здесь L-логическое выражение.

Вариант конструкции для нескольких альтернатив имеет вид: Switch

: = 0; L1 : = . . . L2 : = . . . L3 : = . . . if L1 then Swich : = 1; if L2 then Swich : = 2;

if L3 then Swich : = 3; case Swich of 1: begin {Действие при L1=True} end;

2 : begin {Действие при L2=True} end; 3:begin {Действие при L3=Тrие} end; else begin {Вывод сообщения об ошибочном кодировании модуля} end;