WikiDer > Цель – действие

Target–action

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

Преимущества

Подход «цель – действие» к системам, управляемым событиями, обеспечивает гораздо больший динамизм по сравнению с другими, более статичными подходами, такими как подклассы. Это связано с тем, что создание подклассов является относительно жестким способом программирования: программист должен изложить внутреннюю логику взаимосвязи программы во время разработки, и это не может быть изменено позже, если программа не будет остановлена, перепроектирована и перестроена. С другой стороны, программирование на основе целевых действий может полностью изменить их при время выполнения, что позволяет программе самостоятельно создавать новые взаимоотношения и новое поведение.

Ярким примером этого подхода является OpenStep API, что отчасти благодаря динамическому Цель-C язык, большая часть графического пользовательского интерфейса реализована с использованием парадигмы целевого действия. Рассмотрим следующий пример, написанный на Objective-C:

[button setTarget: self]; [button setAction: @selector (doSomething)];

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

[setTarget кнопки: self]; [действие кнопки setAction: NSSelectorFromString ([textField stringValue])];

Здесь сообщение, которое должно быть отправлено, определяется путем консультации с текстовое полестроковое значение (строка текста, которую пользователь ввел в текстовое поле). Эта строка впоследствии преобразуется в сообщение (с использованием NSSelectorFromString функция) и передается кнопке как ее действие. Это возможно, потому что в Objective-C методы представлены селектор, простая строка, описывающая вызываемый метод. Когда сообщение отправлено, селектор отправляется в среду выполнения ObjC, сопоставляется со списком доступных методов, и вызывается реализация метода. Реализация метода рассматривается во время выполнения, а не во время компиляции.

Недостатки

Из-за чрезвычайного динамизма и свободы поведения, предоставляемого программам, разработанным с использованием парадигмы целевого действия, может случиться так, что разработчик программы неправильно реализует часть логики взаимосвязи, и это может иногда приводить к трудностям для отслеживания ошибок. Это связано с отсутствием время компиляции контроль обеспечивается компилятор который не может видеть взаимосвязи. Таким образом, контроль согласованности межсоединений полностью оставлен на усмотрение программиста.

Результат неправильно подключенной привязки целевого действия может отличаться в зависимости от того, как конкретная система, в которой реализована программа, относится к этому:

  • он может игнорировать условие и ничего не выполнять (например, в примере с кнопкой выше - если цель кнопки не отвечает на сообщение о действии, нажатие кнопки просто ничего не делает)
  • он может рассматривать такое состояние как ошибка, и в этом случае это, скорее всего, приведет к крушение или вызвать время выполнения исключение

Смотрите также

внешняя ссылка