Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кпп.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
238.24 Кб
Скачать

Лекция 1. Введение в кроссплатформенное программирование.

Кроссплатформенным называется программное обеспечение, работающее более, чем на одной программной или аппаратной платформе

В этом смысле все, что можно запустить на выполнение в различных средах (например, ПО, работающее одинаково хорошо и под Windows и под Linux) можно назвать кроссплатформенным, однако имеются некоторые существенные нюансы.

В зависимости от технологии, которая положена в основу кроссплатформенности различают.

  1. Программное обеспечение (ПО), которое написано на языке программирования высокого уровня, имеющее программы – компиляторы, создающие исполняемые файлы под конкретную платформу. Например, программы, написанные на С++, Delphi или ассемблере могут быть скомпилированы в выполняемый код большинства современных операционных систем. Сами исходные коды программ при этом не меняются. В зависимости от используемой ОС меняется только программа – компилятор.

  2. Программы, которые написаны на языке высокого уровня и скомпилированы в промежуточный, байт-код, для исполнения которого под каждую платформу  написана так называемая виртуальная машина. Это специальная программа, которая предоставляет для байт-кода стандартную среду выполнения, не зависящую от конкретной ОС. В этом случае компилировать исходные коды под разные платформы надобности нет, однако возникает необходимость разработки виртуальных машин под каждую конкретную платформу. Этот подход используется в таких распространенных языках и платформах программирования как .NET (С#) и Java.

  3. Эмуляция среды выполнения. В данном случае программа запускается под управлением специальной программы – эмулятора, которая перехватывает все обращения к системным функциям ОС и самостоятельно обрабатывает их. Программа, которая запущена под эмулятором предполагает, что она выполняется в среде, для которой была изначально скомпилирована и обращается к стандартным функциям API этой операционной системы. Примером может служить программа - эмулятор Wine, которая разработана для использования в среде Linux и позволяет запускать под этой ОС программы, которые изначально были скомпилированы для установки и запуска под Windows.

  4. Скриптовое ПО. Это программное обеспечение, которое распространяется в исходных кодах и для своего запуска под каждой платформой требует соответствующего интерпретатора, так как каждая инструкция такой программы интерпретируется в исполняемый код «на лету». Такая технология выполнения используется в  PHP, Python, JavaScript и многих других интерпретируемых языках.

 Одним большим общим преимуществом всех подобных систем является возможность использовать без изменения один и тот же исходный код для работы под различными аппаратно-программными платформами, то есть, реализовывать принцип «Write Once, Run Anywhere» - «Написано Однажды, Работает Везде». Однако в каждом конкретном случае имеют место свои недостатки.

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

 - Ситуация намного улучшается при использовании виртуальных машин. В этом случае исходные коды компилируются в промежуточный байт – код, который гораздо меньше зависит от обновлений стандарта высокоуровневого языка. Следовательно, обновлять виртуальную машину можно гораздо реже. Кроме того, нет необходимости в поддержке отдельных версий ПО для различных платформ. Недостатком такого подхода является уменьшение скорости работы приложения по сравнению с программами, которые были напрямую скомпилированы в исполняемый код и необходимость дополнительной установки в систему громоздкой виртуальной машины, что для систем с небольшим объемом памяти может быть довольно существенно. Положение немного спасает оптимизация кода виртуальных машин. Так, современные JIT – компиляторы байт – кода Java позволяют достичь скорости выполнения программ, сравнимой со скоростью выполнения скомпиллированных программ на С++.

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

 - Что касается скриптового ПО, то в данном случае большой проблемой является необходимость распространения такого ПО в открытых исходниках. Это накладывает существенные ограничения на коммерческое распространение скриптовых приложений.

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

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

Краткая историческая справка.

Разработка Java была начата группой инженеров из компании Sun в 1991 г. В тот момент предполагалось создать компактную платформу для программирования контроллеров различных бытовых устройств вроде пультов дистанционного управления или кофеварок.

 Однако множество производителей бытовой техники и в то время и сейчас использовали и продолжают использовать очень большой ассортимент различных процессоров зачастую сильно различающихся по своей архитектуре и набору команд. Разработка компилятора, который мог бы поддерживать такое разнообразие аппаратных платформ была чем – то совершенно нереальным. Поэтому разработчиками было принято решение разработать компилятор, который позволял компилировать программу в некий обобщенный переносимый язык, который должна была выполнять некоторая гипотетическая машина, названная «Виртуальная машина Java» ( Java virtual machine – JVM). В этой системе: код java – JVM – аппаратная платформа от самой аппаратной части зависела только JVM, а код программы оставался неизменным и мог быть легко перенесен с одной платформы на другую. Первоначально проект назывался «Green». В рамках этого проекта в 1992г. было разработано несколько бытовых приборов, например устройство интеллектуального дистанционного управления и устройство переключения кабельных каналов для фирм, занимавшихся поставкой оборудования для видеонаблюдения. Однако новинка не вызвала большого энтузиазма у фирм, производящих электронную бытовую технику и вскоре проект Green был закрыт.

Через два года, в 1994 г., новая рабочая группа в составе Патрика Нотона и Джонатана Пэйна возобновила работу над Java, применив эту технологию для разработки браузера, который получил имя HotJava. Для демонстрации всех потенциальных возможностей технологии, в браузер HotJava не только была встроена виртуальная машина java, которая позволяла выполнять код java внутри web – страниц, но так же и сам браузер был полностью написан на java.

Данная разработка была представлена на выставке SunWorld’95 и вызвала всеобщий интерес, хотя на тот момент версия java 1.0 была еще достаточно сырой. Отсутствовали средства вывода информации на печать, а использующиеся библиотеки содержали много ошибок. Вторая версия java 1.2 была представлена на конференции JavaOne в 1998 г. и именно с этого времени стал широко использоваться известный лозунг разработчиков java «Write Once, Run Anywhere»  - Написано Однажды, Работает Везде.

Через три дня после выхода в свет, название новой версии java было заменено на «Java 2 Standard Edition Software Development Kit Version 1.2». Кроме Standard Edition немного позже добавили еще два варианта: «Micro Edition» для портативных устройств и «Enterprise Edition» - для корпоративных приложений.

В последствии технология java прошла через ряд последовательных усовершенствований, основная масса которых была добавлена в пятой редакции от 2004 года. В java 5.0 были добавлены обобщенные типы (наподобие шаблонов С++), циклы «for each», автоматическое представление простых типов как объектов (упаковка) и целый ряд других не менее принципиальных усовершенствований. Здесь надо отметить, что язык java с самого начала создавался как полностью объектный, в отличае от, например, того же Паскаля, который изначально задумывался как процедурный язык.

В последствии язык java последовательно дорабатывался от версии к версии. На текущий момент последней является версия Java SE 8, которая была выпущена 18 марта 2014 г.

Версия Java SE 9 ожидается 23 марта 2017 г.