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

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

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

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

Добавлен: 01.04.2023

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

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

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

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

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

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

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

На рисунке 1 представлена классификация языков программирования.

Согласно анализу ряда литературных источников [3] установлено, что по степени детализации алгоритма языки программирования на следующие (рисунок 1).

Рисунок 1 – Виды по степени детализации алгоритма языки программирования

Низкоуровневые (Ассемблер) – это языки программирования, близкие к программированию в машинных кодах, на базе использования виртуального или реального вычислительного процессора. При обозначении низкоуровневых команд часто используется мнемонические методы и механизмы. Это делает возможным оперировать командами не в виде последовательностей единиц и нулей, а в форме смысловых сокращений слов, используемых в естественных языках. Примером языка такого типа является ассемблер, представляющий собой целый спектр групп языков, реализованных для разных архитектур, т.к. для одного процессора может существовать несколько видов ассемблера. Они могут быть идентичными в машинных командах, однако, часто различаются макросами и директивами.


Высокоуровневые (C#, Java)– языки, которые разработаны для обеспечения платформенной независимости создаваемых алгоритмов. В данном случае имеется в виду, что различные платформенные зависимости перекладываются на программы-трансляторы, которые осуществляют компиляцию текста, который создан на высокоуровневом языке, к виду машинных инструкции (команд). С этим связана необходимость разработки уникальных трансляторов высокоуровневого языка для каждой платформы.

Сверхвысокоуровневые (Алгол-68) — языки, обладающие еще большим уровнем абстракции, чем высокоуровневые языки программирования, в связи, с чем их используют для разработки и решения, специфических предметно-ориентированных приложений и задач. В таких языках программирования часто реализован синтаксис, не используемый в других языках. В сверхвысокоуровневых языках не описывают детали реализации («как делать»), реализуется концепция (принцип «что делать»).

Существующие высокоуровневые языки программирования по способу получения результата делятся на следующие (рисунок 2).

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

Процедурные (Basic, Pascal, C), предназначенные для четкого и прямолинейного описания алгоритмов. При решении задачи такие языки требуют явного описания процедур решения.

Декларативные (SML, Prolog, Haskell) – языки, в которых описывается требуемые результаты работы программы. Примером являются логические языки программирования, которые основываются на системах правил (Prolog). В свою очередь декларативные языки делятся на логические и функциональные. Особенностью таких языков является реализованная в них семантика. Концепция данной семантики состоит в том, что смысл каждого оператора не зависит от его использования и детализации в коде.

Логические (Planner, Mercury и др.) – языки, ориентированные на формализованное и систематическое описание поставленной задачи таким образом, чтобы получаемое решение следовало из этого описания. При этом соответствующие программные действия выполняются лишь в случае наличия необходимых разрешающих условий.

Функциональные (Lisp, ML и др. – языки, которые объединены различными подходами к определению вычислительных процессов на базе методов символьной обработки и строгих абстрактных понятий.  Большая часть таких языков являются гибридными, т.е. имеют свойства как императивных, так и функциональных языков (Scala и Nemerle).

Объектно-ориентированные (C++, Object Pascal, Java и др.) – языки, базирующиеся на понятии объекта, который сочетает данные и возможные действия над ними. Программный код на таком языке, в процессе решения задачи описывает ее как часть, которая относится к данной задаче. Это связано с тем, что такой подход описания (в форме системы объектов, которые взаимодействуют) является более естественным для человека, чем описание взаимодействующих процедур [10].


По возможности создания новых типов данных и операций языки программирования представлена на рисунке 3.

Рисунок 3 – Классификация по возможности создания новых типов данных и операций языки программирования

Расширяемые (Seed7, Stratego и др.) – языки программирования, которые содержат механизм расширения без модификации компилятора, конструкции для манипуляции и расширения дерева кода (например, макросы) и гибкие средства написания расширений. Для таких языков характерна реализация посредством макросов и конструкций, в частности, именно таким образом в языке Nemerle организованы все условные операторы и циклы, кроме match [4].

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

2.2. Современные высокоуровневые языки программирования

На рисунке 4 приведена диаграмма популярности и распространённости современных языков программирования за 2011 – 2014 года.

Рисунок 4 – Диаграмма распространённости языков программирования

Спецификой современных языков программирования высокого уровня является отсутствие необходимости в учёте особенностей отдельных архитектур и систем, что позволяет переносить и использовать разработанные приложения на разных компьютерах. Достаточно одной предварительной перекомпиляции программного продукта под конкретную операционную систему и архитектуру. Это позволяет сократить время, необходимое на разработку программного приложения, что является критичным параметром при работе над большими проектами [1, 5, 6].

Языки высокого уровня призваны к упрощению процессов решения трудоёмких задач в программировании и парирования существующего и бедующего программного обеспечения. Путём использования интерпретаторов и трансляторов обеспечивается взаимосвязь между программами, которые написаны с помощью языков высокого уровня, с разными операционными системами, средами и программируемыми устройствами. Примерами таких языков являются: C++, Java, C#, PHP, JavaScript, Python, Ruby, Delphi, Lisp, Groove и др. Рассмотрим некоторые из них подробнее [19].


С++ - это компилируемый, типизированный язык программирования. Основным преимуществом данного языка является полная универсальность, поэтому его чаще всего выбирают профессионалы. Следует заметить, что в данном языке существует достаточно простотой компилятор. Недостатки языка: не слишком удобный и простой синтаксис, длинный программный код, что осложняет дальнейшую работу с программой [14].

Python - высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Популярный, суть которого сводится к упрощению процесса разработки сложных программ. Основные достоинства компилятора: многофункциональный, минималистский  и простой. Недостатки: медленный в исполнении, содержит некоторые ошибки в системном коде [16].

PHP – это объектно-ориентированный язык программирования. Данный язык чаще всего применяется при создании веб-ресурсов и сайтов. В наше время он поддерживается подавляющим большинством провайдеров хостинга. Достоинства: гибкие возможности применения на любых ОС, высокая скорость выполнения, удобные механизмы создания пользовательского графического интерфейса. Недостаток языка - не поддерживает много потоковых приложений [13]. 

Java – это кроссплатформенным язык программирования. Он широко востребован на рынке труда. Большинство существующих операционных систем включают его в состав, в связи с тем, что функционирование ряда приложений без данного компилятора будет не эффективной. Недостатки: не высокое быстродействие разработанных приложений, необходимость в обеспечении большого количества оперативной памяти [3, 4, 6].

JavaScript – это язык, назначение которого заключается в обеспечении интерактивности веб-страницам сайта. Область применения языка JavaScript широка: браузеры и их расширения, веб-приложения, прикладное программное обеспечение, серверные решения. Преимущества языка: большое количество специальных библиотек, которые позволяют достигать высокого уровня абстракции реализации кода. Недостатки: низкий уровень безопасности, большое количество багов в плагинах и расширениях [19].

Ruby - это кроссплатформенный многофункциональный язык программирования, который предназначен  для разработки объектно-ориентированных программ. Преимущества языка: лаконичный и простой синтаксис, наличие сборщика мусора, поддержка замыкания с привязкой к заданным переменным, большое количество расширяемых функционал библиотек. Недостатки: слабо описан, из-за чего мало распространен [10]. 


C# - это язык программирования реализует компонентно-ориентированный подход в программировании приложений, что позволяет снизить машинно-архитектурную зависимость полученного кода, благодаря чему достигается высокая степень переносимости и повторного использования кода. Преимущества языка: включает расширенную и гибкую поддержку событийно-ориентированного программирования, эффективно интегрируется с существующими продуктами от Microsoft. Главными недостатками языка является довольно сложный синтаксис и не высокая, в сравнении с языком С++, производительность [5, 9].

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

2.3. Специфика процесса разработки программных приложений на высокоуровневых языках

Согласно мнению ряда авторов [4, 8, 17], процесс создания программы на языке высокого уровня можно представить в виде нескольких этапов (рисунок 5).

Рисунок 5 – Этапы создания программы

1. Постановка задач – производиться техническое описание всех задач и подзадач, которые необходимо реализовать. Данный этап выполняется специалистом, обладающим опытом в предметной области. Необходимо сформулировать цели задач, их содержание и возможные подходы решения [4].

2. Анализ задач – происходит выявление имеющихся исходных данных, на основании чего описывается ожидаемый результат. На данном этапе формируются ограничения, формализуется описание задач, выбираются соответствующие математические модели [17].

3. Разработка алгоритма решения производится на основании составления математического описания.

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