Файл: Классификация языков программирования.Критерии выбора среды и языка разработки программ.pdf
Добавлен: 31.03.2023
Просмотров: 419
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Сущность языков программирования
1.1 Понятие языков программирования и краткая история их развития
1.2 Классификация языков программирования
Глава 2. Критерии выбора среды и языка разработки программ
2.1. Критерии выбора среды разработки программ
2.2. Критерии выбора языка разработки программ
Глава 3. Выбор языков программирования при разработке кроссплатформенных приложений
3.1. Проблемы выбора языков программирования
3.2. Варианты решения проблем выбора языков программирования
Следующая составляющая – стоимость создания, тестирования и использования программы. Этот фактор стоимости удобно проиллюстрировать на примере среды для языка Smalltalk. Данная среда состоит из окон, меню, механизма ввода данных с помощью мыши и набора средств, позволяющих свободно оперировать со Smalltalk-программой. Здесь программное решение может быть спроектировано, закодировано, протестировано, изменено и использовано с минимальными затратами времени и сил программиста. По современным представлениям, наличие в языке развитых конструкций и структур является лишь одним аргументом, влияющим на широту его использования. Наличие же подходящей среды программирования существенно усиливает применимость слабого языка. Прежде всего, в среде программирования должна присутствовать надежная, эффективная и хорошо документированная реализация языка программирования. Специализированные текстовые редакторы, средства моделирования и управления конфигурацией, а также утилиты тестирования, отражающие особенности как самого языка, так и порядка его использования, — это мощные ускорители всех этапов разработки программ. В итоге минимизируются время и затраты, требуемые программисту на решение какой-либо задачи.[64]
И последней составляющей является стоимость сопровождения программы. Исследования показали, что значительную часть стоимости используемой программы составляет не стоимость разработки, а стоимость сопровождения программы. Сопровождение — это процесс изменения программы после ее поставки заказчику.[65] Сопровождение включает в себя: исправление ошибок (17% времени и стоимости); изменения, связанные с обновлением операционного окружения (18% времени и стоимости); усовершенствование и расширение функций программы (65% времени и стоимости).[66]
Утверждается, что соотношение между стоимостью сопровождения и стоимостью начальной разработки может быть разным в зависимости от предметной области, где эксплуатируется программа. Для прикладных программ, работающих в деловой сфере, стоимость затрат на сопровождение в основном сравнима со стоимостью разработки. Для программного обеспечения встроенных систем реального времени затраты на сопровождение могут в четыре раза превышать стоимость самой разработки.[67] Высокие требования в отношении производительности и надежности таких программ предполагают их жесткую структуру, которая труднее поддается модификации.
Таким образом, в данной главе были рассмотрены несколько важных сторон разработки программ. В первом разделе были разобраны основные критерии выбора среды разработки программ. Второй раздел был посвящён критериям выбора языка разработки программ.
В завершении главы можно сделать вывод, что при разработке программ важно помнить обо всех перечисленных критериях и умело ими оперировать. Программист, выполняя свою работу, должен уметь правильно подобрать среду и язык, пользуясь этими критериями. В этом и заложена крупица успеха.
Глава 3. Выбор языков программирования при разработке кроссплатформенных приложений
3.1. Проблемы выбора языков программирования
Реальность XXI века такова: персональный компьютер уже не является единственным инструментом для выполнения программ и общения через интернет, зато появляется множество новых устройств – смартфонов, планшетов, умных часов и телевизоров. Большинство пользователей в своей повседневной жизни имеют несколько устройств и хотят использовать знакомые приложения на каждом из них.[68]
Кроссплатформенные приложения – это приложения, которые способны работать на разных устройствах и операционных системах.[69] Разработчики заинтересованы в создании подобных приложений, ведь в современном мире, как уже было отмечено выше, на них наблюдается большой спрос.
Однако не каждая компания может себе позволить разработку отдельных приложений для каждой из платформ. В связи с эти возникает вопрос об оптимизации процесса разработки для нескольких платформ.[70] В настоящий момент программисты не могут пользоваться при выборе языка программирования любимым языком, на котором они уже написали много программ. Здесь необходима предварительная проработка всех вопросов, которые связаны с созданием программы, и принятие взвешенных решений. Эту проблему называют проблемой переносимости.
Большая часть имеющихся на рынке программ сейчас затронута данной проблемой. В зависимости от назначения программ проблемы переносимости проявляются по-разному.
Компании, которые являются поставщиками операционных систем и платформ, предоставляют разработчикам свои средства для разработки приложений (так называемые «родные средства»). Эти средства базируются на каком-либо языке программирования и включают в себя набор системных библиотек.[71] Ключевое звено в данной курсовой работе – это язык программирования.
Известная всем компания Microsoft предоставляет набор языков программирования для разработки приложений для Universal Windows Platform. Данная платформа работает на персональных компьютерах, телефонах и планшетах.[72] В этот набор входят следующие языки: С++, С#, Visual Basic и Java Script. А компания Google предлагает использовать язык Java[73] для разработки программ для такой операционной системы, как Android.
Немного другая ситуация с созданием веб-приложений. У них есть две составляющие – клиентская (front-end) и серверная (back-end). Для каждой из них можно использовать свой язык программирования. Для клиентской части часто используется такой язык, как JavaScript. Для серверной части выбор языков велик: PHP, C#, Java, C++, Scala, Ruby, Python (Django), JavaScript (Node.js), Hack, Erlang, Haskell и Prolog. Такая многовариантность связана со стандартизацией общения между клиентской и сетевой частями. Реализация серверной части может происходить на любом языке, при условии, что она предоставляет интерфейс доступа, который соответствует стандарту.
Из всего, что написано выше, можно отметить: основные языки для разных платформ различаются. Однако практически каждый из языков доступен почти на всех платформах. Вот только качество его реализации на «неродных» платформах может отличаться.
3.2. Варианты решения проблем выбора языков программирования
При решении обозначенной в предыдущем подразделе проблемы переносимости всё больше говорят об использовании интегрированных библиотек, позволяющих вести разработку приложения на одном языке программирования для нескольких платформ, – фреймворках.[74]
Одним из самых распространённых фреймворков является Qt, позволяющий создавать приложения на языке С++ для большого количества платформ – Unix, Windows, macOS, Android, iOS.[75] Он обладает встроенными библиотеками для взаимодействия с платформой на языке С++, а также встроенным редактором интерфейса.
Ещё одним часто применимым вариантом кроссплатформенных фреймворков являются реализации, которые используют веб-технологии, в особенности язык JavaScript. По причине того, что платформы, предназначенные для широкого круга пользователей, не могут существовать без возможности отображения веб-содержимого, то программы, написанные на языке JavaScript и использующие HTML и CSS для отображения, могут быть запущены практически на всех платформах.[76] Также есть специальные библиотеки, упрощающие процесс создания таких приложений и расширяющие их возможности. К примеру, Apache Cordova для мобильных платформ и React для веб-сайтов и персональных компьютеров.
Другой пример кроссплатформенного фреймворка является комплекс пакетов Delphi RTL и FireMonkey. Существуют реализации для платформ Windows, Unix, macOS, iOS и Android. Данный фреймворк имеет две составляющие – среду выполнения (Delphi RTL) и кроссплатформенную библиотеку интерфейса (FireMonkey).
Отдельно стоит написать о средствах для создания игровых программ. Они зачастую уже базируются на фреймворке или кроссплатформенном движке. Пример – игровой движок Unity, предлагающий разработку на языке С#. Этот движок доступен для многих платформ, включая Windows, Unix, macOS, iOS и Android.[77]
Ещё одним возможным решением является разделение приложения на бизнес-логику и интерфейс, где бизнес-логика является кроссплатформенной частью. Для подобного разделения есть несколько доступных вариантов. К примеру, язык C# активно используется в программировании для Windows и Web, и обладает специальной интегрированной средой разработки (IDE) Xamarin, которая применяется для создания приложения для мобильных платформ Android и iOS.[78] Помимо этого, язык поддерживается на macOS и Unix. Если говорить иначе, то бизнес-логика, которая написана на языке C#, может быть применима на всех популярных платформах, и подключена с помощью специальных средств разработки, к родному интерфейсу системы.
Есть ещё один язык кроссплатформенного программирования, и это – С++. По причине того, что его первая версия была создана много лет назад, то при выходе обновлённых языков программирования (Java, Objective-C, C#) разработчикам приходилось оставлять возможность подключения модулей на С++. В каком-то смысле, это было вызвано тем, что при появлении этих языков очень много алгоритмов уже были реализованы на С++. К тому же, для языка С++ характерна более высокая производительность, чем у языков с автоматической сборкой мусора, поэтому части программ, требующие высокой производительности, по-прежнему было необходимо разрабатывать на С++.[79]
Как результат, в настоящее время программный код на языке С++ можно использовать на любой популярной платформе, при этом сочетая с другим языком программирования. Для Windows и Unix это производится через динамически подключаемые библиотеки (.dll и .so), для Android с помощью технологии Java Native Interface (JNI), а для macOS и iOS компилятор языка Objective-C полностью поддерживает компиляцию языка С++.[80] А новый язык Swift для разработки для платформ macOS и iOS поддерживает связь с языком Objective-C. Подключить С++ к языку JavaScript можно несколькими способами — с помощью инструментов Emscripten и WebAssembly, которые могут кросскомпилировать язык С++ в JavaScript и с помощью родных расширений для Node.js (Native Addons).[81]
Ещё один вариант решения – это реализация сетевых функций. Множество современных приложений используют сетевые функции, которые разделяются на клиентскую и серверную части.[82]
Взаимодействие с сервером ведется по заранее установленному протоколу. По причине этого на выбор серверного языка программирования не влияет выбор языка программирования для основной программы. Для реализации серверной части имеется доступ к большому набору языков программирования, в котором разработчики легко могут выбрать наиболее подходящий.
Вопрос же упирается в реализацию общения с сервером – использовать ли для него кроссплатформенный язык или нет. Нет точного ответа на данный вопрос. Так называемые «родные» языки программирования предоставляют библиотеки для работы с сетью, которые могут использовать разного рода настройки и особенности системы. Кроссплатформенные средства не всегда могут обеспечить весь набор возможностей. Однако данные возможности редко необходимы для минимальных сетевых функций. Возможно смешанное решение. Как пример – формировать данные для сетевых запросов в кроссплатформенной части и далее с их помощью родных библиотек их передавать для каждой платформы.[83]
Кроме бизнес-логики и сетевой части, в приложениях есть еще одна крупная составляющая – пользовательский интерфейс.
Имеется 3 основных технологии реализации пользовательского интерфейса: 1) использование родных для платформы графических элементов; 2) использование языка JavaScript и технологий HTML и CSS (JavaScript-технологии); 3) использование промежуточного графического движка, заменяющего родные графические средства (OpenGL, FireMonkey, Qt).[84]