Об изучении основ объектно-ориентированного программирования в школьном курсе информатики

ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ. МАТЕМАТИЧЕСКОЕ И КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ

УДК 004.42

Е.А. Еремин

ОБ ИЗУЧЕНИИ ОСНОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ В ШКОЛЬНОМ КУРСЕ ИНФОРМАТИКИ

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

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

В настоящее время объектно-ориентированный подход является господствующей парадигмой в профессиональной разработке программного обеспечения. Большая часть программистов признает достоинства ООП при разработке сложных систем, и в результате практически все современные языки программирования включают в себя поддержку этой технологии. Объекты широко используются не только при написании программ, но и при разработке внутренней организации систем, а также их интерфейса. Например [24], ОО подход позволяет описать такие важные понятия, как организация процессов для каждой из задач в современных операционных системах, механизм обмена сообщениями между компонентами сложных систем и даже работа пользователя со стандартными органами управления графического интерфейса. Идеи, похожие на наследование в ООП, обнаруживаются в области искусственного интеллекта, где для представления знаний широко применяются иерархические структуры. Архитектура современных компьютеров строится из отдельных модулей, разнообразных по внутренней организации, но

Введение

© Еремин Е.А., 2016

соединенных общими интерфейсами. Даже в образовании мы можем увидеть примеры, когда учебное программное обеспечение конструируется на основе модульных объектов [32].

Такое широкое применение идей ОО подхода в промышленности, теоретической информатике и техническом образовании требует широкого знакомства с его идеями, но это наталкивается на целый ряд трудностей. Прежде всего, сам подход базируется на очень высоком уровне абстракции, так что понимание его сути может порождать серьезные когнитивные проблемы [17; 18; 31; 35]. К тому же знакомство с ООП обычно сопровождается одновременным изучением новых для ученика конструкций языка программирования. Существуют и другие факторы, осложняющие преподавание ООП [21], например, отсутствие подходящих, тщательно продуманных учебных материалов по обсуждаемой теме, а также программной поддержки для ее закрепления. В частности, после подробного исследования литературы по преподаванию ООП в [28] было сделано заключение о нехватке педагогических методик, подходящих учебников и программных сред для начинающих. Несмотря на существование разнообразных идей по поводу обучения основам ООП, единой позиции в этом вопросе до сих пор не сформировалось.

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

«Очевидно, что начинающие программисты сталкиваются с очень трудной задачей. Изучение программирования включает в себя усвоение комплекса новых знаний, связанных с этим стратегий и практических навыков» [30]. Поэтому далее будут рассмотрены те трудности, которые возникают в преподавании ООП, и идеи, как можно преодолеть эти трудности. Поскольку количество публикаций по проблемам ООП огромно, из них выбраны только те, которые наиболее близки к теме статьи.

Первоочередное изучение объектов

Первый же опыт преподавания ООП немедленно показал, что есть существенная разница при обучении студентов, которые уже знают какой-либо язык программирования, по сравнению с «новичками». Как оказалось, после освоения классического (императивного) программирования ООП подход вызывает определенные трудности - ученикам требуется «перестройка» мышления. Подобное явление даже получило специальное название «изменение парадигмы» (paradigm shift). Чтобы избежать этой трудности, была предложена технология первоочередного изучения объектов. Как следует из названия, она предлагает изучать базовые принципы ООП с самого начала - до каких-либо языков программирования. В этом случае ученики сразу начинают с объектов, наследования и прочих фундаментальных понятий ООП и только после экспериментирования с этими идеями «переходят к знакомству с более традиционными контрольными структурами, но всегда в контексте последующего фокусирования на объектно-ориентированном дизайне» [9].

Еремин Е.А. • Об изучении основ объектно-ориентированного программирования

в школьном курсе информатики

Развернутая всесторонняя дискуссия о преимуществах первоочередного и более позднего изучения объектов не привела к единой позиции. В частности, здесь необходимо сослаться на широкое обсуждение экспертами темы в Интернете в 2004 году, обзор которого опубликован в [22]. Был сделан вывод, что «в исследовательской литературе отсутствует консенсус, является ли подход «objects first» или императивный подход сложнее для обучения».

