ЛогоМиры 2. 0. Виртуальные методы и полиморфизм создание объекта «Калькулятор»

современногс программиров

Кузнецова Ирина Николаевна

ЛОГОМИРЫ 2.0. ВИРТУАЛЬНЫЕ МЕТОДЫ И ПОЛИМОРФИЗМ

СОЗДАНИЕ ОБЪЕКТА «КАЛЬКУЛЯТОР»

ОБЪЕКТНАЯ МОДЕЛЬ СРЕДЫ ПРОГРАММИРОВАНИЯ

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

Для изучения объектов реального мира мы создаем его модель в среде программирования, описывая ее объекты на языке программирования. При активизации объекта (запуске программы - Конструктора) создается один экземпляр этого объекта. Если меняется описание (Кон-

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

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

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

1. Самым крупным начальным объектом является ПРОЕКТ (PROJECT). Это документ определенного сложного формата, который хранится в файле с расширением mw2. ПРОЕКТ обладает свойствами: ИМЯ, РАЗМЕР, ВНЕШНИЙ ВИД, АТРИБУТЫ. Для работы с объектом ПРОЕКТ доступны методы: создавать, редактировать, сохранять, переименовывать, удалять, загружать, устанавливать размер, устанавливать внешний вид.

2. Объект ПРОЕКТ порождает объект СТРАНИЦА (PAGE). В проекте может быть несколько экземпляров страниц. Объект СТРАНИЦА наследует от объекта ПРОЕКТ свойства РАЗМЕР, ВНЕШНИЙ ВИД, АТРИБУТЫ. Собственные свойства СТРАНИЦЫ - ИМЯ, ФОН. Объект СТРАНИЦА наследует от объекта ПРОЕКТ методы - загружать, удалять, переименовывать, копировать. Собственный метод - преобразование при загрузке. На примере объекта СТРАНИЦА мож-

но видеть как реализуется идея ПОЛИ-МОФИЗМа: унаследованные методы - загружать, удалять, переименовывать, копировать - имеют назначение и названия те же, что и для объекта ПРОЕКТ, а выполняются по-другому.

Объекты ПРОЕКТ и СТРАНИЦА создаются при загрузке системы Лого Миры. Пользователь может создавать на СТРАНИЦЕ следующие встроенные объекты: ОКНО ДЛЯ ВВОДА ОТВЕТА, ОКНО ДЛЯ ВЫВОДА СООБЩЕНИЙ, КНОПКА, ТЕКСТОВОЕ ОКНО, ГРАФИЧЕСКИЙ ИСПОЛНИТЕЛЬ, ЦВЕТ, СЛАЙДЕР, МЕДИА ОБЪЕКТЫ.

Свойства этих объектов и методы управления ими описываются в справочнике, поставляемом с системой. Их можно изучать самостоятельно. Мы рассматривали некоторые из них. Сегодня мы рассмотрим встроенные объекты ТЕКСТОВОЕ ОКНО и КНОПКА.

КАЛЬКУЛЯТОР

Создадим на Рабочем поле КАЛЬКУЛЯТОР.

Калькулятор представляет собой два поля и три КЛАВИШИ, расположенные на цветном прямоугольнике.

Одно поле (под названием ПРИМЕР) служит для ввода арифметического выражения вычисления, а в другое (под названием ОТВЕТ) должен выводиться результат вычисления.

Описание методов: КАЛЬКУЛЯТОР позволяет вычислить любое арифметическое выражение, записанное по правилам языка Logo и введенное в поле ПРИМЕР, результат вычисления отображается в поле

b-i-U

JL-.

ОТВЕТ. Событие, по которому выполняются методы, - щелчок мыши на клавише. К каждой клавише приписан один из методов - ВКЛЮЧИТЬ, ВЫКЛЮЧИТЬ, СБРОС.

В таблице 1 приведена информационная модель объекта КАЛЬКУЛЯТОР.

Объект КАЛЬКУЛЯТОР включает объекты - ПОЛЯ и объекты КЛАВИШИ. Объекты ПОЛЯ можно получить с помощью встроенных объектов ТЕКСТОВЫЕ ОКНА.

Для построения КЛАВИШ можно использовать два разных встроенных объекта - КНОПКА или ЧЕРЕПАШКА, но методы, назначенные этим объектам, не должны зависеть от способа оформления. В таких случаях объектам назначают виртуальные методы.

Опишем новый объект КЛАВИША с виртуальными методами - keyculc.

ОБЪЕКТ - клавиша (параметры -вид объекта, имя объекта, положение на РП, форма или размер, назначенное действие).

Первый параметр указывает вид объекта, который задается ключевым словом. Это может быть кнопка (ключевое слово - but) или черепашка (ключевое слово - turtle). Ключевые слова мы выбрали сами. Ключевое слово становится частью имени переменных, в которые будут записываться свойства КЛАВИШИ.

Следующие параметры описывают эти свойства: namek - имя, posk - положение на РП , formk - форма (номер

Название объекта Свойства

Фон - картинка Прямоугольник указанного цвета, указанного размера создать

ПОЛЕ ПРИМЕР Имя - ПРИМЕР, положение на Вводить арифметическое

РП - в левой части выражение, вычислять его,

прямоугольника, размер - [100 50] передавать в окно ОТВЕТ

ПОЛЕ ОТВЕТ Имя - ОТВЕТ, положение на РП Выводить результат

- в правой части прямоугольника, вычисления выражения

размер - [100 50],

КЛАВИША Имя - ON, положение - в нижней Включать окно ПРИМЕР

половине прямоугольника, для ввода и передачи

посередине, действие данных процедуре answ

ВКЛЮЧИТЬ,

Форма*) - кнопка или стрелка

вверх

КЛАВИША Имя - OFF, положение - в Отключать окно ПРИМЕР

нижней половине прямоугольника, как окно ввода

посередине, действие

ВЫКЛЮЧИТЬ,

Форма*) - кнопка или стрелка

