Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oop-VisualWorks.pdf
Скачиваний:
35
Добавлен:
13.02.2015
Размер:
1 Мб
Скачать
☆

102

Глава 6. Cистемный браузер

true, как для неизменяемых экземпляров классов SmallInteger, Character, Symbol. Похожие проблемы возникают с массивами и литеральными массивами, например, с изменяемым массивом Array new: 1 и неотличимым от него неизменяемым литеральным массивом #(nil).

6.10.Определение метода

Методы определяют поведение классов и их экземпляров. Именно здесь происходит реальное программирование на языке Смолток. Методы создаются при помощи браузера системы через изменение шаблона определения метода. Есть два вида методов: (1) методы класса и

(2) методы экземпляра. Методы класса определяют поведение класса, а методы экземпляра — поведение экземпляров класса. Методы класса наиболее часто используются для создания экземпляра класса и для инициализации и доступа к переменным класса.

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

Рис. 6.9: Определение метода в браузере системы.

Чтобы создать метод, следует

1)В браузере системы выбрать класс, в котором создаётся метод.

2)Над панелью категорий методов и переменных выбрать страницу

Instance или Class.

6.10. Определение метода

103

3)Выбрать существующую категорию (протокол) или добавить новую, выбирая команду New из всплывающего меню этой панели или команду меню Protocol → New системного браузера, и определяя имя новой категории. В текстовой панели отобразиться шаблон определения метода.

4)Изменить шаблон определения метода, определяя имя метода в первой строке определения. В двойных кавычках ". . . " следует написать комментарий, кратко описывающий, что метод делает и что возвращает. Если необходимо, указать в вертикальных скобках |. . . | имена временных переменных метода. Наконец, ввести последовательность смолтоковских выражений (тело метода), определяя выполняемые методом операции.

5)В меню операций текстовой панели выбрать команду Accept, чтобы откомпилировать и сохранить метод. Если текст метода не содержит синтаксических ошибок, он будет откомпилирован.

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

Undeclared temporary variables (Необъявленные временные переменные). Система выдаст запрос с меню типов переменных, благодаря которому можно быстро и легко объявить каждую из временных переменных.

Undeclared class and instance variables (Необъявленные переменные класса и экземпляра). Когда появиться запрос на объявление переменной класса или экземпляра, следует выбрать в меню команду Abort и объявить переменную прежде, чем продолжить работу над методом. Чтобы сохранить набранный, но ещё не откомпилированный метод и получить, используя браузер системы, возможность переопределить класс, следует выбрать в меню браузера команду Class → Spawn или выбрать команду Spawn из всплывающего меню панели классов браузера. Это приведет к открытию нового браузера на классе, где можно объявить переменные. Вместо команды Spawn можно воспользоваться уже рассмотренной ранее командой View → New View.

Missing period (Отсутствие точки). Когда пропущена точка, система воспринимает две инструкции, как единое выражение сообщения. Как результат, появляется описание ошибки "Nothing more expected" — "Нечто странное" .

104

Глава 6. Cистемный браузер

Missing delimiters (Отсутствие разделителей). Когда пропускается скобка, появляется описание ошибки "Right parenthesis expected" , указывающие на потерю правой скобки, или "Period or right bracket expected" , указывающие на потерю точки или правой скобки.

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

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

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

6.11.Контрольные вопросы

1)Какие панели имеет системный браузер?

2)Что и как отображает панель пакетов, парселов и иерархии классов?

3)С какими символами и в каких случаях отображеются имена парселов в панели парселов?

4)Какие команды доступны в браузере для работы с парселами?

5)Какие предосторожности следует соблюдать, чтобы работа с созданными парселами проходила без осложнений?

6)Что и как отображает панель классов и пространств имён?

7)Как найти в среде нужную разделяемую переменную, в том числе класс или пространство имён?

8)Что и как отображает панели методов и переменных? Какие страницы имеют эти панели?

9)Как установить возможность видимости наследуемых методов и отказаться от такой возможности?

10)Как найти нужный метод?

11)Как открыть несколько активных панелей браузера?

6.11. Контрольные вопросы

105

12)Как cоздать новый пакет и удалить существующий?

13)Как cоздать и разместить новую связку пакетов, как удалить связку пакетов?

14)Как определить новое пространство имён?

15)Как определить в существующем пространстве имён новую разделяемую переменную?

16)Как определить новый класс через диалоговое окно?

17)Как определить новый класс через шаблон определения?

18)Какие типы классов существуют в VisualWorks и как, используя наследование, они могут располагаться в иерархии классов?

19)Из каких сообщений состоит протокол обращения к классу в связи с существованием в VisualWorks пространств имён?

20)Как определить новую переменную класса?

21)Какие объекты являются неизменяемыми? Каков протокол тестирования и управления неизменяемыми объектами?

22)Как определить новый протокол методов класса или экземпляра?

23)Как определить новый метод класса или экземпляра в уже существующем протоколе?

24)Какие синтаксические ошибки чаще всего созникают в процессе компиляции метода?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]