Экспериментальные исследования также дают противоречивые результаты. Например, в публикации [15] утверждается следующее. «Главный результат исследования заключается в том, что нет разницы между «OOP-first» и «OOP-later» по отношению к результатам обучения». Напротив, исследование [34] привело к положительному заключению: «Можно утверждать, что ученики, обучавшиеся методом "object-first" достигли более высоких показателей».

Необходимо упомянуть, что экспериментальные исследования отчетливо показывают разницу в понимании программных текстов ОО стиля [29]. «У начинающих программистов при понимании ОО программы формируется ярко выраженная предметная модель, тогда как при императивном стиле программы у них формируется ярко выраженная программная модель». Более детальный обзор этой проблемы можно посмотреть в [30]. С точки зрения нашего рассмотрения этот тезис подтверждает, что ООП дает более высокий уровень понимания, и это может служить еще одним аргументом в пользу его изучения.

Возможное смешение понятий

Другой проблемой преподавания ООП является возможная путаница в головах учеников по поводу фундаментальных понятий. Большой список смешения ООП терминов был выявлен в работе [17] в результате анализа результатов студентов после дистанционного освоения курса. Как оказалось, студенты путали даже две базовые концепции - объект и класс. Более поздние публикации [28, 31, 35] подтвердили это явление.

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

Сложность подбора примеров

При разработке вводного курса ООП имеется и еще одна, достаточно специфическая, трудность: очень сложно подобрать доступные пониманию начинающих примеры. Корень проблемы в том, что технология ООП придумана для сложных программных систем и ее преимущества на простых задачах продемонстрировать затруднительно. Ситуация осложняется еще и тем, что в профессиональной литературе подавляющее число примеров строится вокруг банковской деятельности или информационных систем отдела кадров предприятия, что, как нетрудно догадаться, довольно далеко от жизненного опыта учеников. Поэтому при изучении основных идей ОО подхода в школе о практической части курса необходимо заботиться не меньше, чем о теоретической. К счастью, при должном внимании к данной проблеме найти подходящие примеры все же удается [1, 8].

Выбор языка, микромиры

Учителя часто спорят, какой язык лучше подходит для тех или иных целей обучения. Исследователи также тщательно изучают эту проблему, проводя детальное сравнение различных языков [23; 25]. Дискуссия по поводу языка ООП для начинающих еще более актуальна, поскольку они часто «фиксируют внимание на деталях языка, теряя общую картину, причем не имеет значения, как сильно мы подчеркиваем все эти концепции» [31].

Очевидно, что язык для начинающих должен быть кратким, с простыми правилами и без избыточных возможностей. Такие мини-языки [13] часто специально создаются для изучения основ программирования. «Время, необходимое для освоения самого мини-языка, мало, следовательно, студенты могут тратить большую часть своих усилий на более важные проблемы»

[13].

Кроме простоты учебные мини-языки имеют еще одно существенное преимущество: они всегда строятся на базе некоторых виртуальных сред, так что программа студента управляет некоторым объектом (исполнителем). Такую учебную среду часто называют микромиром [9; 13; 25; 33]. Использование микромира при обучении дает два существенных преимущества: дополнительную мотивацию учеников (введением игровых элементов) и упрощение языка программирования и среды разработки.

В российской методике преподавания школьного курса информатики идеология исполнителей развивается очень активно. Уже в системе самого первого школьного компьютера «Агат», которая называлась «Школьница» [4], была предусмотрена целая библиотека исполнителей, предназначенных для формирования у учащихся способности к алгоритмическому мышлению [3]. Позднее для поддержки известного школьного учебника, написанного коллективом авторов под руководством А.Г. Кушниренко [6], была создана еще одна система исполнителей -КуМир (Комплект Учебных МИРов). Эта система программирования, предназначенная для поддержки начальных курсов информатики, прекрасно зарекомендовала себя в школе [5, 13] и широко используется до сих пор. Другой, не менее популярный среди школьных учителей набор исполнителей - Роботландия [7] был создан в 1991 году под руководством общепризнанных специалистов в области школьной информатики Ю.А. Первина и А.А. Дуванова. Существует и множество других, возможно, чуть менее известных исполнителей для школьного курса. К сожалению, среди них нет ни одного, предназначенного для знакомства с основами ООП. Возможное объяснение такой ситуации заключается в том, что отечественная школа методистов молчаливо оставляет данную тематику «на потом» (в описанной ранее терминологии это «OOP-later»).

