Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:

Введение

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

Задачами исследования являются:

  1. Формирование навыков работы с научной литературой и правильного оформления исследовательских работ.
  2. Развитие навыков научно оформлять и излагать свои мысли, выводы и результаты исследования.
  3. Рассмотрение возможностей современных языков программирования.
  4. Проведение анализа функциональных возможностей языков программирования высокого уровня.
  5. Описание специфики графического приложения.
  6. Определение критерий выбора среды и языка программирования.

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

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

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

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

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

1. Анализ современных языков программирования и сред разработки

1.1. Основные термины

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

Компьютерная программа - это набор правил, посредством которых компьютер (ЭВМ) выполняет заданный вычислительный процесс, управляя различными операционными объектами [18].

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

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

Среды разработки программного обеспечения – это некоторое объединение программных средств, которые нужны для создания программного продукта. Обычно среда разработки составляет из себя: компилятор, интерпретатор, отладчик, устройства автоматизации сборки и механизм редактор текста.

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

Интерпретатор — это специализированная программа, умеющая считывать команды, находящиеся в исходных кодах, могментально исполняя их.

Если в среде разработки программного продукта существуют все вышеназванные составные части, тогда такую среду называют «интегрированная». Представленные среды разработки усиливают темп, а также повышают удобность разработки за счёт: автоматизации, возможности производить весь цикл разработки и формирования программного продукта [5].

Обычно среда разработки программного продукта предназначена для разработки только на одном языке программирования. А такая среда разработки как интегрированная, предоставляет право выбрать создателю программы язык программирования для разработки, удобный разработчику (из языков поддерживаемых данной средой). Примером тому служат: Visual Studio, Komodo, Geany, Kylix, NetBeans, Eclipse.

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

Процесс описания таких конструкций и структур на языках низкого уровня, вплоть до машинного кода, трудоёмок, сложен и длителен, поэтому на практике для этого используются различные высокоуровневые языки [11].

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

1.2. Анализ современных методов и базовых интерфейсов построения графических приложений

Командный интерфейс пользователя или интерфейс командной строки (command line interface) — интерфейс пользователя, обеспечивающий взаимодействие пользователя и компьютера в диалоговом режиме посредством ввода команд и данных. Для ввода информации пользователем используется клавиатура или другое символьное устройство ввода [8].

Преимущества командного интерфейса:

  1. Очень низкие требования к аппаратным средствам — минимально для работы требуется клавиатура и символьное устройство вывода или терминал, соединённый с машиной.
  2. Высокая степень унификации — всё взаимодействие обеспечивается через две функции: ввод и вывод символов.
  3. Широкая возможность интеграции программ — посредством использования командного интерпретатора и перенаправления ввода-вывода.

Недостатки:

  1. Неудобный интерфейс — необходимость использование справочника для ввода команд.
  2. Ограниченные возможности вывода информации.

Графический интерфейс пользователя (GUI - Graphical User Interface,) — разновидность интерфейса, в котором все компоненты, представленные пользователю, реализованы в качестве графических изображений [6].

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

Достоинства графического интерфейса:

  1. Удобный интерфейс пользователя.

Недостатки:

  1. Большое потребление оперативной памяти.
  2. Сложность быстрой организации удаленной работы.
  3. Невозможность гибкой и удобной автоматизации.

Речевой интерфейс – разновидность интерфейса пользователя для взаимодействия с программой или системой, основанного на методах обработки речи [11].

Речевой интерфейс обладает рядом преимуществ:

  1. Возможность управления объектом за пределами его видимости.
  2. Отсутствие необходимости в специальной подготовке пользователя.
  3. Возможности использования ручного и речевого ввода информации.
  4. Мобильность и свобода оператора.

Недостатки [12]:

  1. Для создания интерфейса необходимы глубокие знания в различных предметных областях
  2. Для реализации интерфейса требуется использование дополнительных аппаратных средств (микрофон и др.).

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

Преимущества интерфейса:

  1. Трудности подделки идентификационного параметра.
  2. Невозможность утери идентификатора.
  3. Невозможность передачи идентификатора другому человеку.

Недостатки:

  1. Сложности, погрешности и ошибки в алгоритмах идентификации.

1.3. Критерии и требования разработки современных графических приложений

В качестве наиболее общих требований к разработке графических приложений, предъявляемых на стадии разработки, согласно [8, 21] можно отнести:

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

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

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

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

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

К наиболее распространенным методам разработки графических приложений, по мнению ряда авторов исследовательских работ [08, 21-23], относятся:

  1. Ручной метод – это способ, при котором пишется программный код, отвечающий за создание компонентов и элементов интерфейса, которые обрабатывают пользовательские действия. Этот метод не является быстрым, однако он обеспечивает максимальный уровень контроля при создании графического интерфейса и обработке программных событий.
  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. Проектирование структуры программы - разрабатывается модель решения с дальнейшей детализацией, декомпозицией на модули и подпрограммы, формируется программная архитектура, задаются способы хранения и представления информации.

5. Написание программного кода – представляет собой  запись алгоритмов на конкретном языке программирования. При этом целесообразно использование современных интегрированных сред разработки, что позволяет повысить скорость процесса разработки [8].

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

7. Анализ полученных результатов – заключается в сопоставлении результатами наблюдений с результатами вычислений.

8. Внедрение - передача программы заказчику для эксплуатации.

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

Согласно стандарту ISO 9126, критериями качества программного обеспечения (ПО) являются:

Функциональность – способность ПО выполнять набор действий, который в полной мере удовлетворяет заданным потребностям пользователя [3].

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

Эффективность – соотношение уровня услуг, которые предоставляются ПО пользователю, и объема используемых для данной задачи ресурсов. К таким ресурсам относятся: аппаратные средства, время выполнения программ, затраты на интерпретацию результатов [18].

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

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

Мобильность – способность ПО к корректному переносу из одного окружения или аппаратной платформы на другую [9].

На практике [16], к наиболее часто выделяемым критериям оценки качества программного обеспечения относятся:

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

2. Качество продукта: функциональность, удобство использования, надежность, безопасность, эффективность.

Для оценки качества продукта могут быть применены различные существующие методы: white-box и black-box тестирование, динамический и статический анализ и обзор кода.

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

Современные интегрированные среды разработки

MicrosoftVisualStudio – это один из встроенных сред разработки, которая изобретена на С++ и С#, поддерживается Windows OS. Эта среда разработки переведена на 10 языков (кроме того и на русский язык). В Visual Studio автор способен осуществлять разработку вебсайтов, интернет-служб, писать консольные дополнения, а также дополнения с графичным интерфейсом. Кроме того VS поддерживает различного семейства дополнений. Самые известные дополнения — это Re Sharper (осуществляет исследование ошибок в коде во время написания кода программы разработчиком, вплоть до компиляции); Visual Assist (в различии с Re Sharper поддерживает также и С++); AnkhSVN (применяет в Visual Studio систему контролирования версий, что носит наименование Subversion) [14, 5].

Достоинства: Понятный интерфейс среды разработки, удобность, автоматическое обнаружение ошибок в коде [10].

Недостатки: Начинающему программисту сложно понять.

Среда распространения - Россия, Китай, Германия, Франция, Португалия, Италия, Япония, Испания и Корея.

Geany – это интегрированная среда разработки программ. Имеет поддержку ОС Linux, а также на Mac Os и на Windows. Функционирует с 32 языками (также и с русским языком) [15]. Состав Geany не содержит компилятор. Его можно установить как дополнение. Поддерживается многими языками программирования, среди которых наличествуют классический С, С++ и С#.

Достоинства: Легкость и удобство, подсветка исходного кода, возможность включать дополнения [1].

Недостатки: Не имеет свой компилятор.

Komodo или ActiveStateKomodo — это среда разработки, написанная на JavaScript, XUL, Python. Интерфейс данной среды только на aнглийском языке. Функционирует на операционных системах: Os Linux, Windоws и Mac Os [6].

Имеет поддержку 10 языков программирования, среди которые присутствуют: PHP, Ruby, HTML5.

