Кроссплатформенный подход как средство унификации обучения программированию в различных операционных системах

№ 2 (38) 2012

М. В. Слива, канд. пед. наук, доцент Нижневартовского государственного гуманитарного университета

Кроссплатформенный подход как средство унификации обучения программированию в различных операционных системах

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

Введение

В последнее время все больше студентов вузов выбирают для своих компьютеров в качестве основной операционной системы (ОС) представителей семейства Linux (Debian, Ubuntu, Gentoo, CentOS и т. д.) [2]. Для этого есть несколько причин: наличие бесплатных версий ОС Linux, открытость кода ядра ОС, возможность экспериментирования с составом ОС, наличие бесплатного и открытого программного обеспечения для операционных систем семейства Linux и т. д., в том числе IT-мода (что для студентов является не последним фактором при выборе операционной системы). И в IT-сфере (как в бизнес-сообществе, так и в научных исследованиях) операционные системы семейства Linux также составляют все большую конкуренцию ОС Windows (в том числе на рынке мобильных устройств в виде ОС Android). Также не стоит забывать о Mac OS и iOS, занимающих определенную долю рынка операционных систем (причем в России — меньшую по сравнению с остальным миром, но увеличивающуюся с приростом устройств под управлением iOS). Естественно, что программы для одной операционной системы не работают под управлением другой ОС (за исключением переносимых исполнимых jar-файлов программ, созданных на языке программирования Java). Поэтому создателям программно-

го обеспечения для увеличения рынка сбыта своих приложений приходится портировать (переписывать с учетом особенностей конкретной ОС), а зачастую и создавать заново свои программы под разные операционные системы.

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

На данный момент существует несколько подходов к созданию кроссплатформенных приложений. Рассмотрим их подробнее.

Подходы к кроссплатформенному программированию

Определим понятие кроссплатформен-ного программного обеспечения (ПО) следующим образом: ПО, работающее более чем на одной аппаратной платформе и/или операционной системе (с учетом или без учета перекомпиляции под целевую платформу, но без изменения исходного кода программы).

№ 2 (38) 2012

Проблема переносимости приложений с одной ОС на другую состоит в основном в использовании библиотек для создания графического интерфейса пользователя (ГИП или в англоязычной нотации GUI — graphical user interface) и системных библиотек конкретной операционной системы (плат-формозависимых библиотек). Соответственно, подходы к созданию кроссплатформен-ных приложений основываются на разных способах решения описанной проблемы.

Среди языков программирования в плане кроссплатформенности отдельно от всех стоит Java. Его подход состоит в том, что программы сначала транслируются в байт-код, который потом выполняется виртуальной машиной Java (JVM — Java Virtual Machine) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор [4]. То есть программы, написанные на Java, могут работать под управлением любой операционной системы на любом устройстве, если установлена виртуальная машина Java и есть все необходимые библиотеки.

Выделяютя следующие достоинства языка Java для кроссплатформенного программирования:

• это изначально объектно-ориентированный язык программирования, в котором сведено к минимуму влияние недостатков структурного подхода (но используется синтаксис языков программирования семейства С);

• поддержка java-апплетов большинством современных браузеров;

• кроссплатформенность на уровне установки виртуальной машины.

Недостатки языка Java для кроссплат-форменного программирования следующие:

• сложность изучения на начальном этапе обучения в высшем учебном заведении (1 - 2 курс) (хотя опыт преподавателей Стэн-фордского университета1 показывает, что

1 URL: http://www.stanford.edu/class/cs106a/cgi-bin/ — страница курса CS106A Стэнфордского университета.

такая возможность есть, но это достойно от- I дельной статьи); ^

• необходимость установки дополнитель- ^ ного программного обеспечения в виде виртуальной машины, без которой созданная программа не сможет работать (но большинство современных операционных систем уже устанавливаются с какой-нибудь версией виртуальной машины Java, так что этот недостаток относительный).

