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

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

Содержание:

Введение

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

Классификация и виды языков программирования – это очень сложный, многообразный вопрос, который постоянно вызывает споры, требует регулярной переоценки и умения находить в различных языках объединяющие их характеристики и особенности. Сейчас существует огромное количество самых разных языков программирования. По некоторым подсчетам, всего их более чем 120. Некоторые из них очень распространены и популярны (C++, Java, Python), некоторые известны только узкому кругу специалистов и любителей экзотики (Groovy, Clojure, Boo)

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

Обзор источников

А. Ездаков «Функциональное и логическое программирование» (2016) Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с

В пособии рассмотрены основные аспекты функционального и логического программирования на примере использования языков Лисп и Турбо-Пролог.

Книга ориентирована на студентов, обучающихся по направлениям «Информатика и вычислительная техника» и «Прикладная математика и информатика».

Гедранович, В.В. Основы компьютерных информацион-

ных технологий: учеб.-метод. комплекс / В.В. Гедранович, Б.А. Гедранович,

И.Н. Тонкович. – 2-е изд., стереотип. – Минск: Изд-во МИУ, 2011 – 344 с.

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

Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. ~ 416 с:

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

А.А. Тюгашев. Основы программирования. Часть I. – СПб: Университет

ИТМО, 2016 – 160 с.

Учебное пособие содержит теоретический материал и лабораторный практикум для изучения дисциплины «Основы программирования».

Представлен панорамный взгляд на предметную область, с представлением не только традиционной императивной, но и функциональной, и логической парадигм программирования, исторической ретроспективы и связи с другими областями информатики. Приводится сравнение программирования на языках высокого и низкого уровней (ассемблер). Несмотря на обзорный характер, после прочтения и прохождения входящего в книгу лабораторного практикума студент будет способен писать программы средней сложности на языках С/С++. Книга содержит и специальные главы, посвященные жизненному циклу программных средств современной ИТ-индустрии, проблеме ошибок в программах и методах верификации программного обеспечения, стилю программирования.

Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.

В книге Т. Пратта и М. Зелковица "Языки программирования: разработка и реализация", авторы которой - известные американские специалисты в области языков программирования, приведены общие сведения о разработке и реализации языков программирования, основы формальных грамматик и конечных автоматов - тематических моделей, использующихся для определения и реализации языков программирования. Эта база нужна программисту высокой квалификации для создания производительных и устойчивых к ошибкам программ. Смысл изложения будут понятен пользователю, знакомому с процедурным и объектно-ориентированным языком. Данным изданием смогут воспользоваться студенты высших учебных заведений и программисты разной квалификации.

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

Цель исследования: Изучить классификацию языков программирования и критерии выбора среды и языка разработки программ

Предмет исследования: Языки и среды программирования.

Глава 1 Классификация языков программирования

1.1 Обзор классификаций

Основные объекты языка программирования постоянны и напоминают компоненты человеческих языковых систем: синтаксис, определяющий формальные правила записи программы, допустимые виды и регистр символов; лексика, включающая в себя весь словарный запас языка: имена переменных и функций, константы, строки, операторы; грамматика, указывающая, как правильно сочетать единицы языка для образования словосочетаний и предложений [ Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c].

