Добавлен: 25.04.2023
Просмотров: 277
Скачиваний: 1
СОДЕРЖАНИЕ
1. Общая классификация языков программирования
1.1. Эволюция языков программирования
1.2. Области применения современных языков программирования
2. Проблемы выбора языков программирования при разработке кроссплатформенных приложений
2.1. Сложности разработки кроссплатформенных приложений
2.2. Критерии выбора языка программирования для современных кроссплатформенных приложений
2.3. Совмещение нескольких языков программирования
2.4. Выбор средств реализации пользовательского интерфейса
2.5. Оценка практического опыта реализации кроссплатформенных приложений
Шахматные таблицы хранятся в особом формате, алгоритм чтения которого был реализован на языке С++. Алгоритм был подключен к родным приложениям для платформ разработки Android, iOS и Windows, а также к веб-серверу для удаленного доступа. При этом, приложение для Android было реализовано на языке Java, для iOS на Objective-C, для Windows на Delphi, а веб-сервер на C#. Подключение кроссплатформенного модуля к родному приложению для Android было реализовано с помощью технологии JNI, для iOS - Objective-C++, для Windows код на языке С++ был скомпилирован в виде dll библиотеки и подключен к программе на языке Delphi с помощью метода статического связывания, и к веб-серверу на языке C# с помощью метода динамического связывания. Приложения могли работать как с локальными файлами таблиц, так и с веб-сервером, протокол общения с которым был реализован с использованием формата XML. Таким образом, приложение «Таблицы Ломоносова» получило наибольшее количество реализаций для нескольких платформ и подтвердило оправданность использования языка С++ в качестве базового для кроссплатформенной части проекта.
Другим примером является шахматная обучающая программа «Пешка», имеющая реализации для платформ Android, iOS, Web и Windows. Программа предоставляет пользователю возможность решать шахматные задачи, а также читать теоретические уроки в удобном интерактивном виде. База задач и уроков хранится в программе в особом формате cke. Алгоритм чтения этого формата реализован на языке С++, а визуальное представление - с помощью родных средств для каждой платформы. Технология подключения кроссплатформенного модуля к родным приложениям такая же, что и при локальном доступе к файлам в «Таблицах Ломоносова». Но показательным примером использования кроссплатформенного кода в этой программе является компонент "XMLPlayer". Данный компонент предоставляет возможность разыгрывания обучающих сценариев по шахматной партии. В его функции входит: автоматическое проигрывание ходов в партии, запрос правильного хода в позиции, отображение подсказок при ошибках, подсчет набранных очков, разыгрывание нескольких вариантов ходов в партии. Все эти функции требуют показа информации пользователю, а некоторые (вопросы) еще и непосредственного взаимодействия.
Получается, что необходимо реализовать механизм асинхронного общения кроссплатформенного модуля с программным кодом на родных средствах. Данная задача была решена путем введения протокола общения между модулями и стандартизации интерфейсов доступа к ним. При необходимости отображения инфрмации, XMLPlayer вызывает метод интерфейса в реализации визуальной части. А при получении ответа от пользователя, визуальная часть вызывает необходимый метод XMLPlayer. Таким образом, визуальная часть была реализована отдельно для платформ Android, iOS, Web и Windows, но все реализации работают с кроссплатформенной реализацией XMLPlayer.
Кроссплатформенные средства также были использованы в веб-приложении «Игровая зона Chess King», с помощью них была реализована игра в шахматы против компьютера. Алгоритм игры в шахматы написан на языке C++ и используется в приложениях для платформ Android и iOS с использованием технологий, описанных выше. Чтобы подключить его к веб-приложению был использован инструмент Emscripten, также известный как WebAssembly, являющийся кросс - компилятором языка C++ в подмножество языка JavaScript. Для вызова функций, реализованных на C++, из кода на языке JavaScript, необходимо добавить в C++ проект отдельный модуль с перечислением внешних функций, никаких особых преобразований в коде C++ при этом делать не нужно. Единственной проблемой такого способа является высокая сложность отладки полученного веб-модуля, потому что он является результатом автоматического преобразования программы на языке C++.
Также к кроссплатформенным технологиям можно отнести вынесение части бизнес-логики программы на сторону сервера. Причем, благодаря единому стандарту доступа к веб-приложениям, реализацию программы можно делать практически на любом языке программирования. Эту особенность можно использовать для подключения готовой кодовой базы команды программистов, написанной на другом языке программирования. Например, в веб-приложении «Игровая зона Chess King» используются модули, написанные на языке Delphi, использовавшиеся в более ранних продуктах. Одним модулем является "Игровая компонента", реализующая алгоритм онлайн-игры в шахматы двух соперников. Общение с "Игровой компонентой" реализуется через веб-сокеты, а информация передается в формате JSON.
Другим модулем, реализованным на языке Delphi, является алгоритм жеребьевки игроков турнира по швейцарской системе. Алгоритм был реализован на языке Delphi много лет назад, и активно используется в программе "Шахматная Планета". Так как в нем довольно много тонких моментов, а программа использует много особенностей языка и информацию о низкоуровневом представлении структур данных, то было принято решение использовать готовый модуль, добавив в него специальные функции для веб-доступа по технологии ISAPI.
Заключение
После изучения проблем выбора языков и технологий кроссплатформенного программирования можно констатировать тот факт, что имеется достаточно большое количество различных подходов, но ни один из них не является идеальным. Окончательное решение по выбору технологий должно приниматься, исходя из требований к программе и возможностей компании.
Для получения качественных приложений разработчикам приходится вникать в тонкости программирования на используемых платформах и изучать их функциональность. В работе указано чем нужно руководствоваться для принятия решений о реализации различных программ и их частей, окончательное же решение нужно принимать разработчикам, исходя как из имеющейся базы программного кода, знания разработчиками тех или иных технологий и требований, предъявляемых к программным продуктам.
Кроме того, отметим, что обильно появляющиеся в последние годы языки программирования и их версии не только не решают проблему переносимости, но и усугубляют ее. И если для создания требовательных к скорости выполнения частей программного кода легко сделать выбор в пользу языка C++, то для написания программного кода общего назначения однозначный выбор сделать очень трудно. Серьезно назрел вопрос о договоренности компаний - разработчиков платформ о родной поддержке, по крайней мере, одного общего для всех платформ языка программирования.
Главными чертами этого языка должны быть как простота и поддержка современных конструкций языков программирования, так и, самое главное, беспроблемная стыковка с такими языками, как JavaScript, Java, Swift, C++.
Последнее условие является необходимым, так как только в этом случае пользователи смогут постепенно переходить на новый единый язык, не отказываясь от имеющегося кода.
Список литературы
- «Конституция Российской Федерации» (принята всенародным голосованием 12.12.1993) (с учетом поправок, внесенных Законами РФ о поправках к Конституции РФ от 30.12.2008 N 6-ФКЗ, от 30.12.2008 N 7-ФКЗ, от 05.02.2014 N 2-ФКЗ, от 21.07.2014 N 11-ФКЗ)
- Головин И. Г., Захаров В. Б., Мостяев А. И. Влияние тенденций современного общества на процесс создания, распространения и поддержки программ для мобильных устройств // Научный взгляд в будущее. - 2016. - Т. 4, № 2. - C. 41-51.
- Баклин Д. Профессиональное программирование приложений для iPhone и iPad / Джин Баклин ; [пер. с англ. ООО "Айдиономикс"]. - М. : Эксмо, 2013. - 672 с.
- Выбор языка программирования [Электронный ресурс] // Центр разработки для Windows [Официальный веб-сайт]. URL: https://docs.microsoft.com/ru-ru/windows/uwp/porting/getting- started-choosing-a-programming-language. Дата обращения: 11.02.2018
- Захаров В., Мальковский М., Мостяев А. Java или альтернативы? Опыт переноса приложений на платформу Android // Сборник научных трудов SWorld. - 2015. - Т. 5, №1(38). - C. 15-27.
- Захаров В., Мостяев А. Особенности переноса приложений на мобильные платформы // Программные системы и инструменты / Под ред. А. Н. Терехин. - Т. 15. - Издательский отдел факультета ВМК МГУ Москва, МГУ, 2017. - C. 16-24.
- Майер Р. Android 4. Программирование приложений для планшетных компьютеров и смартфонов / Рето Майер; [пер. с англ. ООО "Айдиономикс"]. - М. : Эксмо, 2013. - 816 с.
- Развитие языков программирования. Эволюция вычислительных систем [Электронный ресурс]. URL: http: //referatwork.ru (дата обращения: 10.01.2018).
- Симакова В.Е., Бедняк С.Г. Новые информационные технологии. Виртуализация // Научное сообщество студентов XXI столетия. Технические науки: сб. ст. по мат. VII междунар. студ. науч.-практ. конф. № 7. URL: http://sibac.info/archive/technic/7.pdf (дата обращения: 03.02.2018)
- Основы алгоритмизации и программирования: учеб. Пособие / Т.А. Жданова, Ю.С. Бузыкова. – Хабаровск: Изд – во Тихоокеан. Гос. Ун – та, 2011 – 567 с.
- Языки программирования [Электронный ресурс]. URL: http://life- prog.ru (дата обращения: 11.02.2018).
- Язык Wolfram Alpha - революция в области программирования // DailyTechInfo [Электронный ресурс]. URL: http://www.dailytechinfo.org/mfotech/5709-yazyk-wolfram-alpha- revolyuciya-voblasti-programmirovaniya.html (дата обращения:1.06.2017).
- McALLISTER N. InfoWorld. «10 языков программирования, которые могут перевернуть мир IT» // Компьютерные вести [Электронный ресурс]. URL: http://www.kv.by/content/325498-10- yazykovprogrammirovaniya-kotorye-mogut-perevernut-mir-it (дата обращения: 05.02.2018).
- The RedMonk Programming Language Rankings: January 2015 [Электронный ресурс]. URL: http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/ (дата обращения: 05.02.2018).
- Sketch - новый язык программирования, способный самостоятельно оптимизировать и завершать незаконченные участки кода // DailyTechlnfo [Электронный ресурс]. URL: http://www. dailytechinfo.org/infotech/5691-sketch-novyy-yazyk-programmirovaniya- sposobnyy-samostoyatelnooptimizirovat-i-zavershat-nezakonchennye- uchastki-koda.html (дата обращения: 1.06.2017).