Баланс достоинств и недостатков сделал язык программирования Java одним из самых популярных языков профессионального программирования2 (хотя это необязательно должно говорить о качестве самого языка как средства программирования, статистика отображает именно популярность). Заметим, что при этом одновременно наблюдается тенденция к постепенному спаду интереса3 к языку программирования Java, что можно связать с растущей популярностью языков C# и Objective-C. Особенно актуальным стало изучение данного языка в связи с распространением мобильных платформ (в частности, ОС Android, приложения для которой пишутся в основном на языке программирования Java [3]).

Аналогичный подход реализован для языка C# от корпорации Microsoft, который создавался после выхода языка Java. То есть существует среда выполнения .NET Runtime, которая и выполняет все программы, написанные на языке C#. На данный момент имеется несколько кроссплатформен-ных проектов (Mono4, DotGNU5), реализующих выполнение С#-программ на различных

2 URL: http://www.tiobe.com/index.php/content/ paperinfo/tpci/index.html — TIOBE Programming Community Index (индекс популярности языков программирования).

3 URL: http://www.tiobe.com/index.php/paperinfo/tpci/ Java. html — статистика изменения популярности языка программирования Java.

4 URL: http://www.mono-project.com — официальный сайт проекта Mono.

5 URL: http://dotgnu.org — официальный сайт проекта DotGNU.

№ 2 (38) 2012

платформах. Достоинства и недостатки использования языка C# для кроссплатфор-менного программирования в основном такие же, как и у Java-подхода (хотя Java является более распространенным средством кроссплатформенного программирования по сравнению с C#).

Другой подход — это использование кроссплатформенных библиотек в стандартном языке (С, С++, Perl, Python, Ruby и др.). В настоящее время существует не-| сколько библиотек, активно используемых ^ в данных целях: GTK+, Qt, wxWidgets, FLTK, § Tk. Наиболее популярны в силу различных ! обстоятельств библиотеки GTk+6 и Qt. Из-I начально они создавались для программи-<| рования в ОС Linux: GTk+ — для рабоче-! го стола Gnome (а точнее, для создания й графического редактора GIMP, бесплат! ного аналога программы Adobe Photoshop), Qt — для рабочего стола KDE. В дальней-^ шем эти библиотеки получили развитие

1 в сторону кроссплатформенности. При-<§ чем отличием GTk+ является то, что с ее ¡1 использованием можно писать на языке Ц С программы с графическим интерфейсом Ц пользователя без использования объект-|| но-ориентированного подхода (это можно § в некоторой степени сравнить с програм-| мированием с использованием WinAPI, хотя

использование библиотеки GTk+ сущест-<| венно проще). Таким образом, имеется воз-g можность создавать современное ПО даже ц студентам 1 курса IT-специальностей, которые еще не изучали объектно-ориентиро-Ц ванное программирование (ООП) [1]. Для 5 помощи в создании графического интерфейса к программе, созданной с исполь-

2 зованием GTk+, имеется специальный ре-<| дактор интерфейсов Glade7, также кросс-Ц платформенный.

'5 Существуют следующие достоинства ic подхода к кроссплатформенному програм-

к 6 URL: http://www.gtk.org — официальный сайт про-

g екта GTK+.

и 7

<э 7 URL: http://glade.gnome.org — официальный сайт

¿с проекта Glade.

мированию с использованием кроссплат-форменных библиотек:

• используется стандартный язык программирования, новыми являются только средства, предоставляемые самой кросс-платформенной библиотекой;

• возможность использовать не только ООП, но и более простое структурное программирование (предшественник ООП).

Недостатки подхода к кроссплатфор-менному программированию с использованием кроссплатформенных библиотек следующие:

• необходимо устанавливать на базовую компьютерную платформу все содержимое используемой библиотеки для создания исходного кода, а с исполняемыми файлами готового приложения требуется устанавливать используемые средства библиотеки для целевой платформы (данный недостаток можно считать относительным, так как и в стандартном подходе к программированию все используемые библиотеки обычно переносятся с установочными файлами программы — если, конечно, они не являются стандартными для целевой платформы);