Лексика и грамматика вместе определяют семантику языка. На этом уровне конкретные последовательности знаков приобретают особый смысл, понятный человеку и компьютеру. Например, слово while во многих системах программирования трактуется как начало циклической операции. Конечно, компьютеры не понимают обычных слов, само по себе сочетание латинских букв ничего для них не означает. Машины имеют дело с машинным кодом - нулями и единицами, описывающими примитивные состояния наличия или отсутствия сигнала. Поэтому языки программирования устанавливают четкие соответствия определенных слов и последовательностей нативных машинных команд [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

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

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

Языки программирования могут быть сгруппированы по десяткам различных признаков. Они являются принципиально важными или имеют прикладное значение. Наблюдается сильная зависимость классификации языков программирования от истории развития. С годами технологии усложнялись и кардинально изменялись, на первый план выходило удобство программиста, появлялись эффективные алгоритмы, сложные команды и новые уровни абстракции [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

Основные классификации языков программирования по видам и механизму работы базируются на следующих параметрах:

Особенности лексики и грамматики в совокупности с уровнем абстракции и степенью удобства для человека.

Базовая концепция и методология составления алгоритмов.

Способ представления данных.

Организация процесса взаимодействия с машиной, механизм исполнения программ.

Область жизни, в которой применяется язык.

Историческая эпоха, в которую языковая система была сформирована. Составить четкую классификацию языков и систем программирования нельзя, но возможно разделить и систематизировать их по принципиально важным признакам [Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.].

1.2 Удобство для человека

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

Машинный код. Это тоже язык программирования, на котором при должной подготовке можно написать инструкцию.

Низкий уровень. По-настоящему низкоуровневыми являются языки ассемблера, которые используют нативные машинные команды, закодированные с помощью мнемонических кодов [Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. - М.: Мир, 2016. - 360 c].

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

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

.Сверхвысокий уровень. Эта немногочисленная группа характеризуется появлением сверхмощных команд и операторов. Сюда можно отнести Алгол-68. Особенностью языков низкого уровня является их машинозависимость. Они тесно привязаны к особенностям организации конкретного типа ЭВМ, но в целом похожи друг на друга. Они обеспечивают: высокую скорость выполнения и максимальную компактность создаваемых программ; прямое взаимодействие с аппаратными ресурсами; полный контроль над памятью [А.А. Тюгашев. Основы программирования. Часть I. – СПб]: Университет, ИТМО, 2016 – 160 с.].

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

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

1.3 Обработка программы машиной

Чтобы выполнить сложную инструкцию, компьютер прежде всего должен понизить ее абстрактность и перевести на понятный для себя язык. Способ, которым это делается, называется моделью исполнения. Выделяют две основных модели и одну гибридную: Компиляция - единовременный перевод всей программы в машинный код. Интерпретация - последовательное выполнение каждого выражения [Гедранович, В.В. Основы компьютерных информационных технологий: учеб.-метод. комплекс / В.В. Гедранович, Б.А. Гедранович,И.Н. Тонкович. – 2-е изд., стереотип. – Минск: Изд-во МИУ, 2016 – 344 с.].

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

Основные недостатки интерпретационной модели: постоянное нахождение транслятора в памяти ЭВМ; повторная обработка повторяющихся команд. Несмотря на это, интерпретируемые языки очень удобны для циклической разработки и отладки, так как позволяют быстро вносить изменения в программу [Бекишев, Г.А. Элементарное введение в геометрическое программирование / Г.А. Бекишев, М.И. Кратко. - М.: Наука. Главная редакция физико-математической литературы, 2017. - 144 c].

Компилятор же трудится только один раз, сразу преобразуя всю инструкцию в понятный для компьютера вид - машинный код или некий промежуточный байт-код, а затем покидает память ЭВМ. Здесь выполнение отделено от процесса трансляции, что является более эффективной моделью [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

Основные недостатки компиляционной модели: большая сложность. Прежде чем перевести программу на понятный машине язык, транслятор много раз проходит по исходной инструкции, анализируя и проверяя ее. Четкого разграничения систем не существует, так как традиционно интерпретируемые языки могут быть скомпилированы и наоборот. Классификация языков программирования высокого уровня по модели исполнения: Интерпретируемые - Python, Haskell, PHP, JavaScript. Компилируемые сразу в машинный код: C, C++, Fortran, ASM. Компилируемые в байт-код: Python, Java. Транскомпилируемые: Haskell, Fortran, C, C++ [ Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c].

1.4 Обработка данных

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

Нетипизированные языки.

Типизированные языки разной степени строгости.

Нетипизированными являются языки ассемблера, которые способны обрабатывать непосредственно двоичные данные. Тип данных при этом не имеет никакого значения. Для типизированных языков важно, с какой разновидностью данных они работают.

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

Например, они могут самостоятельно определять и "неявно" конвертировать один тип данных в другой, исходя из семантики команды. Это очень удобно, но усложняет отладку, так как может привести к незаметной ошибке. Ярким примером нестрогой типизации является JavaScript [Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.].

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

Высокоабстрактные языки могут быть разделены по основной парадигме программирования. Существуют десятки методологий составления программ, некоторые из которых очень похожи друг на друга, поэтому создать четкую систему различий невозможно. Кратко классификация языков программирования выглядит так: алгоритмические, императивные, процедурные [А. Ездаков «Функциональное и логическое программирование» (2016) Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с].

Требуют явного последовательного описания алгоритма решения задачи. Операторы при этом объединяются в процедурные группы, отделенные от самих данных. Примеры процедурных языков - Pascal, Basic; логические, декларативные. Максимально формализовано описывают саму задачу и требуемый результат. Решение при этом должно логически следовать из этого описания; объектно-ориентированные, структурированные. Имеют в основе концепцию объекта, объединяющего в себе данные и методы их обработки [ Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c].

Объекты в программировании

Языки последней группы описывают все сущности в виде независимых объектов, скрывающих в себе сложные механики.

Основными концепциями ООП (объектно-ориентированного программирования) являются: инкапсуляция - скрытие функционала внутри объекта; наследование одними объектами методов других; полиморфизм - изменение сути с сохранением внешнего интерфейса. Можно составить также классификацию языков объектно-ориентированного программирования по способу реализации основных концепций этого подхода - наследования, инкапсуляции и полиморфизма. Помимо классических механизмов существуют другие, например прототипный, используемый в JavaScript.

Методология ООП считается самой прогрессивной, эффективной и в некотором смысле модной. Однако в ряде случаев для решения конкретной задачи более эффективными могут быть другие подходы, например функциональный [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

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

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

Первое поколение - машинные языки низкого уровня, привязанные к реализации конкретной ЭВМ. "Программы" на этих языках выглядели как ряды переключателей, приведенных в нужное положение, или перфокарты (перфоленты). Таким образом, все команды представляли собой последовательность нулей и единиц - бинарный код. Пример: язык ARM-процессора [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

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

Языки третьего поколения сняли с программиста заботу о непринципиальных деталях составления инструкций, таких как перевод программы в машинный код. Теперь компьютер научился делать это самостоятельно. Синтаксис и лексика приблизились к человеческим, стали понятнее. В этом поколении зародились практически все современные языки высокого уровня с широкой областью применения, независимо от их парадигмы: PHP, Fortran [Бекишев, Г.А. Элементарное введение в геометрическое программирование / Г.А. Бекишев, М.И. Кратко. - М.: Наука. Главная редакция физико-математической литературы, 2017. - 144 c].

В четвертом поколении уровень абстракции возрос еще больше, резко сужая область использования. К этой группе относятся такие специфичные языки, как FoxPro, Simulink, SQL. Появились языки визуального программирования: CAD-пакеты, системы RAD.

Наконец, языки пятого поколения должны были сами писать программы, получая лишь описание от программиста. Эта задумка так и не была реализована полностью, так как для составления эффективного алгоритма иногда недостаточно прямой машинной логики, а требуется еще человеческая интуиция и смекалка. Примерами языков пятого поколения являются MathCAD, Prolog и Mercury.

По сути, поколения языков в точности соответствуют этапам программирования, рассмотренным в начале статьи, перечисленным в обратном порядке. Изначально программист все операции брал на себя, а машина лишь выполняла заданную последовательность действий. Теперь же ЭВМ способна выдавать результат по формализованному описанию задачи. Облегчение труда программиста сопровождается увеличением нагрузки на машину, программа выполняется медленнее и требует больших ресурсов. Несмотря на то что технический прогресс движется семимильными шагами, языки первых поколений вовсе не исчезли. Они применяются в областях, требующих максимальной простоты и эффективности [Гедранович, В.В. Основы компьютерных информационных технологий: учеб.-метод. комплекс / В.В. Гедранович, Б.А. Гедранович,И.Н. Тонкович. – 2-е изд., стереотип. – Минск: Изд-во МИУ, 2016 – 344 с.].

1.6 Область применения

Каждый язык программирования хорош в своей области, для которой он создавался. Так, для программирования микроконтроллеров используются ассемблеры, а с Java там делать нечего. Низкоуровневое программирование драйверов эффективно с C, который позволяет строго контролировать ресурсы памяти. Для веб-программирования стоит выбрать скриптовые языки PHP и JavaScript, интерпретатор которого встроен в каждый современный браузер [Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.].

Важные банковские программы написаны на Java, обеспечивающем контроль ошибок. Аэрокосмические - тоже на Java или на Паскале, который даже уборку мусора отдает на контроль программисту.

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

2.1 Выбор среды программирования

Среда разработки программного обеспечения (ПО) — совокупность программных средств, используемая программистами для разработки программного обеспечения. Простая среда разработки включает в себя редактор текста, компилятор и/или интерпретатор, средства автоматизации сборки и отладчик. Когда эти компоненты собраны в единый программный комплекс, говорят об интегрированной среде разработки (Integrated development environment- IDE) [А.А. Тюгашев. Основы программирования. Часть I. – СПб]: Университет, ИТМО, 2016 – 160 с.].

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

Современные среды разработки, поддерживающие объектно-ориентированную разработку ПО, также включают браузер классов, инспектор объектов и диаграмму иерархии классов. Хотя существуют среды разработки, предназначенные для нескольких языков — такие как Eclipse или Microsoft Visual Studio, обычно среда разработки предназначается для одного определённого языка программирования [ Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c].

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

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

2 Реализовать поддержку различных архитектур приложений. В настоящее время существует множество различных архитектур от классической двухзвенной «файл-сервер» до многозвенной архитектуры с поддержкой «распределенных объектов»

Выбор оптимальной структуры во многом зависит от масштаба реализуемой КИС и аппаратных возможностей, имеющихся у предприятия. Выполнение данного КО позволит своевременно и с минимальными затратами масштабировать приложения при возрастающих потребностях организации [А.А. Тюгашев. Основы программирования. Часть I. – СПб]: Университет, ИТМО, 2016 – 160 с.].

3 Использовать современный язык программирования и современной СУБД. Популярной парадигмой сегодня является объектно-ориентированное программирование, поэтому использование соответствующего языка программирования является наиболее целесообразным. Для хранения информации в настоящее время чаще всего используют реляционные системы управления базами данных (РСУБД). Применение современных тех-нологий позволяет увеличить срок эксплуатации системы и сократить затраты на ее владение [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с:].

4 Реализовать инфраструктуру безопасности.

Разграничение прав доступа к данным и отображение минимального набора информации, достаточного лишь для выполнения должностных обязанностей являются ключевыми особенностями разработки современных КИС [Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. - М.: Мир, 2016. - 360 c]. Имеет смысл предусмотреть возможность двух способов про-

верки подлинности пользователей:

1) внутренней - основанной на учетных записей, имеющихся в КИС (чаще всего используется для Веб-приложений)

2) встроенной – основанной на механизмах, предоставляемых операционной системой.