вниз

КЛАВИША Имя - RESET, положение - в Стирать содержимое окон

нижней половине прямоугольника, ПРИМЕР и ОТВЕТ

посередине, действие СБРОС,

форма*) - кнопка или красный

шарик

Примечание *) вид клавиш и другие элементы оформления можно заменить по желанию.

Таблица 1

формы для черепашки или размер кнопки), actk - метод, который будет выполняться при щелчке мыши.

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

Процедура keyculc также создает поле, в которое будет записано имя метода, назначенного этой клавише. Это имя будет известно при выполнении процедуры, то есть при создании конкретного экземпляра объекта КЛАВИША.

Процедура keyculc обращается к методу - КОНСТРУКТОР объекта КЛАВИША. Имя этого КОНСТРУКТОРа зависит от вида КЛАВИШИ. Процедура, реализующая метод, будет известна при создании конкретного экземпляра этого объекта.

Методы, которые объявляются при описании объекта, но при создании экземпляра реализуются процедурами, зависящими от вида объекта, называются виртуальными.

to keyculc :object :namek :posk :formk :actk /свойства объекта

make (word " :object ".namek) :namek make (word " :object ".posk) :posk make (word " : object ".formk) :formk ;назначение виртуального метода при ,• щелчке мыши

make (word " :object ".actk) :actk /виртуальный метод - конструктор

init :object end

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

;Виртуальная Инициализация объекта

to init :obj

run word "init. :obj

end

Таким образом, процедура keyculc создает определенный набор переменных, имена которых зависят от имени объекта. Значения в эти переменные будут записываться при создании конкретного экземпляра выбранного объекта. Процедура keyculc обращается к КОНСТРУКТОРу, имя которого будет известно при создании конкретного экземпляра объекта.

Для каждого вида объекта необходимо описать собственные, так называемые приватные, методы.