• не все кроссплатформенные библиотеки позволяют создавать интерфейс, сравнимый по разнообразию исполнения со стандартными средствами программирования для некоторых операционных систем, т. е. программист, придерживающийся кросс-платформенного подхода, ограничен возможностями выбранной библиотеки (этот недостаток также относительный, т. к. с каждой новой версией большинства кросс-платформенных библиотек средства по разнообразию создаваемого интерфейса увеличиваются).

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

№ 2 (38) 2012

ствует даже понятие кроссбраузерности — свойство сайта отображаться и работать во всех популярных браузерах идентично. Под идентичностью здесь понимается отсутствие развалов верстки и способность отображать материал с одинаковой степенью читабельности [5]. Кроссплатформен-ными на данный момент уже можно считать технологии flash8 и java-апплетов/сервлетов [6, 7]. Поэтому еще одним подходом к созданию кроссплатформенного ПО считается веб-программирование.

Выделим достоинства веб-подхода к кроссплатформенному программированию:

• для работы созданного программного продукта в большинстве случаев достаточно программы-браузера;

• можно не устанавливать созданное программное обеспечение локально на компьютер конечного пользователя, а предоставлять доступ удаленно, например посредством апплетов и сервлетов.

Отметим недостатки веб-подхода к кросс-платформенному программированию:

• необходимость наличия специальной программы-браузера для работы созданного приложения (но такие программы есть во всех современных операционных системах);

• при использовании дополнительных веб-технологий (поддержка которых не поставляется вместе с браузером) требуется установка специального программного обеспечения (так называемых плагинов);

• некоторые ограничения на производительность и интерфейс приложений (влияние этого недостатка уменьшается с выходом новых версий браузеров, развитием веб-технологий и ростом мощностей процессоров);

• проблематичность работы с графикой (либо слишком сложная реализация, особенно приложений с использованием трех-

8 URL: http://www.adobe.com/products/flash.html — официальная страница Adobe Flash Professional CS5.5.

S

мерной графики, хотя с появлением новых | технологий ситуация постепенно улучша- ^ ется). ^

Кроссплатформенные IDE

Отдельно следует сказать о кроссплат-форменных IDE (Integrated development environment — интегрированная среда разработки — система программных средств, используемая программистами для разработки программного обеспечения [8]). Причем, если выявлять свойства, определяющие кроссплатформенность IDE, то они должны удовлетворять следующим параметрам:

• интегрированная среда разработки выглядит и действует одинаково в нескольких из основных на данный момент линиях операционных систем для персональных компьютеров: Linux, Windows, Mac OS;

• поддерживает программирование на кроссплатформенном языке программирования или позволяет использовать связку стандартный язык плюс кроссплатформен-ная библиотека;

• созданный исходный код является кроссплатформенным с учетом компиляции для целевой операционной системы.

В настоящее время можно выделить следующие кроссплатформенные IDE: Net-Beans, MonoDevelope, Qt Creator, Eclipse, IntelliJ IDEA.

Рассмотрим некоторые из них.

Qt Creator9 — кроссплатформенная IDE для работы с библиотекой Qt преимущественно на языке С++, т. е. это аналог среды разработки Visual Studio или Embarcadero RAD Studio (наследие Delphi) для создания программ с графическим интерфейсом на основе использования языка С++ с библиотекой Qt, что позволяет создавать кросс-платформенные (с учетом компиляции) приложения с использованием дизайнера интерфейсов. Основные достоинства среды разработки Qt Creator:

9 URL: http://qt.nokia.com — официальная страница

проекта Qt.

№ 2 (38) 2012

• она выглядит и действует одинаково во всех трех основных на данный момент линиях операционных систем для персональных компьютеров: Linux, Windows, Mac OS;

• поддерживает разработку приложений для мобильных устройств (ОС Symbian, MeeGo);

• содержит визуальный редактор интерфейсов, что облегчает проектирование внешнего вида создаваемого приложения;

