На сегодняшний день существует большое количество программных средств обучения программированию учеников младшей школы, обладающих интерактивностью, удобным языком и многими другими немаловажными достоинствами. Но большинство из них не разработаны как кроссплатформенные или сетевые программные средства, следовательно, требуют установки на каждую рабочую станцию и требуют отдельную версию программы для каждой из установленных операционных систем. Отсутствие сетевой реализации большинства таких средств не предусматривает наличие: централизованной рассылки заданий ученикам в классе и на дом, централизованного и автоматического контроля результатов, оценки и сравнения оптимальности нескольких программ. Наличие таких функций повысило бы эффективность ведения занятий.
Вышесказанное актуализирует цель нашей работы, а именно, необходимость разработки кроссплатформенного, сетевого программного средства обучения программированию для младших школьников, не требующего дополнительной установки и конфигурирования, позволяющего вести автоматический контроль знаний и умений учащихся, с возможностью хранения статистики результатов.
Реализация данной цели привела к разработке следующих компонентов проекта:
Вложение | Размер |
---|---|
rabota.docx | 367.16 КБ |
Оглавление
Как это видит разработчик и программист
На сегодняшний день существует большое количество подобных программных средств, обладающих интерактивностью, многозадачностью, удобным языком и многими другими немаловажными достоинствами. Но большинство из них не разработаны как кроссплатформенные или сетевые программные средства, следовательно, требуют установки на каждую рабочую станцию и требуют отдельную версию программы для каждой из установленных операционных систем. Отсутствие сетевой реализации большинства таких средств не предусматривает наличие: централизованной рассылки заданий ученикам в классе и на дом, централизованного и автоматического контроля результатов, оценки и сравнения оптимальности нескольких программ. Наличие таких функций повысило бы эффективность ведения занятий.
Вышесказанное актуализирует цель нашей работы, а именно, необходимость разработки кроссплатформенного, не требующего установки сетевого программного средства обучения программированию для младших школьников.
В процессе реализации нашего проекта перед нами встало несколько глобальных задач:
Здесь мы кратко расскажем о том, что реализовано и какие функции в нашей среде есть. За более подробной информацией обращайтесь к руководству пользователя (приложение к работе).
Сделаем краткий обзор нашей игры. Цель игрока – выполнить все задачи в заданном лабиринте и доехать до финиша наиболее оптимальным путём. Но самое главное – чтобы это сделать, придётся написать программу для танка, который это всё и будет осуществлять. Программа пишется на нашем собственном языке, который имеет определённый набор команд, а также циклы и условные операторы (подробнее в руководстве пользователя). Ради простоты восприятия мы решили отказаться от использования переменных. Согласитесь, младшим школьникам ещё тяжело это осознать. В качестве параметров к циклам и условным операторам используются определённые «флаги», которые принимают истинное или ложное значение (иначе говоря, это одинарные условия). Примером такого может служить условие «справастена». Следует сказать, что условие в циклах и условных операторах можно комбинировать, используя коньюнкции, отрицания и дизьюнкции. Можно писать вложенные циклы и условные операторы.
Лабиринты записываются в «карты» - двухмерные массивы. Сохранённая группа из карты и нескольких программ называется проектом. Все карты, как и когда-либо сохранённые пользовательские программы, проекты хранятся на сервере в папке пользователя и могут быть загружены с него или сохранены там. Это обеспечивает удобство развёртки приложения – вы можете запустить приложение откуда угодно и где угодно, имея при себе только клиент, причём все ваши сохранённые проекты, программы, карты будут доступны.
Также присутствует редактор карт. Наверняка кто-то играл в стратегии, где он был. В таком редакторе можно создать свою карту с юнитами и постройками. Мы осознали пользу этой идеи для нашего проекта и создали свой редактор. В нашем редакторе карт можно создавать карты, используя определённый набор блоков (стена, мина, старт, финиш, мишень) и опыт рисования в Paint’e – все рисуется с зажатой мышкой и с лёгкой руки.
Обратимся к технической стороне нашего проекта. Схему всего проекта можно видеть ниже.
В ней можно выделить несколько основных компонентов: интерпретатор, исполнитель, дополнительные модули (на данный момент представленные редактором карт) и сервер. Клиентская часть включает в себя интерпретатор, исполнитель и редактор карт; всё это писалось для платформы Flash. Сервер написан на Java.
Интерпретатор – это модуль, анализирующий программы, составленные из команд вперед/назад/влево/вправо, из циклов типа while(условие) и условных операторов if. Основная задача интерпретатора – преобразовать программу в байт-код для дальнейшей передачи его исполнителю и собрать данные по оптимальности составленного алгоритма.
Исходный код(до проверки синонимов) | «Ассемблер» |
Пока(<условие>) Вперёд(1); Конец; | Jmp(<номер_условия>,3); forw(1); jumpTo(0); |
Если(<условие>) Направо(); Иначе Налево Конец; | Jmp(<номер_условия>,3); right(); jumpTo(4); left(); next(); |
Поясним, как он работает (см. схему ниже). На вход поступает текст программы, который идёт в первичную обработку, там он переводится в единый регистр, очищается от ненужных символов. После этого обработанный текст разбивается на задачи – каждая команда кладётся в отдельную ячейку массива, который затем проходит замену синонимов, где синонимичные команды заменяются одним единым синонимом для удобства последующего анализа.
Следующим шагом программа проходит «ассемблирование», где циклы и условные операторы заменяются аналогичными структурами с командами jmp(),jumpTo(),next(). Перед переводом, записываются в соответствующие массивы все данные о цилах и условных операторах: начала, концы, условия. Команда jmp(<номер_условия_в_массиве_условий>,<метка>) переходит по метке если указанное условие не соблюдается, jumpTo(<метка>) переходит по указанной метке, а next() – перейти к следующей команде. Next() был придуман ввиду трудностей перевода условных операторов: при переводе в ассемблерную структуру на месте end’а ничего не ставится, что существенно затрудняет нумерацию меток. Таблицу, где показаны синтаксические конструкции и их переводы в ассемблер вы можете видеть выше. После ассемблирования происходит запуск программы, после которого возвращается байт-код и статистика заезда(длина пути, количество операций, сравнений).
Байт-код – это инструкция для визуализатора (исполнителя), т.е. строка, состоящая из символов, каждый из которых обозначает одно действие для танка, например: проехать одну клетку, повернуть направо/налево. Стоит отметить наличие спецсимволов: «умереть», «задача выполнена». Статистика с байт-кодом отправляются исполнителю. Более подробную схему можно увидеть ниже. Там указаны все «кирпичики», на которых стоит этот модуль.
Исполнитель (Визуализатор) – это небольшой модуль, получающий байт-код от интерпретатора, обрабатывающий его, демонстрирующий работу написанной программы и отображающий информацию о её оптимальности. Частью визуализатора является также программируемый объект (танк). Этот танк выполняет те задачи, которые ему дал пользователь. Скриншот исполнителя можно видеть справа. Здесь показан результат выполнения программы пользователя.
Редактор карт позволяет создавать свои карты, то есть даёт ученику и учителю инструмент для составления своих заданий. Учитель может давать самые разные задачи, не останавливаясь на существующих, а ученик может оттачивать свои навыки на новых и нестандартных картах.
В основе работы редактора лежит управление режимами редактирования. Существует несколько режимов: рисование объектами, их изменение и удаление. Каждый только что нарисованный блок перемещается на клетку, над которой находится курсор, при этом проверяется занята ли эта клетка. После фиксации объекта на месте, его положение заносится в двухмерный массив карты и оттуда удаляется его старое положение, если объект был перенесён. Таким образом, на выходе редактора получается готовая карта в виде двухмерного массива, которая при сохранении посылается на сервер как обычная или контрольная. Контрольные карты используются в проектах для постановки задачи и проверки правильности её выполнения. Подробнее об использовании редактора карт читайте в руководстве пользователя.
Сервер – модуль, написанный для реализации возможности хранить на нём все пользовательские данные (карты, скрипты, проекты), чтобы пользователь мог легко использовать их на любой машине, не сохраняя у себя. В нашем сервере можно выделить 2 основные части:
Рассмотрим каждую из них подробнее:
Внешне, администраторская часть выглядит как консоль, в которую администратор может вводить команды. К ним относятся:
Интерфейс удалённого пользователя обеспечивает независимость от места запуска приложения. Иначе говоря, вы можете запустить приложение откуда и где угодно, всё что вам требуется – иметь клиент, вам не нужно таскать с собой свои карты и программы – всё на сервере. В состав этого модуля входят:
В будущем мы планируем сделать ещё много разных нововведений как то: редактор блок схем и построитель этих схем по программе пользователя, режим пошаговой отладки, новые блоки, персонажей, например турельки стреляющие в танк, скрытые ловушки, «туман войны», который добавит сложности тем, что лабиринт нельзя будет пройти только командами движения (не видно же что впереди) – нужно будет писать алгоритм. Также мы активно думаем о кооперативе и режиме параллельного программирования: представьте что в лабиринте у вас не один танк а несколько, и к каждому надо написать программу, чтобы при выполнении они не столкнулись и не мешали друг другу.
После реализации вышеописанных идей мы закончим основной движок проекта и можно будет перейти к реализации многозадачности. Можно сделать совершенно разных исполнителей – шахтёрский бур, копающий тоннели, космический корабль, разбивающий астероиды, вертолёт, перетаскивающий ящики и т.д.. Причём время на добавление нового исполнителя будет затрачено минимальное.
Хотелось бы сказать, что разработанная нами система может быть полезна не только «заинтересованным» в информатике школьникам. Даже если человеку в будущем эти знания не пригодятся, то ему обязательно в любой деятельности понадобится структурное и логическое мышление, которые можно развивать в школьном возрасте, используя нашу среду обучения.
Хитрость Дидоны
Дельфин: сказка о мечтателе. Серджио Бамбарен
Рисуем ветку берёзы сухой пастелью
Загадка Бабы-Яги
Снежная книга