10.8 Выводы

Предыдущая  Содержание  Следующая V*D*V

Объект указывает на его описание класса, а описание класса указывает на все динамически компонуемые методы для этого объекта. Поэтому объект можно спросить, ответит ли он на определённый метод. respondsTo() является статически компонуемым методом для Object. Он получает объект и строковый тэг в качестве аргумента поиска и возвращает соответствующий селектор, если тэг соответствует методу данного объекта.

Тэги могут быть определены в ooc как метки на прототипах динамически компонуемых методов в файле определения класса и как метки на заголовке метода в файле реализации; у последних есть приоритет. По умолчанию в качестве тэга используется название метода. Пустые тэги не могут быть найдены. Для реализации respondsTo() метод передаётся конструктору метакласса как тройной набор селектор / тег / метод.

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

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

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

 

Предыдущая  Содержание  Следующая