• совместим с QML10 — языком декла-| ративного описания интерфейсов, кото-^ рый используется в связке с библиотекой § Qt и С++ [14];

jg • распространяется как на платных, так I и на бесплатных условиях (последнее осо-<| бенно актуально для учебных заведений). ! То есть можно создать проект в интегри-g рованной среде разработки Qt Creator под ! операционной системой Windows, скомпили-<5 ровать и запустить в ней, потом перенести J исходники в Qt Creator под Linux, скомпили-

1 ровать и запустить там, и то же самое — для

<§ Mac OS. Появилась возможность коллективен

¡1 ной разработки приложения в разных опе-

| рационных системах (т. е. один программист

Ц делает свой модуль в операционной систе-

|| ме Linux, другой — в ОС Windows, третий —

§ в Mac OS, далее все модули собираются

| в любой операционной системе и готовое приложение опять-таки можно компилиро-

<| вать в любой из поддерживаемых ОС).

g NetBeans11 — кроссплатформенная сво-

§ C++, Ada и ряде других. Из этого описания

Ц следует одно из достоинств NetBeans — количество поддерживаемых языков (расши-

2 ряемость за счет подключения нужных пла-<| гинов). NetBeans изначально создавался как Ц среда для программирования на языке Java, '5 так что естественно выбирать данную IDE,

& 10 URL: http://doc.trolltech.com/4.7-snapshot/ qdeclarativeintroduction.html — Introduction to the QML g Language (Введение в язык QML). u ii

о 11 URL: http://netbeans.org — официальная страница ¿с проекта NetBeans.

если в качестве кроссплатформенного инструментария выбран язык Java. Сама интегрированная среда разработки NetBeans написана также на языке Java [9].

Eclipse12 — свободная интегрированная среда разработки модульных кроссплат-форменных приложений. В своем назначении похожа на NetBeans (создавалась для программирования на языке Java, сама написана на Java, поэтому, как и NetBeans, естественно подходит для кроссплатфор-менного программирования с использованием Java). Эта среда является очень популярной благодаря возможности расширения с помощью плагинов, коих написано очень много (собственно, в этом Eclipse соревнуется с NetBeans, равно как и в звании лучшей среды программирования на языке Java) [10].

Кроссплатформенный подход в обучении программированию

Таким образом, используя какой-либо из подходов к кроссплатформенному программированию, а также кроссплатформен-ную IDE, можно строить преподавание программирования на основе одной интегрированной среды разработки, не ограничиваясь конкретной операционной системой и не вдаваясь в особенности разработки графического интерфейса для различных ОС (эту заботу берет на себя среда разработки и выбранный кроссплатформен-ный язык или библиотека — в зависимости от подхода).

В связи с вышеописанным имеет смысл использовать в целом кроссплатформен-ный подход к обучению программированию. Можно применять следующую методику обучения программированию:

Этап I: структурный. Изучаются основы языка С (изначально кроссплатформенного по определению), после чего возможно приступить к изучению использования кросс-

12 URL: http://www.eclipse.org — официальная страница проекта Eclipse.

№ 2 (38) 2012

платформенной библиотеки GTk+, с примерами как для Linux, так и для Windows (все отличия будут, в основном, в компиляции исходного кода). При этом использование неявной работы с объектами подготавливает обучаемых к объектно-ориентированному подходу в программировании [1]. Например, проанализируем простое приложение, написанное на языке С с использованием библиотеки GTK+:

#include <gtk/gtk.h>