Достоинства: Дополнение Code Explorer позволяет просматривать объектное дерево скрипта или библиотеки, среда является кроссплатформенной, удобный отладчик с возможностью удаленной отладки, возможность настроить интерфейс среды «под себя» [10].

Недостатки: Высокая стоимость, поддерживает мало языков программирования, сильно загружает компьютер (а именно оперативную память), является сложным для понимания.

Kylix - это интегрированная среда. Работает на OS Linux. Работает с С, С++ и ObjectPascal [11].

В данной среде есть возможность писать приложения веб-служб.

Kylix выпускался в трёх пакетах. Эти пакеты: Enterprise Edition — включал в себя сто девяносто компонентов (являлся самым большим и самим дорогим пакетом программы); Professional Edition (более дешевый вариант, который включал в себя около 165 компонентов); Open Edition — бесплатный пакет программы, содержащий в себе 75 компонентов, в нём отсутствует средства для работы с базами данных [2].

Обновленная версия Kylix 2, в отличии от Kylix работала гораздо быстрее. Например, Kylix 1 осуществлял сортировку пузырьком массива из 115 элементов полторы минуты, Kylix 2 — одну секунду.

В 2002 году данную среду разработки прекратил поддерживать разработчик.

Достоинства: Удобен в переносе написанного с одной операционной системы на другую.

Недостатки: Данная среда больше не поддерживается разработчиком.

Распространена в основном в Европейских странах и США, из-за того что разработчик (Borland) перестал поддерживать Kylix — становится всё менее популярной и не востребованной [5, 7].

Netbeans – это интегрированная среда разработки ПО. Была реализована на программном языке Java. Эта среда разработки высокого качества. Умеет работать на нескольких операционных системах, то есть является кроссплатформенной. Работает более чем с пятью программными языками [13].

Достоинства: Является бесплатной, присутствует система контроля версий, подсветка синтаксиса, возможно переименовывать переменную/класс одним кликом, в том случае если вручную переименовывать слишком долго (автоматизированное переименование), имеется возможность форматирования кода по CodeStyle, разработчиком среда постоянно совершенствуется, улучшается [12].

Недостатки: Временами в среде разработки возникают проблемы с кодировкой, долгий запуск программы.

Распространена во многих странах, в силу того что является удобной и бесплатной.

Eclipse — ещё одна интегрированная среда разработки ПО. Написана на языке Java в две тысячи третьем году. Также является кроссплатформенной. За счёт присоединяемых к этой среде дополнений — имеется возможность создавать программные продукты более чем на пяти языках программного кода [1, 8].

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

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

Распространена во многих странах, пользуется популярностью [6].

Таким образом можно отметить, что сведения среды разработки про-граммного обеспечения (либо аналогичные) можно реализовывать весь цикл разработки программного обеспечения. Однако имеется также встроенные среды, которые предусмотрены для одного программного языка. К примеру подобная среда как Visual Basic [15].

Для значительных проектов в среду разработки должны быть внедрены дополнения, такие как: файловый менеджер, интегрированная среда разработки ПО, PlSql (применяется и для работы с СУБД и как инструмент отчётов), средство Cristal Reports (создание отчётов), механизм StarTeam (ведение журнала версий разрабатываемого продукта).

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

3. Критерии выбора среды и языка программирования

3.1.Основы выбора языка программирования

При выборе языка программирования нужно учитывать множество факторов. Например, если при разработке динамической Web-страницы вы в качестве наилучшего варианта выберите JavaServer Pages (JSP)/сервлеты, другие могут предпочесть PHP или аналогичный язык сценариев. Не существует какого-то одного языка, который является наилучшим выбором. Можно отдать предпочтение определенным факторам, таким как производительность и безопасность корпоративных приложений, по сравнению с другими факторами, такими как количество строк кода. Любое решение сопряжено с какими-то компромиссами [4, 2].

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

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

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

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

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

Аналогичный аргумент применим и для Web-сайтов. Они должны выглядеть и работать одинаково во всех браузерах. Использование тегов CSS3 и HTML5 без проверки совместимости с браузерами приведет к разному отображению и поведению сайта в разных браузерах [6].

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