Таким образом, реализуется идея ПОЛИМОРФИЗМА в ООП.

Описание приватных методов.

Конструкторы. /конструктор клавиши на основе /встроенного объекта КНОПКА to init.but

newbutton :but.namek :but.posk

example

включить

выключить

сброс

Рисунок 1

:but.actk

set :but.namek "size :but.formk end

;конструктор клавиши на основе

/встроенного объекта Черепашка

to init.turtle

newturtle :turtle.namek st

pu setpos :turtle.posk

setsh :turtle.formk

set :turtle.namek "rule list "launch

: actk

end

Теперь создадим такой КОНСТРУКТОР для объекта КАЛЬКУЛЯТОР, который будет сам настраиваться на указанный вид КЛАВИШ. При обращении к нему нужно будет задавать параметры: тип клавиши (but или nurtle) и формы Эх клавиш (размер или номер формы).

to init.culc :type :formon :formoff :formres

fonculc 112 290 290 ; рамка фона newtext "example [-140 140] [190 50] ;окно ПРИМЕР

newtext "rezult [60 140] [80 50] ;окно ОТВЕТ

keyculc :type "on [-60 0] :formon [включить]; метод для включения keyculc :type "off [-60 -40] :formoff [выключить]; метод для выключения keyculc : type "res [-60 -80] :formres [сброс] ; метод для ;стирания содержимого окон end

Не будем забывать про удаление созданных объектов. Независимо от вида КЛАВИШ имена объектов, составляющих КАЛЬКУЛЯТОР, постоянны. Поэтому ДЕСТРУКТОР должен удалять эти объекты и созданные переменные и стирать фоновую картинку.

Деструктор. to dest.culc remove "example remove "rezult remove "on remove "off

remove "res cg

clearnames end

Ниже описаны остальные методы КАЛЬКУЛЯТОРа, не зависящие от вида КЛАВИШ.

Графический фон для калькулятора. to fonculc :c :h :w newturtle "w pu setx -145 sety -145 pd setc :c

repeat 2[fd :h rt 90 fd :w rt 90] rt 45 pu fd :h / 4 pd fill bk :h / 4 lt 45 remove "w end

Методы для работы КАЛЬКУЛЯТОРА.

Метод включить обеспечивает ввод данных из окна example и передачу этих данных на обработку процедуре answ. Таким образом, назначается так называемый поток ввода для обработки нашим КАЛЬКУЛЯТОРом.

to включить

onreadline "example "answ end

Процедура answ выводит в окно rezult результат вычисления выражения, полученного от метода включить.

to answ equv

rezult, print run :equv

end

Метод сброс обеспечивает стирание данных в окнах example и rezult.

to сброс example, ct rezult , ct end

Метод выключить отключает поток ввода данны1Х из окна example.

to выключить onreadline "example " end

Примеры построения КАЛЬКУЛЯТОРов разных типов:

1) На основе Черепашки

init.culc "turtle 9 2 13

2) На основе кнопок

init.culc "but [120 25] [120 25] [120 25]

Необходимы пояснения для работы с таким КАЛЬКУЛЯТОРом. Наш объект выполняет описанные методы при возникновении определенных событий. Встроенными событиями являются - ЩЕЛЧОК МЫШИ и НАЖАТИЕ КЛАВИШИ ВВОД НА КЛАВИАТУРЕ. Во всех компьютерных средах имеются эти события. При щелчке мыши на КЛАВИШЕ включить становится активным окно example (подкрашивается синим цветом имя окна). Щелкните мышью в этом окне и набирайте выражение для вычисления, соблюдая правила Logo. После НАЖАТИЯ КЛАВИШИ ВВОД НА КЛАВИАТУРЕ rezult появится результат вычисления.

Постройте Калькулятор на своем компьютере и выполните следующие задания:

1. Число N кратно 6? а) N=242, б) N=342,