int main (int argc, char *argv[]) {

GtkWidget *window;

// объявление переменной-указателя // типа GtkWidget gtk_init(&argc, &argv); // инициализация библиотеки GTK+ //создание окна

window = gtk_window_new(GTK_WINDOW_ TOPLEVEL);

//установка заголовка окна gtk_window_set_title(GTK_WINDOW (window),"1"); gtk_widget_show(window); //делаем окно видимым gtk_main();

// передаем управление GTK+ return 0;

Данная программа создает простое окно с заголовком, как показано на рис. 1.

Рис. 1. Вид простого окна, созданного с помощью GTK+

В рассмотренном примере неявно используется создание указателя на объект

s

window типа GtkWidget, но обращение к не- | му происходит обычным для С образом че- ^ рез функции, которым в качестве параметра ^ передается имя нужного объекта.

Если бы программирование велось с применением объектно-ориентированного подхода, то те же самые действия производились бы с помощью свойств и методов класса GtkWidget. Но в данном примере студенту, обучающемуся по специальности «Программное обеспечение вычислительной техники и автоматизированных систем» или «Прикладная математика», хватило бы тех знаний языка С, которые он получил на первом курсе (в ходе изучения таких дисциплин, как, например, «Программирование на ЯВУ» или «Алгоритмические языки и программирование», соответственно для выше обозначенных специальностей).

Также на этом этапе использование редактора интерфейсов Glade поможет освоить принцип WYSIWYG (What You See is What You Get — «что видишь, то и получишь» — принцип функционирования современных IDE со встроенными редакторами интерфейсов), который будет использоваться на дальнейших этапах изучения программирования (хотя можно создавать современные программы и без редакторов интерфейсов) [11].

Особое место на данном этапе следует уделить принципу соединения сигналов и слотов (аналог события и обработчика события), так как этот принцип используется и на следующих этапах (и не только при использовании библиотеки GTK+ — библиотека Qt также использует этот принцип). Сигнал (в терминологии GTk+ и Qt) — аналог события в терминологии программирования для операционной системы Windows, т. е. его порождает объект, на который воздействует пользователь (например, при щелчке левой кнопкой мыши на объекте в окне). Слот (или функция обратного вызова) — функция, которая соединяется с соответствующим сигналом конкретного объекта и вызывается каждый раз при срабатывании этого сигна-

№ 2 (38) 2012

!

SS

ё u

Ig

о §

£ £

о

if

! a

=i is

0

1 &

0 &

1

It

0

1

s t

u !

I

I !

I

u i

ла [12, 13]. Реализация данного механизма без объектно-ориентированного подхода может показаться странной или неестественной, но, тем не менее, это используется в программировании, особенно в ОС семейства Linux, что продемонстрируем на следующем простом примере:

#include <gtk/gtk.h>

// объявляем глобальные

переменные-указатели

// для создания нужных объектов

GtkWidget *window,*button,*edit,*vbox;

//создаем функцию обратного вызова

//(слот) для обработки

//нажатия на кнопку

void button_click

{ gtk_entry_set_text(GTK_ENTRY(edit),

"Нажата кнопка");}

int main

{ gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_

TOPLEVEL);

//создаем кнопку

button = gtk_button_new_with_label ("Нажать");

//создаем поле ввода/вывода edit = gtk_entry_new(); //создаем упаковочный контейнер vbox = gtk_vbox_new(TRUE,5); //вставляем объекты в созданный //контейнер

gtk_box_pack_start(GTK_BOX(vbox),edit, TRUE, FALSE,5);

gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, FALSE,5); gtk_window_set_title(GTK_WINDOW (window),"1");

//вставляем контейнер в окно gtk_container_add(GTK_CONTAINER (window), vbox);

//соединяем сигнал нажатия кнопки //с созданной функцией //обратного вызова button_click g_signal_connect(button, "clicked", G_CALLBACK (button_click),edit); //показываем окно со всеми объектами gtk_widget_show_all(window); gtk_main (); return 0; }

Данная программа расширяет предыдущий пример, добавляя в окно кнопку

и строку для ввода/вывода текста (рис. 2). При нажатии в поле появляется текст. Для компиляции и создания исполняемого файла достаточно набрать текст приведенной программы в любом текстовом редакторе, сохранить программу в файле, например, window.c, и откомпилировать с помощью следующей консольной команды:

gcc window. с -о window Npkg-config --cflags --libs gtk+-2.0N

Рис. 2. Вид окна с кнопкой и полем ввода/ вывода

