Добавлен: 25.04.2023
Просмотров: 268
Скачиваний: 1
СОДЕРЖАНИЕ
1. Общая классификация языков программирования
1.1. Эволюция языков программирования
1.2. Области применения современных языков программирования
2. Проблемы выбора языков программирования при разработке кроссплатформенных приложений
2.1. Сложности разработки кроссплатформенных приложений
2.2. Критерии выбора языка программирования для современных кроссплатформенных приложений
2.3. Совмещение нескольких языков программирования
2.4. Выбор средств реализации пользовательского интерфейса
2.5. Оценка практического опыта реализации кроссплатформенных приложений
Веб-программирование - в основном, подразумевается разработка всего, что связано с интернетом. Это сайты, блоги, скрипты, конструкторы, системы управления контентом и т.д. Здесь практически нет зависимости от ОС, но есть ряд других зависимостей связанных, например, с браузерами и другими программами. В большинстве случаев, когда речь идет о веб-программировании, используется ОС Linux, на которой выполняется код программы. Браузеры, в которых выводится результат выполненной программы, может быть любым и на любой ОС, которая сейчас существует. Таким образом, можно разработать один код, который будет работать только на одной ОС, но выполняться и использоваться любым пользователем на любой ОС. Основные языки веб-программирования - это Python, PHP, Perl, JS, Ruby, Java.
В будущем можно ожидать новые операционные системы и языки программирования, разработанные с внедрением технологий виртуализации, так как они внедрилась не только в процесс создания прикладных программ, но и в процесс разработки оборудования[5]. Но на данном этапе, можно предположить, что хотя бы один из рассмотренных перспективных языков в будущем заменит существующие стандартные языки программирования.
2. Проблемы выбора языков программирования при разработке кроссплатформенных приложений
2.1. Сложности разработки кроссплатформенных приложений
Перед разработчиками приложений встает проблема разработки кроссплатформенных приложений, способных работать на разных устройствах и операционных системах. Например, на персональных компьютерах под управлением операционных систем Windows, Linux или macOS, на телефонах, планшетах, телевизорах и умных часах под управлением мобильных операционных систем Android и iOS или в веб - браузерах. Хорошим примером такой универсальной программы может служить программа облачного хранения файлов Dropbox, имеющая приложения для персональных компьютеров, мобильных устройств и веб-браузера.
Но далеко не каждая компания может себе позволить разработку под каждую из платформ. В связи с этим встает вопрос об оптимизации процесса разработки для нескольких платформ. В настоящий момент программисты не могут исходить в выборе языка программирования по принципу любимого языка, на котором они уже написали много программ. Потребуется предварительная проработка всех вопросов, связанных с созданием программного продукта и принятие взвешенных решений. В данной части курсовой работы проводится анализ возможных подходов к созданию кроссплатформенных приложений.
Проблема переносимости сейчас затрагивает большую часть имеющихся на рынке программ. В зависимости от назначения программ[6], проблемы переносимости проявляются по-разному. Рассмотрим возможные варианты.
Наименее всего проблема переносимости затрагивает различные вычислительные программы, например, программы расчета математических или физических моделей, которые не требуют сложного графического интерфейса. Чаще всего требуется просто ввести определенный набор данных и получить результаты. Кроме того, часто возникает задача удаленного доступа к вычислительным мощностям (в частности, суперкомпьютерам) на разных платформах через удаленные программы-терминалы, работающие с командной строкой. Такие программы-терминалы используют текстовый ввод-вывод и сравнительно легко переносятся на все платформы.
Другим примером являются программы, реализующие алгоритмы, не требующие больших вычислительных мощностей. Например, алгоритмы кодирования и декодирования аудио- и видео-информации. Мощности современных мобильных устройств хватает для выполнения таких алгоритмов, и многие пользователи хотят иметь возможность работать с данными мультимедиа не только со стационарных компьютеров. Интерфейс указанных программ состоит в последовательном выборе нескольких опций и файлов, то есть, он также достаточно примитивный. Проблема переносимости проявляется в выборе языка программирования, имеющего компиляторы для всех необходимых платформ.
В следующие группу входят приложения, использующиеся людьми в повседневной жизни. Например, приложения для доступа к электронной почте или обмена сообщениями. Они существуют для всех платформ и предоставляют одни и те же возможности в работе на различных платформах. Причем для каждой платформы создается отдельное приложение. Графический интерфейс данных программ обычно не сложен и чаще всего использует стандартные графические элементы. Проблема переносимости здесь проявляется уже не только в выборе языка программирования, но и в способе организации пользовательского интерфейса, ведь для каждой платформы рекомендованы свои правила построения интерфейса, зависящие от требований операционной системы и физических размеров устройства.
Также можно выделить еще одну большую группу программ - игровые программы. Они в основном используют специальные инструменты для отображения - игровые движки. Здесь для поддержки какой-либо платформы, в первую очередь, необходимо наличие версии игрового движка для нее.
Самую проблемную группу составляют программы со сложным графическим интерфейсом, требующие активного взаимодействия как различных экранных элементов, так и функциональных блоков программы. Это могут быть аналитические и деловые программы, стратегические и логические игры и многое другое. В создании таких программ важную роль играют дизайнеры пользовательского интерфейса. Указанная группа программ требует наибольших усилий по переносу, так как, с одной стороны, существует множество форм-факторов используемых устройств, а с другой стороны, концепции дизайна фирм- производителей (Apple, Google, Microsoft) сильно отличаются друг от друга.
Из краткого описания видно, что для любого современного приложения, независимо от его назначения, возникает потребность решения проблем кроссплатформенности на самых ранних этапах разработки. В следующих пунктах курсовой работы опишем возможные подходы к решению проблемы переносимости.
2.2. Критерии выбора языка программирования для современных кроссплатформенных приложений
Компании-поставщики операционных систем или платформ предоставляют разработчикам свои средства для разработки приложений. Родные средства базируются на каком-либо языке программирования и включают в себя набор системных библиотек.
Так, компания Microsoft предоставляет набор языков программирования для разработки приложений для Universal Windows Platform (единая платформа, работающая на персональных компьютерах, телефонах и планшетах) - C++, C#, Visual Basic и JavaScript[7]. Компания Apple предлагает разработчикам использовать языки программирования Objective-C и Swift для создания программ для операционных систем macOS, iOS, watchOS and tvOS[8]. А компания Google предлагает использовать язык Java[9] для разработки программ для операционной системы Android.
Несколько иная ситуация с созданием веб - приложений. Традиционно они разделяются на две составляющие - клиентскую (front-end) и серверную (back-end), для каждой из которых может использоваться свой язык программирования. Для клиентской части в подавляющем большинстве случаев используется язык JavaScript. Для серверной части набор языков программирования просто огромен. Наиболее распространенные из них - это PHP, C#, Java, С++, Scala, Ruby, Python (Django), JavaScript (Node.js). Хотя есть и довольно экзотические варианты вроде Hack, Erlang, Haskell и Prolog. Такое обилие связано с тем, что общение между клиентской и сетевой частями стандартизовано, и реализация серверной части может быть выполнена на любом языке, лишь бы она предоставляла интерфейс доступа, соответствующий стандарту.
Основные языки программирования для разных платформ различаются. Тем не менее, практически каждый из указанных языков в той или иной степени доступен почти на всех платформах, вопрос только в качестве его реализации на неродных платформах.
Достаточно популярно стало использование наборов интегрированных библиотек (фреймворков), позволяющих вести разработку приложения на одном языке программирования для нескольких платформ. На данный момент существует несколько фреймворков. Описание возможностей и принципов работы каждого из них требует отдельного внимания, поэтому приведем краткое описание наиболее распространенных из них, различающихся языком разработки, чтобы показать неоднозначность в выборе языка программирования даже при выборе фреймворка.
Одним из самых распространенных фреймворков является Qt, позволяющий создавать приложения на языке С++ для множества платформ - Unix, Windows, macOS, Android, iOS. Он предоставляет встроенные библиотеки для взаимодействия с платформой на языке С++, а также встроенный редактор интерфейса.
Распространенным вариантом кроссплатформенных фреймворков являются реализации, использующие веб-технологии, в частности, язык JavaScript. Так как сейчас никакая платформа, предназначенная для широкого круга пользователей, не может существовать без возможности отображения веб-содержимого, то программы, написанные на языке JavaScript и использующие HTML и CSS для отображения, могут быть запущены практически на всех платформах. Существуют специальные библиотеки, которые упрощают процесс создания таких приложений и расширяют их возможности. Например, Apache Cordova для мобильных платформ и React для веб-сайтов и персональных компьютеров.
Другим примером кроссплатформенного фреймворка является сочетание пакетов Delphi RTL и FireMonkey. Существуют реализации для платформ Windows, Unix, macOS, iOS и Android. Фреймворк состоит из двух частей - среды выполнения (Delphi RTL) и кроссплатформенной библиотеки интерфейса (FireMonkey).
Опять же отдельно стоит выделить средства для создания игровых программ. Они, как правило, уже базируются на фреймворке или движке, который является кроссплатформенным. Примером может служить игровой движок Unity, предлагающий разработку на языке C#. Движок доступен для множества платформ, включая Windows, Unix, macOS, iOS и Android.
Каждый из фреймворков обладает определенными достоинствами и недостатками. Так, Qt и Delphi обеспечивают хорошую производительность программ, но для поддержки графического интерфейса требуются большие ресурсы, чем это требуется для родных приложений. JavaScript обеспечивает самую лучшую переносимость графических элементов под разные форм-факторы устройств, но более-менее сложные программы, написанные на JavaScript заметно тормозят, особенно на устаревших устройствах. Программы на С# зачастую плохо поддерживают весь набор библиотек, встроенных в операционную систему.
Получается, что выбор языка программирования для создания многоплатформенного приложения очень неоднозначный.
• Для каждой платформы можно использовать её родной язык программирования.
• Можно использовать хорошо освоенный разработчиками приложения их любимый язык, но постоянно решать проблемы, связанные с его некачественной реализацией на какой-либо платформе. Проблема не только в том, что группа программистов привыкла к определенному языку, а в том, что на этом языке уже написаны значительные объемы кода. И встает вопрос, использовать его как есть, или переписывать на другой язык.
• Можно использовать универсальный фреймворк, но каждый из них имеет как определенные достоинства, так и значимые недостатки, которые могут не позволить создать программу приемлемого качества. Каким бы заманчивым не было решение использовать единый код для всех платформ, стоит четко понимать, что фреймворки не могут быть также хороши как родные средства. Во-первых, в них с опозданием вносится поддержка новых функций операционных систем. Во-вторых, они добавляют слой программного кода. Наличие этого слоя как ведет к некоторой (а иногда и значительной) потере производительности, так и вызывает неизбежные ошибки, борьба с которыми вызывает постоянную головную боль у разработчиков.
2.3. Совмещение нескольких языков программирования
Любая программа, как только она выходит за рамки одного программного модуля или класса, становится представима в виде сочетания нескольких составных частей.
В программе можно выделить основную часть, не зависящую от конкретной платформы. Если говорить очень обобщенно, то это множество алгоритмов, реализующих основные функции программы, так называемая бизнес-логика приложения. Данная часть является основной составляющей программы, делающей эту программу значимой, весомой для пользователя. Поэтому к ней предъявляются повышенные требования по корректности, надежности и отказоустойчивости. Соответственно, на создание этой части требуются значительные усилия команды разработчиков, и возникает естественное желание использовать единственную, проверенную и надежную реализацию этой бизнес-логики на всех поддерживаемых платформах.
Но приложение состоит не только из бизнес-логики. В нем также есть и интерфейс взаимодействия с пользователем (пользовательский интерфейс). Как правило, пользовательский интерфейс зависит от платформы. Компания-поставщик платформы предоставляет специальные инструменты для построения пользовательского интерфейса, а в процессе работы программы он управляется программным кодом, написанным на одном из языков, предоставляемым поставщиком платформы. То есть, интерфейс является частью приложения, зависящей от конкретной платформы.