В то же время, несколько известных микромиров для изучения ОО подхода все же есть, в частности, Alice [14], Greenfoot [19] и ObjectKarel [36], построенный на базе Karel++ [11]. Все они придуманы и используются в качестве введения в один из наиболее популярных профессиональных ОО языков программирования - Java.

Визуализация

Изменения в микромире на экране компьютера, по сути дела, визуализируют ход выполнения программы, которая написана студентом, наглядно демонстрируя ее правильность или, напротив, допущенные при составлении ошибки. Конечно, современные профессиональные

Еремин Е.А. • Об изучении основ объектно-ориентированного программирования

в школьном курсе информатики

среды программирования тоже содержат визуализацию. Но при этом важно учитывать, что при преподавании вводных курсов «среда, возможно, более важна, чем язык» [20], поскольку, когда она слишком сложна, ученики теряют смысл учебного материала в борьбе с мощным, но сложным интерфейсом.

Мы должны тщательно продумать, какая именно визуализация нужна студенту. «Наиболее продвинутые профессиональные объектно-ориентированные среды разработки, такие как Visual C++ или Delphi, используют графическую поддержку только для построения графического интерфейса приложения и не делают ее для внутренней структуры самой программы» [20]. Кроме того, учебное ПО для изучения ООП должно содержать специальную визуализацию базовых ОО концепций.

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

Общие дидактические принципы

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

Бергин в своем проекте «14 педагогических паттернов» [10] высказывал по поводу построения курса похожие идеи. «Организуйте курс так, чтобы наиболее важные темы преподавались первыми. Учите наиболее важный материал, «большие идеи», первыми (и часто). Когда это кажется невозможным, учите наиболее важный материал как можно раньше» [10]. Аргументация такого вывода заключается в том, что если вы откладываете изучение важных концепций, у учащихся они могут стихийно сформироваться неправильно (см. выше описание проблемы смешения базовых концепций).

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

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

Стратегия изучения ООП

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

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

1. Обсудить фундаментальные категории ООП в соответствии с повседневным опытом.

2. Ввести концепцию объекта как вытекающую из наблюдений за реальным миром.

3. Усвоить концепцию класса как описания того общего, что есть у множества похожих объектов.

4. Объяснить идею порождения объекта от имеющегося класса.

5. Определить подкласс с помощью добавления дополнительных деталей к уже существующему классу и суперкласс как общую часть нескольких разных классов.

Первые два шага настолько общие, что они и так всегда обсуждаются на примерах из повседневной жизни. Для шагов 3-5авторы предлагают показывать студентам в качестве примера соответствующие декларации на языке C++. Тем не менее, поскольку состав примеров не является обязательным, мы можем все пять шагов рассказать без упоминания синтаксиса конкретного языка.

«После этих шагов преподаватели могут начать изучение языка, будучи уверенными, что студенты способны выучить язык, имея в головах правильное понимание объектно-ориентированной методологии» [37].

Аналогичную стратегию мы встречаем в [27] при описании вводного курса перед изучением языка Java. Здесь рекомендации менее подробны, но смысл определенно такой же. «Первые лекции следует начинать со сценариев, объясняющих идеи объектов и алгоритмов, используя примеры из реального мира, которые знакомы студентам и легко понимаются» [27]. Этот материал должен сформировать «ментальные модели» классов и объектов. Теоретическую часть предлагается дополнить несколькими специально спроектированными для данного курса компьютерными лабораторными работами. Программная поддержка имеет графический интерфейс и обеспечивает среду для исследования объектов и классов.