Можно ли использовать новую функциональность без подключения новой библиотеки?

Если нет, доступна ли эта функциональность в библиотеке языка?

Если эта функциональность не встроена в язык и не доступна в библиотеке, какие усилия нужно приложить для ее создания с нуля?

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

Хотя сравнение этих языков технически некорректно, рассмотрим Perl и Python. Perl имеет встроенную поддержку регулярных выражений. В Python необходимо импортировать модуль re из стандартной библиотеки.

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

Время исполнения проекта очень зависит от размера кода. Теоретически, чем легче изучить язык и чем меньше объем кода, тем меньше это время.

Например, сайт управления контентом на PHP-сценариях можно разработать за несколько дней, в то время как создание кода сервлетов может занять несколько месяцев, при условии, что вы начали изучать оба языка с нуля [6].

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

Рассмотрим два варианта Web-приложения, написанных на Java и на Python. На основании данных тестирования можно прийти к заключению, что в одинаковой среде приложение, написанное на Java, должно работать быстрее, чем приложение, написанное на Python. А как насчет самой среды? Если средой является одноядерная x86 Ubuntu Intel Q6600, это справедливо, поскольку вычислительная мощность ограничена. А если взять Web-приложение, работающее в облачной среде на Google App Engine? Такое приложение может использовать практически неограниченную процессорную мощность, и обе программы возвратят результаты почти за одно и то же время. Теперь основным фактором выбора будет количество строк кода и удобство обслуживания [5].

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

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

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

Хороший пример значения сообщества даёт язык Perl. Архив Comprehensive Perl Archive Network (CPAN) поддерживается усилиями сообщества. Главная цель CPAN – помочь программистам в поиске модулей и программ, не включённых в стандартный дистрибутив Perl. По своей структуре он децентрализован; авторы обслуживают и улучшают свои собственные модули. Обычной практикой является создание ответвлений и конкурирующих модулей для одной и той же задачи или цели [1].

Пример выбора языка программирования

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

Читаемость языка. В отличие от Objective-C, Swift не построен на C. Поэтому у него отсутствуют специальные обозначения ключевых слов, чтобы отличаться от него. Вместо этого он может объединить все ключевые слова и удалить повторяющиеся символы перед каждым типом или связанным с объектом ключевым словом [2, 3].

Так же в Swift упрощена реализация условий наследования. Методы и функции вызываются с использованием стандартного списка параметров в круглых скобках, в то время, как в Objective-C это реализовано с использованием многочисленных вложенных конструкций в круглых и квадратных скобках [9].

По мнению многих программистов JavaScript, Java, C# Swift является более читаемым, что облегчает работу с ним. Он имеет упрощённый синтаксис и грамматику. В результате Swift является совершенно новым, чистым и выразительным языком, более простым для понимания разработчиками.

Поддержка языка. Основная проблема Objective-C - отсутствие возможности развиваться без развития C. В последнем реализован принцип, по которому, чтобы обеспечить высокую эффективность создания приложения и сократить время его установки, разработчикам приходится поддерживать два файла. Этот принцип переносится и на Objective-C [13].

В Swift это требование попросту отсутствует. Теперь файл-заголовок и файл реализации объединены в одном файле кода с расширением .swift [19].

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

Управление памятью. Программисту не приходится задумываться о памяти для цифровых объектов, которые он создает. Потому что автоматический подсчет ссылок (ARC) обрабатывает все управление памятью во время компиляции кода. Это происходит потому что ARC в Swift работает и на процессуальном и на объектно-ориентированном коде, и теперь не нужно контекстных переходов для программистов, даже если они пишут код, который рассчитан на более старые API[1]. Это является проблемой для текущей версии Objective-C [4].

Документация. Objective-C имеет готовую документацию, которая переведена на русский язык, что упрощает работу с этим языком и его использование в своих проектах. Постоянно развивающийся Swift, в свою очередь, не имеет полностью переведённой документации. При постоянной модернизации языка сложно уследить за всеми мелкими изменениями в его синтаксисе [12].

