Файл: Обзор языков программирования высокого уровня (Решение циклических алгоритмов).pdf
Добавлен: 06.04.2023
Просмотров: 112
Скачиваний: 1
Рисунок 1 - Связи ЯП ВУ
Проведенный анализ популярных языков программирования данной парадигмы, показал, что функциональное программирование и его основные идеи получили в настоящее время новый виток развития. Так, необходимо выделить новый язык с интересными связями, и, являющийся представителем этой вычислительной модели - язык Swift от компании Apple. Данный язык служит отличным полигоном для создания интерактивных приложений для мобильных устройств и в этом отчасти совпадает с предназначением ЯП ВУ Elm [2, С. 166,3, С. 139].
Если рассмотреть генеалогические связи этого языка (рис. 1), то становится понятно, почему Swift такой яркий и его синтаксис вполне лёгкий для освоения современными прикладными программистами. Во-первых, на его появление оказали влияние Си-подобные языки программирования, которые на протяжение десятков лет широко востребованы и освоены разработчиками ПО: это Java, Ruby, C++, Objectiv-C. В таблице 1 указана востребованность у работодателей в нашей стране специалистов со знанием перечисленных языков программирования. И тенденция такова, что основные языки - проверенные временем PHP, Java, C++ - занимают первые строчки таблицы, но современные языки, ровесники века, не уступают им в процентах роста и набирают популярность. Так, если брать цифры 2015 года за 100%-ю отметку, то прирост Swift составил 100%, а стоящий второй по числу заявок Java, прибавил 38% за год [8].
Таблица 1 - Вакансии мест для программистов
N n/n |
ЯП ВУ |
Временной период |
|
2015 |
2016 |
||
1. |
PHP |
5586 |
9707 |
2. |
Java |
6219 |
8581 |
3. |
C++ |
3252 |
4135 |
4. |
C# |
2853 |
4093 |
5. |
JavaScript |
2307 |
3657 |
6. |
Python |
3791 |
2581 |
7. |
SQL |
1449 |
1955 |
8. |
Oracle |
1303 |
1742 |
9. |
C |
917 |
1338 |
10. |
Ruby |
993 |
1003 |
11. |
Scala |
456 |
362 |
12. |
Perl |
165 |
223 |
13. |
Go |
72 |
188 |
14. |
Objective-C |
89 |
81 |
15. |
Swift |
39 |
78 |
Во-вторых, масштабность решаемых экономических задач, массовый охват всех сфер экономики сетевыми структурами диктует строгие требования к создаваемым приложениям: быстрота, интерактивность, динамичность, инкапсуляция, масштабируемость. Все эти качества присущи тем языкам, о которых упоминалось выше. Анализ динамики вакансий специалистов- программистов за 2012-2016гг в нашей стране (где 2012 год взят за базовую отметку в 100%)[9] (Таблица 2) и построенная по этим данным диаграмма (Рис. 2) показывает наибольшую востребованность программистов, владеющих языками JavaScript, Java, PHP. Значит и современные языки - потомки этих апробированных временем языков, должны получить со временем признание у массового пользователя - разработчика различного рода приложений. В высшей школе, например, в образовательном стандарте для информационно-технологических направлений обучения за последние пять лет появился даже курс, связанный с веб-технологиями, основу которого составляют знания по применению ЯП ВУ JavaScript, PHP.
Таблица 2 - Вакансии программистов в России
Временной интервал |
Языки программирования ВУ |
||||
РНР |
Java |
C++ |
C# |
JavaScript |
|
2012 |
100 |
100 |
100 |
100 |
100 |
2013 |
149 |
135 |
120 |
124 |
178 |
2014 |
136 |
169 |
127 |
133 |
194 |
2015 |
149 |
189 |
115 |
144 |
290 |
2016 |
260 |
257 |
151 |
208 |
462 |
ЯП ВУ Swift как раз и сочетает в себе понятность Си-подобных языков, опирается на мощную динамическую объектную модель Objective-C, не уступает по быстродействию C++ и Java, обладает доступностью по отношению к интерфейсам прикладного программирования для различных операционных систем [4, С.237-240,6].
С помощью этого нового языка программирования пользователи быстрее проверяют свои концепты и в целом быстрее создают свои приложения, так как в реализацию данного языка входит отладчик реального времени, который позволяет экспериментировать с кодом, наблюдать результаты изменений и вычислений мгновенно, без компиляции и запуска приложения. Кроме того, тенденция настоящего времени - это многопарадигмальность (мультипарадигмальность) языков программирования высокого уровня, и Swift - не исключение. Этот язык обладает направленностью и характерными особенностями объектно-ориентированного, функционального, императивного программирования.
Другой представитель мультипарадигменной направленности - язык программирования начала века - Scala, хотя по прошествии более десятка лет с момента выхода его в свет, он занимает в рейтинге популярности не самое видное место (таблица 1), но с точки зрения вклада в другие языки, такие как Swift, заслуживает внимания. Scala разрабатывался для простого и быстрого программирования приложений, поэтому в нём органично сочетаются возможности объектно-ориентированного и функционального программирования. На формирование этого языка оказали влияние такие элегантные ЯП ВУ, как Lisp, Haskell, Java, C#, он считается языком хорошей поддержки для компонентного программного обеспечения [7].
Влияние Java на этот язык велико, на Scala можно писать программы лишь немного корректируя синтаксис Java, это тоже является плюсом, так как Java появился на десять лет раньше и следует проверенным и надёжным принципами «чистого» объектно-ориентированного программирования. Например, можно использовать Scala-коллекции из библиотек и неявные преобразования из данной коллекции в Java - коллекции, причём как в одну сторону, так и в другую сторону. Даже инструмент написания встроенных аннотаций совпадает у этих двух языков [6].
Рисунок 3 - Динамика числа заявок на программистов по ЯП ВУ
Конечно, такие языки, как Scala, молоды и не набрали той популярности, что присуща традиционным ЯП ВУ (что можно проследить на диаграмме, рис. 3), но время не стоит на месте и можно смело утверждать, что будущее этих языков не за горами.
Характерная черта современного прикладного программирования - веб-направленность. Об этом свидетельствует позиция языка PHP на диаграмме востребованности программистов за 2015-2016 годы (Рис. 3). Используя статистические данные, упомянутые выше (таблица 1), можно сказать, на примере PHP, языки объектно-ориентированной парадигмы и скриптовые языки для написания веб-предложений будут востребованы ближайшие годы (рис 4-5).
Рисунок 4 - Прогноз востребованности PHP-программистов
Рисунок 5 - Прогноз востребованности Java-программистов
Проведенные расчёты в определении прогнозных тенденций, подтверждает и разработка совершенно нового языка веб-программирования Dart, как альтернативы уже широко известному языку программирования JavaScript.
ЯП ВУ Dart - совершенно новый язык, уже относящийся к языкам, появившимся во втором десятилетии двадцать первого века. Так или иначе, но при его создании разработчики попытались избавиться от недостатков, присущих его историческим «родственникам» (рис. 1) [5]. Этот язык относится к парадигме объектно-ориентированного программирования, но это не мешает ему быть хорошим инструментом при написании веб-приложений.
Он позиционируется, как мультипарадигмальный язык программирования, и это уже новое направление в развитии современных ЯП ВУ. Кроме того, Си-подобный синтаксис упрощает его освоение.
Если оценивать эффективность кода, то одним из основных критериев качества разрабатываемых программ, считается быстродействие, что не всегда присуще клиентским программам, написанным на JavaScript. За то небольшое время с момента представления языка (2011 год), программы, созданные на Dart - высокопроизводительны и успешно работают на вычислительных устройствах широкого класса: от смартфонов до серверов. Это является подтверждением качества предлагаемого языка, который в настоящее время проходит апробацию у разработчиков.
По безопасности - также важнейшему критерию современного программирования, ЯП ВУ Dart надёжнее Go и JavaScript. Безопасность веб-приложений, написанных на Dart, уже проверена и одобрена разработчиками. Имеются удобства у пользователей этого языка и в плане поддержки, отладки и модификации кода. Кроме того, 4 июля 2014 вышел первый стандарт языка Dart [5]. Эти аргументы говорят в пользу этого нового ЯП ВУ, что в ближайшее время он должен получить признание и у «массового программиста».
Таким образом, мир прикладного программного обеспечения не стоит на месте и появление новых ЯП ВУ тому подтверждение. В настоящем веке наиболее популярными становятся скриптовые языки и языки реактивного программирования, как правило, относящиеся к мультипарадигмальной концепции и опирающиеся на Си-подобный синтаксис. Данные тенденции обусловлены новыми разноплановыми экономическим задачами, сетевыми всемирными структурами, желанием программистов иметь простой, понятный и универсальный инструмент разработки современных приложений.
ГЛАВА 2. ИСПОЛЬЗОВАНИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОГО УРОВНЯ
2.1 Решение циклических алгоритмов
Часто у нас возникает необходимость в повторении какой-либо последовательности действий определенное количество раз. К примеру, при составлении алгоритма приготовления земляничного варенья, где есть действие «положить одну ст. ложку сахара», мы сталкиваемся с необходимостью выполнения операции «положить одну ст. ложку сахара» 10 раз. Таким образом алгоритм принимает следующий вид:
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
положить в емкость одну ст. ложку сахара;
Реализуя такую запись, мы тратим много личного времени и памяти программы. Чтобы это предотвратить, следует сократить алгоритм, применив циклы, после чего он будет выглядеть следующим образом:
В кастрюле 0 ст. ложек сахара
Добавить в кастрюлю одну ст. ложку сахара
В случае, если в кастрюле ложек сахара меньше 10, то применяем п. 2
Схематично данный алгоритм показан на рисунке 6.
Рисунок 6 — Схема алгоритма
Различие циклов заключается в том, известно ли нам количество повторений, в том случае, если известно, тогда такой цикл будет арифметическим, а если нет, то перед нами предстанет итерационный цикл. Последние, в свою очередь в языке Паскаль делятся на два вида алгоритмических циклов: первый, это конструкция while-do (цикл с предусловием); а второй, это repeat-until (цикл с постусловием). Рассмотрим эти виды более подробнее.
Рисунок 7 — Циклический алгоритм.
Циклический (итеративный) алгоритм имеет следующий синтаксис:
for <счетчик>:=<начальное значение> to <конечное значение> do <оператор>;
for <счетчик цикла>:=<начальное значение> downto <конечное значение> do <оператор>;
Цикл будет исполняться до тех пор, пока показатель счетчика не выйдет за заданный диапазон. Каждая итерация цикла увеличивает показатель счетчика на единицу (to) или уменьшает на единицу (downto). Можно использовать значение счетчика, например, для расчетов осуществляемых внутри цикла. Когда последнее значение вышло за пределы счетчика цикла, его сохранения не происходит. Цикл прекращает свое действие тогда, когда на очередной итерации, показатель счетчика вышел за установленные пределы значений цикла. Также при указании в начальном значении индекса большего, чем в конечном, такой цикл работать не будет.
Рисунок 8 — Итеративный цикл
Синтаксис итеративного (цикла с предусловием) имеет такой вид:
repeat
<операторы>