В недавно вышедшем учебнике [26] такой путь описывается следующим образом. «Какое-то время вы не будете чувствовать, что учите программирование. У вас будет ощущение,

Еремин Е.А. • Об изучении основ объектно-ориентированного программирования

в школьном курсе информатики

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

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

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

Программная поддержка

Для закрепления теоретического материала о том, что такое объекты и как их использовать, необходимо иметь некоторое учебное программное обеспечение для организации лабораторных работ. В данном разделе будет описан вариант такого ПО, разработанный автором. Программа называется System Builder (SB); ее главное окно показано на рис. 1. Название говорит о том, что перед нами среда для построения системы (виртуального микромира) из объектов, по сути - конструктор из объектов. Первая версия программы была представлена достаточно давно [2, 16], в дальнейшем она была существенно улучшена в ходе тестирования и работы со студентами.

Рис. 1. Главное окно программы SB

Особенности программы

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

Расширяя идеи современных визуальных сред программирования, SB не использует никаких текстовых объявлений классов или объектов. Вместо этого ученик просто заполняет некоторый простой «электронный бланк». Скажем, для создания нового типа объектов (класса) достаточно ввести в соответствующее поле выбранное имя, выбрать родительский класс из выпадающего списка и (по желанию) набрать для себя короткие комментарии (рис. 2). Иными слова-

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

Рис. 2. Создание нового типа объектов (класса) от одного из стандартных типов

В соответствии с педагогическими целями SB для описания поведения объектов использует простейший язык. Он включает в себя простейший оператор присвоения (например, x.image=x.image+1) и вызов метода объекта (x. changeimage). Имеется также условный оператор //общепринятой формы (с возможностью вложенности). В дополнение к перечисленному для более краткой записи программ существует еще несколько конструкций, в частности, цикл for, который по очереди подставляет объекты заданного типа в порядке, указанном в таблице. Все эти операторы вписываются в тело методов объектов, и это самое длинное, что ученик должен ввести с клавиатуры. Минимальный текст с простейшим интуитивно понятным синтаксисом, полное отсутствие строк с описаниями, свойственными профессиональным языкам (например, в Java это декларации import, void, static, public и т. п.) - таковы существенные преимущества предлагаемого учебного ПО.

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

В частности, в библиотеке имеется небольшая первичная иерархия типов объектов. Все объекты, в конечном счете, происходят от верхнего родительского типа, который называется AbsObject (абстрактный объект). Его потомками являются MainObject (главный объект) с предопределенным объектом World (виртуальный мир) и VisObject (визуальный объект), который описывает покоящийся объект с визуальным образом. Потомок последнего класса - MovObject

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

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

m

Свойства | Методы | Типы объектов j Инспектор типа |

Свойство Тип объекта Комментарий Тип св-ва Нач. зн. Мин. Макс.

height VisObject Y size of object integer 32 4 470

xsize MainObject x size of the window integer 500 50 640

ysize MainObject у size of the window integer 300 50 480

xpos MainObject x position of window integer 200 0 640

ypos MainObject у position of window integer 200 0 480

timer MainObject main counter integer 0 0 32760

maxvalue digit max. digit value integer 10 0 10

carry digit carry to next digit integer 0 0 1 -j

3

Изменить Добавить 7 Помощь 7 Свойство 7 Стандарт |

Строим мир: создаем объекты и задаем их свойства

m

Объекты Инспектор объекта | Текущие знач. ] Начальные знач. |

Е

СВОЙСТВО Значение

name sec_lo _1

parent digit

image 1

left 120

top 25

width 32

height 32

sec 1о

Тип объекта: digit

