- •Предисловие
- •Структура классического Смолтока
- •Основные определения и термины
- •Метаклассы
- •Посылка сообщений
- •Определение объектов
- •Типы сообщений и их приоритеты
- •Блоки
- •Переменные
- •Методы и примитивные методы
- •Соглашения о форматировании кода
- •Контрольные вопросы
- •Прогулка по VisualWorks
- •Настройка среды
- •Разработка простого приложения
- •Сохранение созданного кода
- •Создание автономного приложения
- •Выход из среды
- •Контрольные вопросы
- •Пространства имён
- •Особенности введения пространств имён
- •Пространство имён и его содержимое
- •Ссылка на объекты и импорт
- •Особенности импорта
- •Разделяемые переменные VisualWorks 7.4.1
- •Пакеты и парселы
- •Пакеты и связки пакетов
- •Парселы
- •Контрольные вопросы
- •Основные инструменты
- •Рабочее окно
- •Администратор парселов
- •Браузер файлов
- •Контрольные вопросы
- •Cистемный браузер
- •Панели системного браузера
- •Управление пакетами
- •Управление связками пакетов
- •Управление парселами
- •Определение пространства имён
- •Определение класса
- •Определение переменной класса
- •Определение переменных в пространстве имён
- •Работа с экземплярами
- •Определение метода
- •Контрольные вопросы
- •Отладка кода
- •Oкно уведомлений
- •Oкно отладки кода
- •Программные зонды
- •Работа с зондами через браузер
- •Зонды на уровне класса
- •Установка временных зондов в отладчике
- •Исключения и их обработка
- •Классы исключений
- •Обработка исключений
- •Оповещение о возникновении исключения
- •Среда исключений процесса
- •Явный выход из обработчика
- •Преобразование исключений
- •Развертывание защиты
- •Поставка приложения
- •Выбор стратегии поставки
- •Подготовка к поставке приложения
- •Создание поставляемого образа
- •Контрольные вопросы
- •Литература
- •Список иллюстраций
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)Какие синтаксические ошибки чаще всего созникают в процессе компиляции метода?