Скорость работы. Удаление устаревших соглашений намного улучшило движок Swift. Многочисленные тестирования производительности кода указывают на то, что Apple всерьез занимается улучшением скорости работы приложений на Swift. В то время как скорость обработки данных на Objective-C осталась на прежнем уровне C [8].

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

Что касается Objective-C, то он дальнейшего развития не получает. Apple сконцентрировалась только на работе над Swift. Это стабильный продукт, от которого не приходится ожидать кардинальных изменений.

Поддержка динамических библиотек. Самое большое нововведение в Swift - это переход от статических библиотек, которые обновляются только при крупных обновлениях, к динамическим библиотекам, которые присоединяются к готовому приложению и получают развитие не с обновлением всего проекта, а с изменениями этих библиотек [2]. В Objective-C работа происходила только со статическими библиотеками, что увеличивало объем конечного приложения.

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

ЗАКЛЮЧЕНИЕ

Выполнение данной курсовой работы позволило:

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

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

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

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

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

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

Список использованной литературы

  1. Портянкин И. Swing. Эффективные пользовательские интерфейсы. СПб.: Питер, 2010 . – 337 с.
  2. Божко А.Н., Жук Д.М. Компьютерная графика. М.: МГТУ им. Н. Э. Баумана, 2010. - 392 с.
  3. Лафоре Р. Структуры данных и алгоритмы в Java. Классика Computers Science. 2-е изд. — СПб.: Питер, 2013. — 704 с.
  4. Нимейер П. Программирование на Java. – Москва: Эксмо, 2014. – 1216 с.
  5. Монахов В.В. Язык программирования Java и среда NetBeans. – СПб.: БХВ-Петербург, 2011. – 704 с.
  6. Нейгел К., Ивьен Б., C# 5.0 и платформа .NET 4.5 для профессионалов. М.: Академия, 2014. – 1440 с.
  7. Петров М., Молочков В. Компьютерная графика. – СПб.: Питер, 2010. – 736 с.
  8. Скляр Д., Трахтенберг А. PHP. Рецепты программирования. – СПб.: БХВ-Петербург, 2015. – 784 с.
  9. Бобровский С.И. Delphi 7.Учебный курс. СПб.: Питер, 2010. − 736 с.
  10. Руби С., Томас Д., Rails 4. Гибкая разработка веб-приложений. – СПб.: КноРус, 2014. – 448 с.
  11. Себеста Р. Основные концепции языков программирования. Concepts of Programming Languages. – М.: Эксмо, 2011. – 512 с.
  12. Седжвик Роберт, Уэйн Кевин. Алгоритмы на Java, 4-е изд. – М.: ООО “И.Д. Вильямс”, 2013. – 848 с.
  13. Страуструп Б. Программирование. Принципы и практика использования C++. – М.: Вильямс, 2011. – 1248 с
  14. Сьерра Кэти Изучаем Java / Сьерра Кэти, Бейтс Берт – М.: Эксмо, 2014. – 708 с.
  15. Хахаев И. А. - Практикум по алгоритмизации и программированию на Python. – М.: Альт Линукс, 2010. – 126 с.
  16. Хорстманн С., Корнелл Г. Java. Библиотека профессионала. – М.: ООО “И.Д. Вильямс”, 2014. – 864 с.
  17. Хиллегасс А. Objective-C. Программирование для iOS и MacOS. – СПб.: Питер, 2012. – 605 с.
  18. Хэррон Д. Node.js Разработка серверных веб-приложений на JavaScript. – СПб.: ДМК Пресс, 2012. – 468 с.
  19. Шилдт Г. Swing: руководство для начинающих. – М.: ООО “И.Д. Вильямс”, 2011. – 704 с.
  20. Шилдт Г. Java. Полное руководство, 8-е изд. – М.: ООО “И.Д. Вильямс”, 2012. – 1104 с.
  21. Эванс Б., Вербург М. Java. Новое поколение разработки. – СПб.: Питер, 2014. — 560 с.
  22. Эккель Б. Философия Java. – СПб.: Питер, 2015. – 1168 с.