УДК 004.9
ИНТЕРПРЕТАТОР ИСПОЛНИТЕЛЯ «РОБОТ»
© В.Н. Андреев, П.С. Кочеров
Ключевые слова: робот; интерпретатор; Python; Qt; PyCharm; программирование; ООП.
Рассмотрено создание интерпретатора исполнителя «Робот» с использованием языка программирования Python и вспомогательных средств.
Python - высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода [1].
Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объем полезных функций.
Python поддерживает несколько парадигм программирования, в т. ч. структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты -динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Python организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты).
Python портирован и работает почти на всех известных платформах - от КПК до мейнфреймов, именно поэтому выбор пал на него.
Естественно, необходимо подумать и об интерфейсе программы - для этого у нас есть Qt.
Qt - кроссплатформенный инструментарий разработки ПО на языке программирования C++ [2]. Есть также «привязки» ко многим другим языкам программирования: Python - PyQt, PySide; Ruby - QtRuby; Java -Qt Jambi; PHP - PHP-Qt и др.
Qt позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путем простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.
Изначально Qt был создан для использования вместе с языком программирования C++ и заточен под работу с ним, но был написан набор библиотек, позволяющий использовать все возможности фреймворка при написании программ на Python - PyQt, актуальная версия - PyQt5.
Объединяет эти вещи среда разработки - JetBrains PyCharm.
PyCharm - интегрированная среда разработки для языка программирования Python [3]. Предоставляет средства для анализа кода, графический отладчик, инструмент для запуска юнит-тестов и поддерживает веб-разработку на Django. PyCharm разработана компанией JetBrains на основе IntelliJ IDEA.
Возможности PyCharm:
- статический анализ кода, подсветка синтаксиса и ошибок;
- навигация по проекту и исходному коду: отображение файловой структуры проекта, быстрый переход между файлами, классами, методами и использованиями методов;
- рефакторинг: переименование, извлечение метода, введение переменной, введение константы, подъем и спуск метода и т. д. ;
- инструменты для веб-разработки с использованием фреймворка Django;
- встроенный отладчик для Python;
- встроенные инструменты для юнит-тестиро-вания;
- разработка с использованием Google App Engine;
- поддержка систем контроля версий: общий пользовательский интерфейс для Mercurial, Git, Subversion, Perforce и CVS с поддержкой списков изменений и слияния.
Помимо вышеперечисленных инструментов для разработки использовался тестовый процессор Notepad++, важнейшей особенностью которого явилось для нас наличие плагинов, а именно - плагина для совместного редактирования файлов в режиме реального времени. Парное программирование позволило ускорить разработку в несколько раз в связи с моментальным откликом на любые вопросы по коду и идеям, исполнение кода прямо в текстовом редакторе помогает отлавливать ошибки и исправлять недочеты мгновенно.
Цель работы: создание программы, которая будет интерпретировать человеческий язык для исполнителя «робот» и визуализировать выполнение программы.
Необходимые аспекты: расширяемость, гибкость, быстрота, легкость
Алгоритм создания можно записать следующим образом.
1. Обдумывание конечной идеи.
1809
2. Выбор инструментов для работы.
3. Создание плана действий.
4. Проектирование интерфейса.
5. Написание кода.
6. Рефакторинг кода.
7. Поиск и исправление ошибок.
8. Тестирование.
9. Релиз.
При создании кода рассматривались и реализовы-вались следующие задачи:
1) необходимость анализа строк кода на псевдоязыке «Робота»;
2) создание рекурсивной модели для обслуживания условий и циклов с предусловием;
3) возможность динамического изменения рабочего поля;
4) необходимость проверки всего рабочего поля на каждом шаге и т. д.
В связи с тем, что для PyQt, в отличие от реализации для C++, отсутствует возможность связать интерфейс с программным кодом, все формы («виджеты» в Qt) создавались вручную - Qt Designer использовался для создания набросков интерфейса.
В процессе написания выработались четыре класса: класс интерфейса Window, унаследованный от QDialog (класс Qt для окон Windows), TMNT, Cell и класс-расширение myPushButton.
Класс Window включает в себя все методы для работы с графическим интерфейсом, необходимые в программе - создание кнопок (объекты класса QPushBut-ton и myPushButton), отрисовка поля, определение глифов стен и таблиц стилей для кнопок-ячеек поля, контекстное меню для ячеек и т. д.
В классе TMNT находится вся логика интерпретатора исполнителя - поле, логика движения, логика определения препятствий, проверки на ошибки (рис. 1).
Рис. 1. Список методов класса TMNT
Класс Cell описывает ячейки поля и содержит только информацию о стенках и некоторые свойства клетки, необходимые для корректного отображения поля.
Qt не использует правую клавишу мыши для взаимодействия с интерфейсом, однако обрабатывает все нажатия клавиш - в связи с этим появилась необходимость дополнения стандартного класса кнопки - создания класса-потомка QPushButton - myPushButton, в котором был переопределен метод, отвечающий за обработку нажатия клавиши мыши, и создано событие («сигнал» в Qt) нажатием правой клавиши мыши.
В процессе рефакторинга удалось сократить программный код в полтора раза, уменьшить число обходов поля и добиться улучшения производительности.
В Python отсутствуют встроенные средства создания исполняемых файлов, поэтому для создания би-нарников был использован набор сторонних скриптов cx_freeze, позволяющий создавать как исполняемые exe-файлы, так и установочные msi-пакеты. Необходимость использования большого количества сторонних библиотек обусловливает довольно крупный для простой программы размер дистрибутива - 43 мегабайта из 50 занимают библиотеки Qt.
После того, как мы закончили делать все вышеизложенные пункты, можно продемонстрировать следующий результат (рис. 2).
Интерфейс программы в версии 1.0 включает в себя три зоны: кнопки для работы с файлом программы и ее запуском, строку адреса файла и рабочую зону с полем и строкой состояния. В строке состояния выводится информация о порядковом номере текущей клетки и выполняемой операции движения, например: «18 влево».
Работа над интерпретатором исполнителя «Робот» показала, что разработка интерактивного ПО на Python является отличным способом совершенствования навыков программирования и поиска нестандартных решений в отсутствие шаблонных конструкций кода для выполнения большинства задач по сравнению с более распространенными языками.
TMNT ?
Start Browse Step By Step Step
J: /DropbcxAJniver AndCo/3. txt
- - - 1
1 1
1 1
t 1 1
1 1
1 1
< 1 1
Стартовая клетка не совпадает с конечной, всего 22
Рис. 2. Конечный результат
1810
Подобные проекты дают большие возможности для саморазвития и предполагают творческий поиск. В процессе создания неизбежно возникают трудности, как лучше сделать тот или иной шаг - решение таких задач и приводит к совершенствованию своих навыков.
ЛИТЕРАТУРА
1. Python. URL: https://ru.wikipedia.org/wiki/Python (дата обращения: 15.08.2015).
2. Qt. URL: https://ru.wikipedia.org/wiki/Qt (дата обращения: 15.08.2015).
3. PyCharm. URL: https://ru.wikipedia.org/wiki/PyCharm (дата обращения: 15.08.2015).
Поступила в редакцию 12 октября 2015 г.
Andreev V.N., Kocherov P.S. INTERPRETER OF EXECUTOR "ROBOT"
The creation of interpreter executor "Robot" with the use of computer language Python and aids is considered.
Key words: robot; interpreter; Python; Qt; PyCharm; programming; OOP.
Андреев Владислав Николаевич, Тамбовский государственный университета им. Г.Р. Державина, г. Тамбов, Российская Федерация, студент института математики, естествознания и информационных технологий, e-mail: [email protected]
Andreev Vladislav Nikolaevich, Tambov State University named after G.R. Derzhavin, Tambov, Russian Federation, Student of Mathematics, Natural Science and Information Technology Institute, e-mail: [email protected]
Кочеров Павел Сергеевич, Тамбовский государственный университета им. Г.Р. Державина, г. Тамбов, Российская Федерация, студент института математики, естествознания и информационных технологий, e-mail: [email protected]
Kocherov Pavel Sergeevich, Tambov State University named after G.R. Derzhavin, Tambov, Russian Federation, Student of Mathematics, Natural Science and Information Technology Institute, e-mail: [email protected]
1811