5 Обеспечить поддержку механизмов расширения функциональных возможностей среды разработки. Современные языки программирования предоставляют обширную метаинформацию, что позволяет реализовать «плагинную» архитектуру, поддерживающую установку модулей расширений, представляющих собой dll-библиотеки. Этот подход разрешает безгранично увеличивать функционал системы и её гибкость [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

2.2 Выбор языка программирования

При выборе языка программирования нужно учитывать множество факторов. Например, если при разработке динамической Web-страницы вы в качестве наилучшего варианта выберите JavaServer Pages (JSP)/сервлеты, другие могут предпочесть PHP или аналогичный язык сценариев. Не существует какого-то одного языка, который является наилучшим выбором. Можно отдать предпочтение определенным факторам, таким как производительность и безопасность корпоративных приложений, по сравнению с другими факторами, такими как количество строк кода. Любое решение сопряжено с какими-то компромиссами [Гедранович, В.В. Основы компьютерных информационных технологий: учеб.-метод. комплекс / В.В. Гедранович, Б.А. Гедранович,И.Н. Тонкович. – 2-е изд., стереотип. – Минск: Изд-во МИУ, 2016 – 344 с.].

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

При выборе языка для персонального проекта можно положиться на свои личные предпочтения. Здесь может оказаться важным количество строк кода; очевидным выбором будет язык, позволяющий выполнить задачу при помощи 10 строк кода вместо 20. Сначала хочется получить решение, а потом позаботиться об удобочитаемости или производительности [Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.].

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

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

Целевая платформа.

Гибкость языка.

Время исполнения проекта.

Производительность.

Поддержка и сообщество.

Целевая платформа

Самым важным фактором является платформа, на которой программа будет работать. Рассмотрим для примера Java™ и C. Если программа написана на C и должна работать на машинах с Windows® и Linux®, потребуются компиляторы для платформ и два разных исполняемых файла. В случае с Java сгенерированного байт-кода будет достаточно для выполнения программы на любом компьютере, на котором установлена виртуальная Java-машина [Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.].

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

Гибкость

Гибкость языка определяется тем, насколько легко можно добавлять к существующей программе новые функциональные возможности. Это может быть добавление нового набора функций или использование существующей библиотеки для добавления новой функциональности. Рассмотрите следующие вопросы, связанные с гибкостью [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ]:

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

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

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

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

Хотя сравнение этих языков технически некорректно, рассмотрим Perl и Python. Perl имеет встроенную поддержку регулярных выражений. В Python необходимо импортировать модуль re из стандартной библиотеки [ Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c].

Время исполнения проекта

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

Время исполнения проекта очень зависит от размера кода. Теоретически, чем легче изучить язык и чем меньше объем кода, тем меньше это время [Бекишев, Г.А. Элементарное введение в геометрическое программирование / Г.А. Бекишев, М.И. Кратко. - М.: Наука. Главная редакция физико-математической литературы, 2017. - 144 c].

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

Производительность

Каждая программа и платформа имеет определенный предел производительности, и на эту производительность влияет используемый при разработке язык. Существует множество способов сравнения скорости работы в одинаковой среде программ, написанных на разных языках. Можно использовать различные эталонные тесты, хотя их результаты не являются конкретной оценкой производительности какого бы то ни было языка [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

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

А если взять Web-приложение, работающее в облачной среде на Google App Engine? Такое приложение может использовать практически неограниченную процессорную мощность, и обе программы возвратят результаты почти за одно и то же время.

Теперь основным фактором выбора будет количество строк кода и удобство обслуживания.

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

Поддержка и сообщество

Язык программирования, как и хорошая программа, должен опираться на твердую поддержку сообщества. Язык с активным форумом скорее всего будет популярнее замечательного языка, помощь по которому трудно найти [А. Ездаков «Функциональное и логическое программирование» (2016) Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с].

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

Хороший пример значения сообщества дает язык Perl. Архив Comprehensive Perl Archive Network (CPAN) поддерживается усилиями сообщества. Главная цель CPAN – помочь программистам в поиске модулей и программ, не включенных в стандартный дистрибутив Perl. По своей структуре он децентрализован; авторы обслуживают и улучшают свои собственные модули. Обычной практикой является создание ответвлений и конкурирующих модулей для одной и той же задачи или цели [Бекишев, Г.А. Элементарное введение в геометрическое программирование / Г.А. Бекишев, М.И. Кратко. - М.: Наука. Главная редакция физико-математической литературы, 2017. - 144 c].

Сценарии

Сценарии проектов, приведенные в данном разделе, иллюстрируют различные факторы, влияющие на принятие решения относительно выбора языка программирования [Гедранович, В.В. Основы компьютерных информационных технологий: учеб.-метод. комплекс / В.В. Гедранович, Б.А. Гедранович,И.Н. Тонкович. – 2-е изд., стереотип. – Минск: Изд-во МИУ, 2016 – 344 с.].

REST-сервис для операции сложения.

Простая программа чтения фидов.

Корпоративные приложения.

Исследовательские проекты.

REST-сервис для операции сложения

В этом сценарии рассматривается REST-сервис, выполняющий сложение. Сервис вызывается по URL, http://<url>?num1=number1&num2=number2, а результат должен содержать сумму двух чисел, переданных сервису. Эту программу можно написать на разных языках. В нашем примере используются JSP (см. листинг 1) и PHP (см. листинг 2). JSP-программа написана в Eclipse IDE.

Листинг 1. REST-сервис, использующий JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Sum</title>

</head>

<body>

    <% if (request.getParameter("num1") == null ||

    request.getParameter("num2") == null) { %>

        <p>

            <b>Wrong URL!!!</b>

        </p>

        <p>

            <b>Enter URL in this format: </b>

            <i>

            http://&lt;url&gt;?num1=number1&amp;num2=number2</i>

        </p>

   <% } else { %>

       <b>Number 1:</b>

       <i><%= request.getParameter("num1") %></i>

       <br>

       <b>Number 2:</b>

       <i><%= request.getParameter("num2") %></i>

       <br>

       <b>Sum:</b>

       <i><%= Integer.parseInt(request.getParameter("num1")) +

       Integer.parseInt(request.getParameter("num2")) %></i>

       <br>

   <% } %>

</body>

</html>

В листинге 2 приведена та же программа, написанная на PHP.

Листинг 2. REST-сервис, использующий PHP

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Sum</title>

</head>

<body>

    <?php if ($_GET["num1"] == NULL || $_GET["num2"] == NULL) { ?>

    <p><b>Wrong URL!!!</b></p>

    <p>

        <b>Enter URL in this format: </b>

        <i>http://&lt;url&gt;?num1=number1&amp;num2=number2</i>

    </p>

    <?php } else { ?>

        <b>Number 1:</b>

        <i><?= $_GET["num1"] ?></i>

        <br>

        <b>Number 2:</b>

        <i><?= $_GET["num2"] ?></i>

        <br>

        <b>Sum:</b>

        <i><?= $_GET["num1"] + $_GET["num2"] ?></i>

        <br>

    <?php } ?>

</body>

</html>

Между этими примерами нет особых различий. Программа сама по себе не использует все возможности обоих языков. Она показывает, что когда дело касается основ, оба языка равноценны [Гедранович, В.В. Основы компьютерных информационных технологий: учеб.-метод. комплекс / В.В. Гедранович, Б.А. Гедранович,И.Н. Тонкович. – 2-е изд., стереотип. – Минск: Изд-во МИУ, 2016 – 344 с.].

Возможности JSP позволяют использовать его преимущественно на корпоративном уровне. Например, в случае использования JSP программа при самом первом вызове загружается в память как сервлет. При каждом последующем запросе вызывается программа, находящаяся в памяти, что улучшает время ее реакции. Она также идеальна для среды Java. В случае использования PHP программа загружается в память при каждом вызове, что может увеличить время реакции для критических приложений [Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.].

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

Простая программа чтения фидов

Цель этого сценария заключается в предоставлении программе ссылки на фид. Программа должна получить фид и вывести все его заголовки. Чтобы сделать программу более интересной, мы подпишемся на фид в JSON-формате, а не в RSS [ Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c].

Фрагмент кода, приведенный в листинге 3, взят из O'Reilly и написан на Java.

Листинг 3. Программа чтения фидов, использующая Java

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;

import org.apache.commons.io.IOUtils;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import net.sf.json.JSONSerializer;

public class JsonParser {

    public static void main(String[] args) throws Exception {

        String urlString =

"http://pipes.yahoo.com/pipes/pipe.run?_id=df36e60df711191549cf529e1df96884&

_render=json&

textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex";

        URL url = new URL(urlString);

        URLConnection urlCon = url.openConnection();

        InputStream is = urlCon.getInputStream();

        String jsonTxt = IOUtils.toString(is);

        JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonTxt);

        JSONObject value = json.getJSONObject("value");

        JSONArray items = value.getJSONArray("items");

        String title;

        for (Object item : items) {

            title=((JSONObject)item).getString("title");

            System.out.println("\n" + title);

        }

    }

}

В листинге 4 приведена программа, написанная на Python.

Листинг 4. Программа чтения фидов, использующая Python

#!/usr/bin/python

import urllib.request

url = "http://pipes.yahoo.com/pipes/pipe.run?

   _id=df36e60df711191549cf529e1df96884&_render=json&

   textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex"

HTTPdata = urllib.request.urlopen(url)

json_data = eval(HTTPdata.read())

for item in json_data['value']['items']:

    print (item['title'])

Python-программу можно сократить еще больше – всего до трех строк. Оставьте в листинге 4 первые две строки и замените остальной код строкой из листинга 5.

Листинг 5. Сокращенная третья строка

1

2

3

4

for item in eval((urllib.request.urlopen("http://pipes.yahoo.com/pipes/pipe.run?

   _id=df36e60df711191549cf529e1df96884&_render=json&textinput1=and&

   urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex"))

   .read()))['value']['items']:print (item['title'])

Пример приложения продемонстрировал гибкость этих языков. Ни один из них не имеет встроенной поддержки всех необходимых библиотек, поэтому необходимо импортировать нужные пакеты. В Python это даже проще, поскольку можно манипулировать JSON по умолчанию. В Java-коде это труднее, потому что для создания работающей программы необходимо получить JSON-библиотеки и их зависимости [ Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c].

Корпоративные приложения

При разработке корпоративных приложений проектировщики и программисты должны пройти по канату, балансируя между производительностью, безопасностью, простотой обслуживания и временем разработки. Речь идет не просто о выборе языка программирования, который обеспечит лучшие показатели производительности. Не менее важными факторами являются время создания рабочей версии, гибкость и степень интегрируемости в существующую инфраструктуру [Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.].

Важную роль играет также среда, в которой программа будет использоваться. Корпоративные программы никогда не работают автономно. Каждая программа становится частью более крупной задачи, поэтому важным фактором становится способность к взаимодействию [Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. - М.: Мир, 2016. - 360 c]..

Представьте себе, что предприятие, использующее свои реализованные на Java-коде Web-сервисы, хочет в качестве надежной платформы добавить WebSphere® MQ. Нет никакого смысла использовать для написания приложения C-интерфейсы системы WebSphere MQ; следует выбрать Java.

Исследовательские проекты

Предположим, что вашим следующим проектом является исследование в области, не связанной с ИТ и компьютерами. Пусть это будет, например, обработка изображений, обработка звука, использование водяных знаков или исследование фондового рынка. Необходимо создать код для имитации реального поведения, но вы не очень разбираетесь в компьютерах [Бекишев, Г.А. Элементарное введение в геометрическое программирование / Г.А. Бекишев, М.И. Кратко. - М.: Наука. Главная редакция физико-математической литературы, 2017. - 144 c].

Проект требует быстрого написания большого количества необязательно идеального кода. Самым важным фактором является время исполнения. В данном случае это означает, насколько быстро можно сделать работающий компонент, чтобы быстрее вернуться к основной задаче. Это напоминает написание маленьких заглушек без особого внимания к способности к взаимодействию [Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с: ].

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

В такой ситуации на помощь могут прийти такие языки, как MATLAB и LISP. Если вы начнете создавать прототип на C, то погрузитесь в дебри переменных и указателей и не получите реальных результатов исследования. MATLAB интегрируется с C/C++ и Fortran, что позволяет вызывать C-код из MATLAB и наоборот [А. Ездаков «Функциональное и логическое программирование» (2016) Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с].

Заключение

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

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

Важность классификации

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

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

Список литературы

  1. Бекишев, Г.А. Элементарное введение в геометрическое программирование / Г.А. Бекишев, М.И. Кратко. - М.: Наука. Главная редакция физико-математической литературы, 2017. - 144 c.
  2. Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. - М.: Мир, 2016. - 360 c.
  3. Гедранович, В.В. Основы компьютерных информационных технологий: учеб.-метод. комплекс / В.В. Гедранович, Б.А. Гедранович,И.Н. Тонкович. – 2-е изд., стереотип. – Минск: Изд-во МИУ, 2016 – 344 с.
  4. Голицына, О.Л. Основы алгоритмизации и программирования: Учебное пособие / О.Л. Голицына, И.И. Попов. - М.: Форум; Издание 2-е, 2015. - 432 c.
  5. А. Ездаков «Функциональное и логическое программирование» (2016) Изд-во МГТУ им. Н.Э. Баумана, 2016. ~ 416 с
  6. Иванова Г.С., Основы программирования: Учебник для вузов. - 2-е изд., перераб. и доп. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2015. ~ 416 с:
  7. Пратт Т., Зелковиц М.Языки программирования: разработка и реализация, Питер, 4-е издание, 2016 – 248 с.]
  8. Тюгашев А.А.. Основы программирования. Часть I. – СПб]: Университет, ИТМО, 2016 – 160 с.