Файл: Классификация языков программирования. Критерии выбора среды и языка программирования.pdf
Добавлен: 27.04.2023
Просмотров: 270
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Теоретический подход. Классификация языков программирования
1.1 История возникновения и развития языков программирования
1.2 Классификация языков программирования
Глава 2. Состояние и анализ изучаемого вопроса. Обзор современных языков программирования
Глава 3. Критерии выбора среды и языка программирования
3.1 Среда разработки программ. Характеристики, критерии выбора
В процессе рассмотрения перспектив программных технологий [2], можно было выделить технологические концепции и методологии, которые скорее всего повлекут изменения в операционных средах: программные шаблоны (паттерны), компонентная разработка, программы как сервис, сервисно-ориентированные архитектуры [4].
3.2 Критерии выбора языка программирования
На самом начальном этапе разработки программы в любом случае становится вопрос выбора языка программирования. Некоторые специалисты выбирают язык только из личных предпочтений, другие – основываясь на знании только этого языка, кто-то об этом даже не задумывается. Однако данный этап разработки является очень значимым, в связи с тем, что от него в дальнейшем могут возникнуть проблемы при осуществлении неверного выбора [5].
В настоящее время существует огромное количество языков программирования, каждый из которых был разработан с определенной целью. Выбор языка программирования во время разработки программы - очень важный момент, от которого зависят многие параметры – скорость создания программы, скорость тестирования, возможность переноса на другие платформы, возможность быстрого внесения изменений, быстрота выполнения конечного продукта и др. Однако следует отметить, что единого идеального языка не существует, каждый язык обладает своими положительными и отрицательными качествами, которые будут иметь свое влияние на процесс разработки.
Обсудим критерии, обуславливающие выбор языка программирования в процессе разработки.
- Скорость работы конечного продукта.
Наибольшие требования к скорости выполнения могут предъявлять программы со значительным объемом математических вычислений, например, моделирование физических систем, расчеты большого объема экономических данных, выведение трехмерной графики и др. [4]. Для этого хорошо подойдут компилируемые языки: ассемблер, С/С++, фортран и т.д. Дело в том, что после сборки программа не требует лишних процессов и содержит в себе машинные команды, выполняемые без лишних задержек. Схема работы таких программ следующая: 1) программа выполняется сразу, так как является самодостаточной и не требует дополнительных библиотек; 2) программа помимо кода включает в себя вызовы библиотек с машинным кодом, поэтому, кроме выполнения своих команд, программа вызывает функции из библиотек; 3) в дополнение к предыдущим пунктам, программа может работать через прослойку драйверов, написанных на языках низкого уровня и работающих по умолчанию быстро. Как видно, в схеме возможны максимум 4 блока: программа - библиотеки - драйвера – железо [3].
- Объем занимаемой оперативной памяти.
Это требование существует, когда программа разрабатывается для встраиваемых систем, мобильных платформ, микроконтроллеров и др. В данных случаях, значение имеет количество расходуемой памяти. К таким языкам также относятся ассемблер, С/С++, Objective-C и др.
- Скорость разработки программы.
Требование возникает при высокой срочности разработки программы. В этом случае выбор останавливается на высокоуровневых языках с максимально приближенным к человеку синтаксисом. Это, например, Java, Flash и т.п. Скорость выполнения программ, созданных на данных языках, не является оптимальной [5]. Схема выполнения на примере Java:
Программа в виде байт-кода - виртуальная машина-анализатор - системные библиотеки - драйвера - железо. Самым медленным блоком в данной схеме является анализатор. Поэтому быстрая разработка часто влечет медленное выполнение [3].
- Ориентированность на компьютер или человека?
Необходимо определиться, с кем будет работать программа в первую очередь, - с человеком, или компьютером. В первом случае программа должна иметь мощную графическую часть, отвечающую требованиям дизайна. Разработка графической части в большинстве случаев требует достаточно много времени, т.к. отличается немалой сложностью. Ведь вывод графики предполагает много математических действий, а значит, присутствует требовательность к скорости исполнения, а ввиду сложности разработки существует необходимость в высокоуровневом языке. В данном случае, хорошо может подойти С++/C# с их одновременной и высокоуровневостью, и скоростью выполнения программ. Однако возможно и использование Java и Flash, на которых создание красивых интерфейсов гораздо проще, чем на С++ и, тем более, на С [5].
- Кроссплатформенность.
Кроссплатформенность – это возможность работы программы на различных платформах, в различных ОС с минимальными изменениями. Здесь можно выделить такие языки: Java, C#, Flash, C++ с различными библиотеками и другие, менее используемые, языки. Java создавался с учетом того, что программы на нем должны работать на любой платформе, где есть JVM – Java Virtual Machine. Программы на Java не требуют никаких изменений – после компиляции получается .jar файл, способный работать и на Windows, и на Mac OS, и на Linux и на многих других системах [7]. Однако, например, на одном С++ создать кроссплатформенную программу довольно сложно, и при возникновении обширной избыточности теряется достоинство в скорости выполнения. Значительно облегчают задачу кроссплатформенные библиотеки, например, Qt, позволяющие добиться принципа «один код на все платформы», однако на каждую платформу необходимо программу собирать отдельно разными компиляторами. В этот раздел так же можно включить интерпретируемые, скриптовые языки – для их работы необходимо наличие интерпретатора языка в системе. Данные языки очень удобны в плане разработки, но по скорости достаточно медлительны. Схема их работы напоминает схему работы Java/Flash, но анализатор работает еще медленнее [2].
- Скорость внесения изменений, скорость тестирования.
Если проект непрерывно развивается, и в него постоянно вносятся изменения, выбор должен останавливаться на высокоуровневых языках, где любой функциональный блок можно быстро переписать. Существует много нюансов, не столько в языке, сколько в разработчике с его стилем программирования и компиляторах. Тем не менее, язык вносит свою долю в это дело, так или иначе упрощая/осложняя работу программиста.
Таким образом, тема выбора языка программирования достаточно обширна и имеет множество нюансов. Стоит учитывать, что большие программы могут создаваться на разных языках в зависимости от их функционала. Например, критичные к скорости работы части пишутся на низкоуровневых языках, графическая часть — на высокоуровневых и медленных. С и С++ являются действительно универсальными языками с большим количеством библиотек, высокой скоростью работы и многими другими достоинствами. Но, кроме них, они обладают еще довольно большим недостатком – по причине такой универсальности данные языки довольно трудны в освоении, имеют очень много особенностей. Язык Java также достаточно универсален, более прост в изучении, но обладает серьезным недостатком – крайне низкая скорость работы [4]. Это очень ограничивает его применение: большие программы на нем лучше не разрабатывать из-за возникающей потребности в мощном аппаратном обеспечении. Скриптовые/интерпретируемые языки хорошо подойдут для написания «одноразовых программ», автоматизации некоторых действий, а так же для работы вместе с другими языками. Ассемблер – группа языков со схожим синтаксисом, но многими различными параметрами в зависимости от платформы [5].
ЗАКЛЮЧЕНИЕ
Таким образом, в настоящее время существует множество языков программирования, и при выборе определенного языка необходимо уделить внимание среде разработки, учитывая особенности того или иного языка, среды, размера и характеристик необходимой программы, мощности используемого оборудования и программного обеспечения.
Среда разработки должна отвечать необходимым требованиям и учитывать такие быстродействие языка программирования, возможность внедрения параметров исходной задачи, принимать во внимание синтаксис языка и современные требования пользователей.
В результате проведенной работы, были достигнуты поставленные задачи и получены следующие выводы: