Научная статья на тему 'Тенденции объектно-ориентированного программирования в разработке системы КуМир'

Тенденции объектно-ориентированного программирования в разработке системы КуМир Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
235
51
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Тенденции объектно-ориентированного программирования в разработке системы КуМир»

УДК 519.68

ТЕНДЕНЦИИ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

В РАЗРАБОТКЕ СИСТЕМЫ КуМир

А.Г. Леонов, к.ф.-м.н., доцент, зав. сектором (Научно-исследовательский институт системных исследований РАН, Нахимовский просп., 36, к.1, г. Москва, 117218, Россия, [email protected])

Для разработки мультиплатформенных программных продуктов в арсенале программистов имеются такие методы, как повторное использование (переиспользование) исходного и (или) бинарного кода, применение интерпретаторов и эмуляторов, виртуализация, Web-технологии и т.п. Однако большинство данных методик сложны и громоздки и по отдельности не могут обеспечить мультиплатформенность разрабатываемых программ и систем. Созданная система КуМир объединяет в себе различные среды разработки, языки программирования и программно-управляемые исполнители. Аппаратура, на которой работает система (стандартные настольные машины, оснащенные клавиатурой и мышью, и лэптопы, планшетные компьютеры, мобильные устройства (телефоны)), оснащена различным системным ПО и человеко-машинными интерфейсами, что накладывает определенные требования к процессу проектирования. При разработке программной системы одновременно используются несколько технологий, обеспечивающих мультиплатформенность, сокращающих время и необходимые ресурсы для реализации, такие как максимально возможное использование единого программного кода, дисциплина объектно-ориентированного программирования (ООП), использование переносимых библиотек классов ООП, дисциплина и технология параллельной разработки программных систем, виртуализация и т.д. Поставленная задача оригинальна еще и тем, что КуМир разрабатывается как сетевая система, в которой различными программными исполнителями, находящимися в своих мирах, можно программно управлять с любых устройств, находящихся в сети. Педагогические задачи, которые можно решать при таком подходе, не ограничиваются только изучением основ процедурного программирования (они могут быть расширены до изучения параллельного программирования), решением задач на логику и математических задач различной сложности. Кроме того, отдельные задачи могут потребовать коммуникации между учащимися, программы которых решают общие алгоритмические задачи.

Ключевые слова: мультиплатформенное программное обеспечение, интерфейс, объектно-ориентированное программирование, технология разработки программ и систем, КуМир.

THE OBJECT-ORIENTED PROGRAMMING TRENDS IN THE DESIGN OF KuMir

Leonov A G., Ph.D., Associate Professor, Head of Chair (SRISA RAS, 36/1, Nakhimovsky Av., Moscow, 117218, Russia, [email protected]) Abstract. In the modem world, the development of multi-platform software in theory is greatly simplified compared to the past century. It offers programming techniques such as recycling (re-use) of the source and (or) binary code, the use of interpreters and emulators, virtualization, Web-technology, etc. In practice, most of these methods are complicated and cumbersome and cannot alone (de facto) to provide multi-platform developed programs and systems. If the software system is to be used at computers and computer systems with completely different interfaces and capabilities, we have to use a special set of techniques and tools to reduce the time and resources for developing the software system. System KuMir combines different development environments (from pictographic to integrated with the runtime system), various programming languages (from pictograms and school algorithmic language to Pascal, C++, Phyton), a variety of program-controlled performers (from virtual to created, for example, LEGO Mindstorms NXT). The range of equipment that can be used for KuMir is very broad: standard desktop computer with a keyboard and mouse, laptops, tablet computers, mobile devices (phones). These devices are equipped with a whole range of system software: MS Windows, Linux, MacOS, Android, Windows Mobile, Maemo, MeeGo, IOS, etc. These devices are equipped with a variety of man-machine interface, which also imposes certain requirements for the development process. Multiple technologies (such as the maximum use of a single software code, the use of an object-oriented programming, portable class libraries PLO, discipline and technology of parallel software development, virtualization, etc.) are used for software development enabling multi-platform of the software system that reduces the time and programmer resources necessary for the implementation,. The complexity of the problem is exacerbated by the fact that KuMir is being developed as a network system, in which various software robots being in their own worlds can be controlled by programs from a variety of devices on the network. Pedagogical problems that can be solved with this approach is not limited to the study of the foundations of procedural programming, but can be extended to the study of parallel programming, problem solving logic, mathematical problems of varying complexity (virtual robot is on the endless surface) and problems in mechanics (for control of LEGO Mindstorms NXT). Moreover, to solve a particular problem may require communication between students whose programs address common algorithmic problems.

Keywords: multiplatform software, interface, object-oriented programming, technology of development programs and systems, KuMir.

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

настоящее время за системой программирования КуМир сохранено исторически возникшее название, так же назван и весь комплекс программ.

Система КуМир [1, 2] в современном ее состоянии (с подсистемой ПиктоМир) состоит из расширяемого набора исполнителей (или робо-

тов), набора систем программирования и вспомогательных утилит и программ.

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

Набор систем программирования.

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

• Система бестекстового, пиктографического программирования ПиктоМир. В ней учащийся собирает программу из команд исполнителя (робота). Управляющие конструкции языка представлены определенной параметрической организацией алгоритмов. Созданная учащимися программа при выполнении передает команды робота и получает его состояние.

• Система программирования на производственном языке программирования С++, Phyton и т.п.

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

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

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

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

Специфика различных целевых платформ налагает отдельные ограничения на интерфейс разрабатываемого ПО. Часто эти ограничения связаны не только и не столько с размером экрана на целевом устройстве или его производительностью, но и с наличием устоявшегося, привычного интерфейса пользователя на этих компьютерах. Так, например, для планшетных устройств нормой является одновременное поддержание в разработке книжной и альбомной ориентации рабочего экрана. Разработка интерфейса ПО для подобных устройств требует проектирования двух независимых интерфейсов для разной ориентации экрана, что в специфике лимитированного экрана для мобильных устройств делает разработку особенно сложной.

Решить поставленную задачу написания и поддержки мультиплатформенной реализации позволил следующий комплекс методов:

- максимально возможное использование единого программного кода как дисциплина объектно-ориентированного программирования (ОПП);

- использование переносимых библиотек классов ООП;

- дисциплина и технология параллельной разработки программных систем;

- виртуализация.

Рассмотрим каждый из методов.

При повторном использовании кода важен выбор языка (языков) программирования в разработке ПО. Поскольку для ПЭВМ в качестве языка реализации ПО использовался стандарт C++, то, следуя методике максимального использования единого программного кода, также был выбран язык C++. Однако на платформе Apple iOS, к которой относятся популярные iPhone, iPad и т.п., обычно используют Objective-C [3]. Версия программной системы ПиктоМир, которая и явилась толчком к столь масштабному перепроектированию, также написана на Objective C. Популярность платформы Apple не позволяет исключить ее из списка целевых платформ. В результате часть кода так и сохранена на Objective C.

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

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

Технология повторного использования кода накладывает определенные ограничения не только на стиль написания программы, но и на ее содержание. Разработчик должен постоянно контролировать свой код на его мобильность. Наиболее эффективно это сделать с помощью переносимых библиотек классов.

Использование переносимых библиотек классов ООП. Для увеличения мобильности разрабатываемого ПО в качестве библиотеки классов была выбрана Qt [4], имеющая широкую область распространения. Библиотека Qt разрабатывалась для Microsoft Windows Phone, и даже рассматривалась возможность поддержки Apple iOS.

В качестве базовой библиотеки классов для платформ iOS выбрана библиотека Cocos2D [5], обладающая следующей функциональностью.

В библиотеке классов реализованы такие понятия, как сцены и уровни. Существует возможность переключаться между сценами с использованием различных эффектов: плавный переход, сдвиг, поворот и т.д. Одна сцена может содержать множество уровней с разным порядком, прозрачностью и атрибутами. Разработчик добавляет в проект сцену, к сцене привязывается уровень, а на уровень добавляются объекты - спрайты. Библиотека дает богатые возможности по управлению спрай-тами. Менеджеры спрайтов позволяют оперировать атласами спрайтов, в результате эффективно используется память. Кроме этого, есть классы для работы со спрайтовыми шрифтами, применение которых существенно ускоряет отрисовку текста. С помощью набора спрайтов, содержащего раскадровку движения, можно реализовать анимацию объекта. Важным элементом библиотеки классов являются действия. Их можно применять почти к любому визуальному объекту. Существуют большой набор стандартных анимаций и возможность создавать свою анимацию. Движок поддерживает системы частиц. Можно создавать различные эффекты, такие как дождь, снег, фейерверк и т.п. Частицы могут различаться размерами, вращаться, к ним может применяться гравитация, можно настраивать их время вывода на экран и т.д. Значительно упростить разработку системы позволяет встроенная реализация меню и кнопок. Для текста в меню можно использовать спрайтовые шрифты.

Сократить время переноса с одной платформы интерфейсной составляющей исполнителей (роботов) на другую позволяет Cocos2D.

В используемой методике обучения КуМир и ПиктоМир традиционно имеют фиксированное

расположение рабочих окон на экране. Это удобно для целевых устройств с большими экранами и неприемлемо для мобильных устройств из-за аппаратных ограничений на размер экрана. Если экран целевой системы менее 1000x750 точек, вывод осуществляется методом наложения одного окна на другое с различной степенью прозрачности. Активное окно визуально находится поверх всех окон, но не закрывает их содержимое.

Чтобы не поддерживать различные программные реализации интерфейса (в том числе и на разных языках программирования - С++ и Objective C), многооконный вывод использует собственный набор классов, базирующийся на библиотеках Cocos2D и Qt.

Так как Qt и Cocos2D позволяют использовать Objective C и С++ соответственно, независимые части систем программирования КуМир и Пик-тоМир, а также ряд исполнителей реализованы на С++ и Objective C.

Кроме того, в разработке широко используется библиотека классов Cocos2d-X, написанная в основном на С++ и поддерживающая платформы, приведенные в таблице.

Платформы C++ C#

Мобильные платформы iOS +

Android +

WindowsPhone7 +

WindowsPhone8 -

BlackBerry QNX +

MeeGo

Настольные компьютеры Win32 +

Linux +

Win8 Metro +

Mac OS X +

Web Browsers HTML5 ready platforms +

Примечание: «+» - поддержана, «-» - в разработке.

Использование последней библиотеки существенно сокращает издержки на re-write кода при программировании в проекте.

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

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

Большинство вопросов совместимости вынесено на уровень проектирования архитектуры.

Система КуМир может работать как в сети, так и на одном рабочем месте, поэтому в ней нет яв-

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

Удобно считать, что Hub хранит экземпляр мира + один и более экземпляров различных роботов. Каждый экземпляр робота относится к своему классу и привязан к некоторому экземпляру мира. В одном мире может быть много различных роботов. Кроме роботов, доступных для программного управления с других терминалов, в мире может быть неограниченное число собственных роботов (см. рис.). Так, например, любой движущийся объект можно программировать как робот в мире. Робот не знает, кто им управляет: человек с пульта, программа или система.

Терминал 1

Терминал 2

(^Очередь^^

Постоянная синхронизация

Hub

В

Связь через Hub с соответствующими терминалами

Мир

4____W\ Очередь

Робот 2 (Терминал 1)

Пример взаимодействия объектов

Hub занимается вопросами синхронизации и обновления данных у терминалов, используя механизм синхронизации hash-таблиц. Напротив, терминал видит и визуализирует изменение состояния экземпляров роботов и экземпляра мира. Фактически структура мира может быть сколь угодно сложной. Так, если программируется цифровой мир, то он может быть представлен конечным или бесконечным графом. Для непрерывных поверхностей и других аналоговых миров мир может быт представлен набором вычислимых функций и т.п. При этом вся визуализация мира целиком лежит на терминале, что и обеспечивает платформонезависимость.

На терминал также возложены функции интерфейса с системами программирования (Tools): ПиктоМир, КуМир, системы программирования на С++ и пр. В этом наборе Tools есть не только различные среды программирования, но и пульты управления роботами, которые нужны для ручного управления роботами. Вообще говоря, пульты различны для различных классов роботов и аффилированы со своим классом робота.

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

Так, например, есть базовый класс пульт, в котором описаны дизайн пульта, расположение кнопок, скины (внешний вид) и т.п. Проектируемый пульт робота является наследником этого базового класса в соответствии с принципами ООП.

То же относится и к классу роботов, где все классы роботов являются наследниками базового класса.

Конечно, построение и взаимодействие классов в системе КуМир значительно сложнее, чем описано выше. Так, робот (как исполнитель) не существует вне своей группы миров. При этом получается еще одна иерархия:

Робот ^ {Мирь Мир2, ..., Мирп}, то есть группа миров, а конкретный экземпляр робота в каждый момент времени привязан к экземпляру мира из группы классов миров.

Литература

1. Леонов А.Г., Кушниренко А.Г. Методика преподавания основ алгоритмизации на базе системы «КуМир». М.: «Первое сентября», 2009.

2. Кушниренко А.Г., Рогожкина И.Б., Леонов А.Г. // Большой московский семинар по методике раннего обуч. информатике (ИТО-РОИ-2012): сб. докл. ПиктоМир: пропедевтика алгоритмического языка (опыт обучения программированию старших дошкольников). М.: Конгресс конференций ИТО-РОИ, 2012.

3. Wei-Meng Lee. Beginning iPhone SDK Programming with Objective-C, Wiley / Wrox, 2010.

4. Blancette J., Summerfield M. C++ GUI Programming with Qt 4 (2nd Edition) (Prentice Hall Open Source Software Development Series), NJ, Kindle Edition, 2008.

5. Strougo R., Wenderlich R. Learning Cocos2D: A Hands-On Guide to Building iOS Games with Cocos2D, Box2D, and Chipmunk, Addison-Wesley Professional, 2011.

References

1. Leonov A.G., Kushnirenko A.G., Moscow, «Pervoe sen-tyabrya», 2009.

2. Kushnirenko A.G., Rogozhkina I.B., Leonov A.G., Kongress Konferentsiy ITO-ROI, Moscow, 2012.

3. Wei-Meng Lee. Beginning iPhone SDK Programming with Objective-C, Wiley / Wrox, 2010.

4. Blancette J., Summerfield M., C++ GUI Programming with Qt 4, NJ, Kindle Edition, 2008.

5. Strougo R., Wenderlich R., Learning Cocos2D: A Hands-On Guide to Building iOS Games with Cocos2D, Box2D, and Chipmunk, Addison-Wesley Professional, 2011.

i Надоели баннеры? Вы всегда можете отключить рекламу.