Пример приведен для операционной системы семейства Linux, в результате получится исполняемый файл window. Для ОС семейства Windows действия аналогичны с учетом выбранного компилятора.

Этап II: объектно-ориентированный. На этапе осваивается объектно-ориентированный язык С++ (без платформо-зави-симых расширений в виде Visual C++ и т. п.). После этого изучается кроссплатформен-ная библиотека с объектным подходом (например, Qt). Рассматриваются способы написания кроссплатформенных приложений, создание графических интерфейсов, способы компиляции в различных операционных системах. При этом используются знания, полученные ранее на первом этапе (работа с объектами через указатели, соединение сигналов и слотов), но уже с явным использованием объектно-ориентированного подхода.

Этап III: изучение кроссплатформенных IDE. Рассматриваются особенности программирования с использованием интегрированных сред программирования (создание проекта, структура и содержимое проекта, особенности создания интерфейса, запуск программы на выполнение, отладка приложения, тестирование отдельных мо-

44

№ 2 (38) 2012

дулей и т. д.). Дополнительно на этом этапе возможно рассмотреть способы установки приложения на компьютер конечного пользователя (создание установочных пакетов, установка по локальной сети, через Интернет и т. д.).

Естественно, что в составе учебного плана каждый этап может быть реализован как в границах одной семестровой дисциплины, так и нескольких учебных семестров в рамках разных дисциплин. При этом могут рассматриваться несколько кроссплатформен-ных библиотек и языков (это даже предпочтительнее, так как позволит обучающимся увидеть и опробовать достоинства и недостатки различных языков и библиотек).

Из особенностей вышеописанного подхода выделим плавность перехода от структурного программирования к объектно-ориентированному, через неявное использование объектов на первом этапе обучения при работе с библиотекой GTK+, что позволит в дальнейшем ускорить процесс освоения ООП-парадигмы.

Заключение

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

Список литературы S

<2 ва

1. Слива М. В. Преподавание основ программиро- ^ вания в Linux как средство перехода от структурного программирования к объектно-ориентированному. В кн.: Физико-математические

и компьютерные науки в образовании: сборник научных трудов преподавателей, научных сотрудников, аспирантов. Нижневартовск: НГГУ, 2010.

2. Слива М. В. Преподавание с использованием ОС семейства Linux. В кн.: Информационные ресурсы в образовании: Материалы Всероссийской научно-практической конференции (Нижневартовск, 15 - 17 апреля 2010 года) / отв. ред. Т. Б. Казиахмедов. Нижневартовск: НГГУ, 2010.

3. Хашими С., Коматинени С., Маклин Д. Разработка приложений для Android. СПб.: Питер, 2011.

4. Шилдт Г. Полный справочник по Java. 7-е изд. Пер. с англ. М.: Вильямс, 2007.

5. URL: http://www.site-maker.spb.ru/articles02. php — Кроссбраузерность — одна из главных задач в разработке сайта.

6. URL: http://litvinuke.hut.ru/articles/Java06.htm — Учим Java. Апплеты. Взаимодействие с CGI.

7. URL: http://www.comprog.ru/Java/article_3080. htm — Апплеты и сервлеты.

8. Дубова H. В круге разработки // Открытые системы. № 9. 2003. URL: http://www.osp.ru/ os/2003/09/183379/.

9. URL: http://hightech.in.ua/content/art-netbeans-ide — NetBeans IDE — универсальная интегрированная среда разработки приложений.

10. URL: http://www.javaportal.ru/java/ide/intro_eclipse. html — Введение в интегрированную среду разработки Eclipse.

11. URL: http://www.pcmag.ru/encyclopedia/term. php?ID=4669 — Определение: WYSIWYG.

12. URL: http://www.opennet.ru/docs/RUS/gtk_plus/ x178.html — Теория Сигналов и Обратных вызовов.

13. URL: http://www.qtinfo.ru/signalsandslots — Сигналы и Слоты.

14. URL: http://symmetrica.net/qt4/qml1.htm — Qt и QML — разные языки для движка и интерфейса.