в) N=10010010,

г) N=2 в степени 100,

д) N=10 в степени 30, умноженное на 30 в степени 10.

2. Проверьте - при любом натуральном n число А делится на 6:

а) A=(n-1)n(n+1),

б) A=n(n+1)(2n+1),

в) A=n(nA2+5),

г) A=nA4-2n

ПУБЛИКАЦИЯ НА WEB САЙТЕ

Построенный нами объект может использоваться на уроках в младших и старших классах для выполнения вычислений. Вы можете этот объект внедрить в HTML-документ и опубликовать его в сети (локальной - в своей школе или глобальной, например, на сайте Школы Жар-птица).

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

Создадим новый проект CULC и, используя команду newprojectsize, зададим ему размеры 300х300 пикселей:

newprojectsize [300 300]

Далее скопируем на лист процедур все составленные выше программы для построения КАЛЬКУЛЯТОРа.

Составим программу для автоматического запуска одного из видов КОНСТРУКТОРа, например такую:

to startup presantationmode

init.culc "but [120 25]

[120 25]

end

[120 25]

Включим наш проект как объект типа MW2 в HTML документ следующим образом:

<HTML> <HEAD>

<META NAME="keywords" CONTENT="MW Web Player">

<TITLE>culc</TITLE></HEAD> <BODY>

<table width="100%" border="1"> <tr>

<td width=320 heigh t=320Xembed src="culc.mw2" type="application/x-mw2-plugin" pluginspage="http:// www.lcsi.ca/webplayer" width=300 height=300>

</embed></td> <td valign="top"> <h4 align="center">Kaлькyлятop MWPro </h4>

<p><font size="3">Для включения щелкните на кнопку ВКЛЮЧИТЬ </ font></p>

<p><font size^'3'^Вводите в окне EXAMPLE выражение по правилам Logo. Ответ отображается в окне REZULT.</ font></p>

<p><font size="3">Для выключения щелкните на кнопку ВЫКЛЮЧИТЬ </ font></p>

<p><font size="3">Для очистки окон щелкните на кнопку СБРОС </font></p> </td> </tr> </table> </BODY> </HTML>

Заметим, что настоящий проект готовился в среде MicroWorlds Pro. Калькулятор будет работать и в среде Лого Миры,

но с небольшим изменением. Это изменение касается команды onreadline и описано в пояснениях к словам Logo.

ПОЯСНЕНИЯ К СЛОВАМ LOGO

get <имя объекта> <свойство> — датчик для получения значения указанного свойства для указанного встроенного объекта. Встроенными объектами являются - Черепашка, кнопка, бегунок, текстовое окно, цвет, мелодия, созданная в музыкальном редакторе, музыкальные, звуковые и видео фрагменты. Для каждого такого объекта есть набор свойств, которые можно измерять. Например, вы визуально построили кнопку и хотели бы измерить ее размер. Чтобы узнать размер кнопки OFF в командный центр, введите команду: show get "off "size word <слово1> <слово2> - датчик для склеивания двух (или более) частей в одно слово. Для склеивания более чем двух частей применять в виде: (word <слово1> <слово2> ... <слoвoN> ) onreadline <имя текстового окна> <имя процедуры> - делает указанное текстовое окно окном ввода. Эта команда работает только в версии MWPro. В системе Лого Миры для методов включить и выключить можно написать следующие процедуры:

to включить

example, sol select eol copy

answ clipboard

end

to выключить example, ct end

Литература.

1. Фаронов В.В. TurboPascal 7.0. Начальный курс. Учебное пособие. Издание 7-е переработанное. Москва. Из-во «Нолидж», 2000 г.

2. Документация на системы Лого Миры 2.04 и MicroWorld Pro.

Кузнецова Ирина Николаевна, учитель высшей категории, директор НОУ ДО «Папертовский центр», Санкт-Петербург.

© Наши авторы, 2001. Our authors, 2001