Что мы подразумеваем под Объектом «отправка сообщений» и как протоколы помогают объекту рекламировать сообщения, которые он поддерживает? - PullRequest
0 голосов
/ 29 июля 2010

Что мы подразумеваем под Объектом «отправка сообщений» и как протоколы помогают объекту рекламировать сообщения, которые он поддерживает? У кого-нибудь есть пример?

Ответы [ 2 ]

5 голосов
/ 29 июля 2010

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

В рамках этой концепции вместо того, чтобы сказать «x вызывает метод foo для y», что очень программистично, мы говорим об объектах как о взаимодействии друг с другом.Мы могли бы сказать «x отправляет foo сообщение y», или, более конкретно, «текстовое поле x сообщает y, что его textFieldDidChange:» или «x спрашивает y, что его framistanCalibrationLevel», или любое подобное утверждение, котороеможет так же легко говорить о людях, как о воображаемых объектах.

(Причина терминологии «сообщения» не совсем концептуальная: она взята из Smalltalk, одного из родительских языков Objective-C. Это историческая причина.)

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

При фактическом использовании Touch Cocoa и Cocoa, протоколы обычно описывают набор функций (опять же, не в смысле программирования), которые объект может предоставлять другому объекту, например источнику данных.реагирование на сообщения, с помощью которых представление может получать данные, или набор уведомлений, на которые может ответить объект, например, applicationDidFinishLaunching:, applicationWillTerminate: делегата приложения и т. д.

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

0 голосов
/ 29 июля 2010

Прочитайте раздел Сообщения в Apple Objective-C Runtime Programming Guide .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...