Комметарнн: [seconds: low digit

Ш Рисунок

Фикс, измен. Д! Восст.

Помощь

Рис. 3. Все данные об объектах отображаются в виде таблиц

Как построить виртуальный мир

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

1. Сконструировать мир: определить типы объектов, а также входящие в них свойства и методы. Если стандартного шаблона оказывается недостаточно, можно добавить в систему новые типы, свойства или методы. Желательно подготовить все перечисленное выше сразу, хотя SB и позволяет внести исправления в любой момент.

2. Построить мир: используя все то, что было подготовлено на предыдущем шаге, создать объекты и задать значения их свойств. На этом шаге ученики уже видят, как выглядят объекты и где они находятся; движения пока нет.

3. Наблюдать, что было построено. Наконец, мы можем увидеть эволюцию мира во времени. Если ошибок не было, остается только насладиться реализацией своих идей. Если же что-то не так - надо искать ошибки. В SB для этого кроме автоматического предусмотрены специальные отладочные режимы: по шагам (система выполняет один шаг по времени и останавливается) и по отдельным операторам внутри шага.

Примеры проектов

Рассмотрим в качестве примера, как реализовать в SB простой проект Timer (отображающий минуты и секунды).

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

1. Нарисовать в графическом редакторе (или подобрать готовые рисунки) десять картинок с изображением цифр, назвать их 'piel' - 'pic10' и поместить в папку проекта.

2. Запустить SB и создать новый проект (рис. 4).

Рис. 4. Любой проект начинается со стандартной «заготовки»

3. Создать новый тип (назвав его, например, digit, т. е. цифра) от стандартного класса VisObject и добавить к нему свойство max_value (см. также пункт 6). Подчеркнем, что у цифр таймера нет специального свойства для хранения числового значения - для этого достаточно номера картинки.

4. Добавить свойство carry (перенос) к стандартному объекту World. Когда какая-либо цифра превосходит значение max_value, она сбрасывается в ноль; в этом случае carry = 1, иначе carry = 0. (Здесь мы видим простейший вариант обмена данными между объектами).

5. Найти в стандартном типе MainObject метод _main и дописать в него текст согласно листингу 1.

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

7. Создать 4 объекта (4 цифры таймера) типа digit с именами sec_lo, sec_hi, min_lo и min_hi. Постфиксы _lo и _hi позволяют различать старшую и младшую цифры в минутах и секундах. Для обеих старших цифр свойство max_value надо установить равным 5, а для младших - 9. Все приготовления завершены, мир построен

8. Запустить проект и наблюдать, как тикает таймер (рис. 5, 6). Если обнаружены ошибки, то исправить их.

Method _main

World.timer=World.timer+1

World.carry=1

for OL1: sec lo..min hi

if World.carry=1

OL1._inc

endif

Endfor

Method _inc

if ,image<=.max value

.image=.image+1

World.carry=0

else

.image=1

World.carry=1

Endif

Рис. 5. Листинг 1. Методы для проекта Timer

Рис. 6. Работающий проект Timer; в фоновом окне видны параметры нового класса digit

Короткая запись цикла for в методе main не обязательна: вместо нее можно написать более длинный, но более простой по структуре вариант из четырех идентичных фрагментов - отдельно для каждой цифры.

Пропущенное имя объекта в методе inc эквивалентно конструкции this в Java. Добавим, что мы рассмотрели один из простейших проектов с неподвижными объектами. Но SB позволяет создавать гораздо более сложные, в том числе динамические и интерактивные проекты. Целый ряд таких демонстрационных проектов встроен непосредственно в ПО. На рис. 7 часть из них объединена в виде коллажа.

Рис. 7. Примеры проектов, реализованных в SB

Как работает система

SB устроен следующим образом. Значения всех свойств для всех объектов проекта хранятся в виде матрицы. Например, программная строка World.timer=World.timer+1 имеет внутреннее представление 1.12=1.12+#1, что обеспечивает прибавление константы 1 к свойству 12 объекта 1 (нумерация соответствует расположению в системных таблицах свойств и объектов).

В соответствии со значениями, хранящимися в матрице, визуальная машина рисует в своем окне созданный нами виртуальный мир (рис. 8). Чтобы картинка изменилась, необходимо вызвать какой-нибудь метод, который присвоит новые значения свойствам матрицы, что, в свою очередь, изменит вид экрана для «оживления» мира ББ имеет системный таймер (его частоту пользователь может настраивать по своему усмотрению). На каждый «тик» таймера автоматически вызывается стандартный метод _тат. Он выполняет помещенную в него программу: операторы изменения свойств и вызов указанных методов, которые также способны менять свойства матрицы. После завершения выполнения главного метода визуальная машина перерисовывает экран в соответствии с текущими значениями свойств.

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

Рис. 8. Функциональная схема SB

Заключение

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

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

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

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

1. Еремин Е.А. Об иерархическом представлении знаний с помощью некоторых программных средств // Информатика и образование. - 2009. - № 6. - C. 37-47; № 7. - C. 25-36.

2. Еремин Е.А. Программное обеспечение для изучения объектного подхода в курсе информатики // IX Международная конференция «Информационные технологии в образовании»: сб. тр. - 1999. - Ч. 2. - C. 41-43.

3. Звенигородский Г.А. Первые уроки программирования. - М.: Наука, 1985. - (Сер. «Библиотечка "Явант"»; вып. 41).

4. Звенигородский Г. А., Глаголева Н. Г., Земцов П. А., Налимов Е. В., Цикоза В. А. Программная система «Школьница» и ее реализация на персональных ЭВМ // Микропроцессорные средства и системы. - 1984. - № 1. - C. 50-55.

5. Кушниренко А. Г., Лебедев Г. В. 12 лекций о том, для чего нужен школьный курс информатики и как его преподавать. - М.: Лаборатория Базовых Знаний, 2000.

6. Кушниренко А.Г., Лебедев Г.В., Сворень Р.А. Основы информатики и вычислительной техники: проб. учеб. для сред. учеб. заведений. - М.: Просвещение, 1990.

7. Роботландия [Электронный ресурс]. - URL: http://www.botik.ru/~robot/ (дата обращения: 23.12.2016).

8. Суворова Н.И. Информационное моделирование. Величины, объекты, алгоритмы. -М.: Лаборатория Базовых Знаний, 2002.

9. Bennedsen J. Teaching and Learning Introductory Programming - A Model-Based Approach (PhD thesis). - Oslo: Oslo University, 2008.

10. Bergin J. Fourteen Pedagogical Patterns [Электронный ресурс]. - URL: http://csis.pace.edu/~bergin/PedPatL3.html (дата обращения: 23.12.2016).

11. Bergin J., Roberts J., Pattis R., StehlikM. Karel++: A Gentle Introduction to the Art of Object-Oriented Programming. - New York: John Wiley & Sons, 1996.

12. Bruner J.S. The Process of education. - Cambridge: Harvard University Press, 1960.

13. Brusilovsky P., Calabrese E., Hvorecky J., Kouchnirenko A., Miller P. Mini-languages: A Way to Learn Programming Principles // Educ. and Inform. Tech. - 1997. - Vol. 2, № 1. - P. 65-83.

14. Daly T., Wrigley E. Learning Java through Alice 3. - 2nd ed. - Charleston: CreateSpace Independent Publishing Platform, 2014.

15. Ehlert A., Schulte C. Empirical comparison of objects-first and objects-later // 5th International Workshop on Computing Education Research (ICER '09). - 2009. - P. 15-26.

16. Eremin E. Software system to learn objects // 5th Annual SIGCSE/SIGCUE ITiCSE Conference on Innovation and Technology in Computer Science Education (ITiCSE '00). - 2000. - P. 188.

17. Holland S., Griffiths R. Woodman M. Avoiding Object Misconceptions // 28th SIGCSE Technical Symposium on Computer Science Education (SIGCSE '97). - 1997. - P. 131-134.

18. Hubwieser P. Analysis of Learning Objectives in Object Oriented Programming // Informatics Education - Supporting Computational Thinking. ISSEP 2008. LNCS, v. 5090. - 2008. -P. 142-150.

19. KollingM. Introduction to Programming with Greenfoot Object-Oriented Programming in Java with Games and Simulations. - 2nd ed. - Boston: Pearson, 2016.

20. Kolling M., Rosenberg J. An Object-Oriented Program Development Environment for the First Programming Course // 27th SIGCSE Technical Symposium on Computer Science Education (SIGCSE '96). - 1996. - P. 83-87.

21. Kolling M., Rosenberg J. BlueJ - The Hitchhiker's Guide to Object Orientation. Maersk Mc-Kinney Moller Institute for Production Technology, Univ. Southern Denmark, Tech. Report № 2. -2002.

22. Lister R., Berglund A., Clear T., Bergin J., Garvin-Doxas K., Hanks B., Hitchner L., Luxton-Reilly A., SandersK., Schulte C., Whalley J.L. Research perspectives on the objects-early debate // Working Group Reports on ITiCSE on Innovation and Technology in Computer Science Education (ITiCSE-WGR '06). - 2006. - P. 146-165.

23. Mannila L., de Raadt M. An Objective Comparison of Languages for Teaching Introductory Programming // 6th Baltic Sea Conference on Computing Education Research: Koli Calling 2006 (Baltic Sea '06). - 2006. - P. 32-37.

24. Meyer B. Towards an Object-Oriented Curriculum // 11th International Conference on Technology of Object-Oriented Languages and Systems (TOOLS '93). - 1993. - P. 585--594.

25. Pears A., Seidman S., Malmi L., Mannila L., Adams E., Bennedsen J., Devlin M., Paterson J. A Survey of Literature on the Teaching of Introductory Programming // Working Group Reports on ITiCSE on Innovation and Technology in Computer Science Education (ITiCSE-WGR '07). - 2007. -P. 204-223.

26. Pecinovsky R. OOP - Learn Object Oriented Thinking and Programming. - Repín-Zivonm: Eva & Tomás Bruckner Publishing, 2013.

27. Proulx V.K., Raab J., Rasala R Objects from the Beginning - with GUIs // 7th Annual Conference on Innovation and Technology in Computer Science Education (ITiCSE '02). - 2002. -P. 65-69.

28. Ragonis N., Ben-Ari M. On Understanding the Statics and Dynamics of Object-Oriented Programs // 36th SIGCSE Technical Symposium on Computer Science Education (SIGCSE '05). -2005. - P. 226-230.

29. Ramalingam V., Wiedenbeck S. An Empirical Study of Novice Program Comprehension in the Imperative and Object-Oriented Styles // 7th Workshop on Empirical Studies of Programmers (ESP '97). - 1997. - P. 124-139.

30. Robins A., Rountree J., Rountree N. Learning and Teaching Programming: A Review and Discussion // Comput. Sci. Educ. - 2003. - V. 13. - № 2. - P. 137-172.

31. Sanders K., Boustedt J., Eckerdal A., McCartney R, Mostrom J.E., Thomas L., Zander C. Student Understanding of Object-Oriented Programming as Expressed in Concept Maps // 39th SIGCSE Technical Symposium on Computer Science Education (SIGCSE '08). - 2008. - P. 332-336.

32. Tait B. Object Orientation in Educational Software // Innovat. in Educ. and Train. Int. -1997. - V. 34 - № 3. - P. 167-173.

33. Tomek I. Microworlds for Teaching Concepts of Object Oriented Programming // J. of Univ. Comput. Sci. - 1995. - V. 6. - № 1. - P. 423--434.

34. Uysal M.P. The Effects of Objects-First and Objects-Late Methods on Achievements of OOP Learners // J. of Soft. Eng. and Applic. - 2012. - V. 5. - № 10. - P. 816-822.

35. Xinogalos S. Object-Oriented Design and Programming: An Investigation of Novices' Conceptions on Objects and Classes // Trans. Comput. Educ. - 2015. - V. 15, № 3. - Artic. 13. - 21 p.

36. Xinogalos S., Satratzemi M., Dagdilelis V. An Introduction to Object-Oriented Programming with a Didactic Microworld: ObjectKarel // Comput. Educ. - 2006. - V. 47, № 2. - P. 148-171.

37. Zhu H., Zhou M. Methodology First and Language Second: A Way to Teach Object-Oriented Programming // 18th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA '03). - 2003. - P. 140-147.