Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ (Классификация языков программирования)..pdf
Добавлен: 15.06.2023
Просмотров: 210
Скачиваний: 2
ВВЕДЕНИЕ
Современный мир уже смело можно назвать информационным. Стремительное развитие технологий и активные исследования в области науки и техники способствовали появлению возможности хранения огромных объёмом информации и их сверхскоростной обработки. Процесс создания столь сложных ИС требует от разработчиков решения нетривиальных задач, для решения которых требуется тщательно подбирать инструментарий.
Актуальность темы обусловлена необходимостью обоснованного выбора инструментов разработки программного обеспечения.
Цель работы заключается в систематизации накопленных знаний и опыта, а также в определении критериев оценки и выбора, позволяющих осуществить выбор подходящих среды и языка программирования для разработки программного обеспечения, с учетом области применения и множества значимых факторов.
Объектом исследования данного курсового проекта являются языки программирования и среды разработки программного обеспечения.
Предметом исследования данного курсового проекта являются критерии и принципы выбора среды и языка программирования для разработки программного обеспечения.
Задачи исследования:
1) анализ научной литературы по теме языков программирования;
2) анализ и классификация языков программирования;
3) изучение основных понятий и принципов функционирования интегрированных сред разработки программного обеспечения;
4) анализ и классификация критериев выбора языка программирования и среды разработки программного обеспечения.
В работе использованы научные труды множества авторитетных авторов, таких как Вирт, Голицына, Грин, Кнут, Колмогоров, Коротков, Мейерс, Орлов, Пирс, Страуступ, Уэзерелл, Фридман, Харпер, Колдаев, Калашников, Черпаков, Опалева, Зыков, Кундиус, Добрынин, Заговоров, Зимин, Скрипкин и др. Все использованные источники характеризуются высокой надежностью, и опубликованы в известных издательствах, таких как Вильямс, Бином, ИНФРА-М, ЮФУ, Форум, БХВ-Питербург, Юрайт и др.
Классификация языков программирования
Понятие и основные термины
Язык программирования представляет собой систему обозначений, предназначенную для четкого описания программы или алгоритма для вычислительной машины. Все языки программирования относятся к искусственным языкам. Ключевым их отличием от языков естественных является ограниченный набор “слов” и крайне строгие правила их записи. "Слова" такого языка называют командами (или операторами). Из ключевого отличия языков программирования от естественных автоматически вытекает еще одно отличие - свободное толкование выражений, которое характерно для естественных языков, в языках программирования недопустимо. [1]
К языкам программирования предъявляются очень строгие требования. Основными из них являются [15]:
- гибкость - имеющийся в языке ограниченный набор средств представления должен обеспечивать сравнительно удобное, несложное описание известных методов математических вычислений;
- единство - в различных фрагментах алгоритма, при обозначении идентичных или родственных терминов, необходимо использовать одни и те же символы. При этом необходимо, по возможности, минимизировать количество этих символов;
- модульность - должна обеспечивать возможность описывать сложные алгоритмы в формате комплекса элементарных модулей, которые, в свою очередь, можно составлять по отдельности и использовать в алгоритмах различной сложности;
- наглядность - в языке, насколько это возможно, должны использоваться уже существующие символы, являющиеся хорошо известными и понятными для разработчиков и пользователей;
- однозначность - запись одного алгоритма должна приводить только к одному результату.
Количество реально применяемых языков программирования, на сегодняшний день, составляет несколько сотен; каждый из них имеет свою область применения. [10]
Все алгоритмы, по сути, представляют собой предопределенную последовательность действий, при выполнении которых за определенное количество шагов, осуществляется переход от исходных данных к конечному результату.
Уровень языка определяется степенью детализации последовательных действий (предписаний), и уровень тем выше, чем менее детализированы предписания. [13]
Данный критерий подразумевает разделение языков программирования на следующие три уровня:
- машинные языки;
- машинно-оpиентиpованные языки (ассемблеры);
- машинно-независимые (высокоуровневые) языки.
Машинно-ориентированные и машинные языки условно относят к низкоуровневым языкам. Такие языки требуют описания процесса обработки информации в мельчайших деталях. [2]
В свое время, высокоуровневые языки больше напоминают имитацию естественных языков. В них используются некоторые наборы слов разговорных языков, а также множество общепринятых математических символов. Разумеется, такие языки гораздо удобнее для человека и ориентированы именно на разработчика, в то время как низкоуровневые языки ориентированы на команды процессора.[17]
Программирование на низкоуровневых языках позволяет разработчику полностью контролировать все команды и ячейки памяти, что, в результате, позволяет, при необходимости, написать более эффективную программу. Но, в таком случае, процесс разработки становится крайне трудоемким и утомительным, а сам программный код получается громоздким, трудно воспринимаем, и как следствие, программа плохо поддается отладке, модификации и модернизации. [4]
Для решения этих проблем и были разработаны высокоуровневые языки. Они позволили разработчикам освободиться от учета специфик конкретных систем и их архитектур.
Высокоуровневые языки позволили записывать алгоритмы вычисления сложных формул без разбиения на отдельно взятые операции, таким образом, каждая громоздкая последовательность действий была заменена компактным выражением, в котором использовалась привычная математическая символика. Такой подход значительно упростил процесс написания программного кода, но еще больше упростилось восприятие чужого кода. [12]
Классификация
Языки программирования низкого уровня
Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, байт-код, Microsoft.NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских). [26]
Машинный код (платформенно-ориентированный код), машинный язык — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.
Компьютерная программа, записанная на машинном языке, состоит из машинных инструкций, каждая из которых представлена в машинном коде в виде так называемого опкода — двоичного кода отдельной операции из системы команд машины. [11]
Для удобства программирования вместо числовых опкодов, которые только и понимает процессор, обычно используют их условные буквенные мнемоники. Набор таких мнемоник, вместе с некоторыми дополнительными возможностями, называется языком ассемблера.
Иногда одно мнемоническое обозначение соответствует целой группе машинных команд, выполняющих одинаковое действие над разными ячейками памяти процессора. [24]
Кроме машинных команд языки программирования низкого уровня могут предоставлять дополнительные возможности, такие как макроопределения (макросы). При помощи директив есть возможность управлять процессом трансляции машинных кодов, предоставляя возможность заносить константы и литеральные строки, резервировать память под переменные и размещать исполняемый код по определенным адресам. Часто эти языки позволяют работать вместо конкретных ячеек памяти с переменными. [16]
Каждая модель процессора имеет свой собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B. Если процессоры A и B имеют некоторое подмножество инструкций, по которым они взаимно совместимы, то говорят, что они одной «архитектуры» (имеют одинаковую архитектуру набора команд). [9]
Машинный код можно рассматривать как примитивный язык программирования или как самый низкий уровень представления скомпилированных или ассемблированных компьютерных программ.
Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода и трудоёмкости ручного управления ресурсами процессора, за исключением ситуаций, когда требуется экстремальная оптимизация. Поэтому подавляющее большинство программ пишется на языках более высокого уровня и транслируется в машинный код компиляторами. [8]
Машинный код иногда называют нативным кодом (также собственным или родным кодом), когда говорят о платформенно-зависимых частях языка или библиотек.
Программы на интерпретируемых языках (таких как Бейсик или Python) не транслируются в машинный код; вместо этого они либо исполняются непосредственно интерпретатором языка, либо транслируются в псевдокод (байт-код). Однако интерпретаторы этих языков (которые сами можно рассматривать как процессоры), как правило, представлены в машинном коде. [2]
В некоторых компьютерных архитектурах поддержка машинного кода реализуется ещё более низкоуровневым слоем программ, называемых микропрограммами. Это позволяет обеспечить единый интерфейс машинного языка у всей линейки или семейства компьютеров, которые могут иметь значительные структурные отличия между собой, и облегчает перенос программ в машинном коде между разными моделями компьютеров. Примером такого подхода является семейство компьютеров IBM System/360 и их преемников.
Языки программирования высокого уровня
Пожалуй, самым важным преимуществом высокоуровневых языков программирования, в сравнении с языками низкого уровня, можно смело назвать их универсальность, то есть независимость от аппаратной платформы. Программы, написанные на высокоуровневых языках, могут функционировать на любом компьютере. Разработчику нет необходимости изучать систему команд процессора, предполагаемого к проведению вычислений. [22]
Переход от одной аппаратной платформы к другой не сопровождается редактированием программного кода. Как уже упоминалось выше, программа написанная на высокоуровневом языке программирования проста для понимания, и любой специалист, имеющие необходимые знания используемого языка программирования и характер задачи, сможет с легкостью читать и модифицировать исходный код.
Таким образом, можно сказать, что высокоуровневый язык программирования - это не только способ взаимодействия разработчика с машиной, но также, и способ взаимодействия разработчиков между собой.
Исходя из вышесказанного, следует сформулировать ключевые преимущества высокоуровневых языков программирования[21][22][25]:
- алфавит высокоуровневого языка программирования значительно шире машинного алфавита, что способствует существенному повышению наглядности исходного кода программы;
- в высокоуровневых языках всем данным присваиваются персональные имена, которые выбираются самим разработчиком, что крайне удобно для восприятия при условии, что все имена являются осмысленными;
- для задания требуемых операций используются общепринятые математические обозначения; [21]
- как правило, в высокоуровневых языках существует возможность предусмотреть гораздо более широкий диапазон типов данных, в сравнение с набором типов данных низкоуровневых языков;
- набор допустимых к применению операций, является независимым от набора операций процессора, его выбор основывается на соображениях удобства формулировки алгоритма решения поставленной задачи, в зависимости от класса задачи;
- предложения имеют достаточно гибкий и удобный в использовании формат, таким образом, появляется возможность формирования достаточно содержательного этапа обработки данных при помощи всего одного предложения. [25]
Кроме прочего, аппаратная независимость высокоуровневых языков, (кроме упрощения процесса, а соответственно и скорости, разработки) позволяет повысить надежность разрабатываемых программ.
Основными компонентами высокоуровневых языков являются[23]:
- алфавит;
- семантика;
- синтаксис.
Алфавитом называется фиксированный для конкретного языка набор базовых символов. Исходный код любой программы на конкретном языке должен состоять только из набора символов, определенных для данного языка, использование любых других символов строго исключается.
Синтаксис представляет собой набор правил, используемый при построении предложений. Синтаксис предназначен для определения правильности построенного предложения. Если быть предельно точным, то следует сказать, что синтаксис представляет собой набор правил, которые определяют, какие из используемых комбинаций символов представляют собой осмысленные предложения на используемом языке. [12]