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

редактировать

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

Содержание
  • 1 Преимущества
  • 2 Недостатки
  • 3 См. Также
  • 4 Внешние ссылки
Преимущества

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

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

[button setTarget: self]; [кнопка setAction: @selector (doSomething)];

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

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

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

Недостатки

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

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

  • она может игнорировать условие и ничего не выполнять (например, в кнопке пример выше - если цель кнопки не отвечает на сообщение о своем действии, нажатие кнопки просто ничего не делает)
  • он может рассматривать такое состояние как ошибку, в которой в случае, если это, скорее всего, вызовет сбой программы или вызовет исключение времени выполнения
См. также
  • OpenStep API
    • NeXTSTEP - операционная система от NeXT Software Inc. (сейчас Apple Inc. ), в значительной степени основанная на OpenStep API
    • GNUstep - бесплатная реализация OpenStep API
    • Cocoa - API, производный от NeXTSTEP, используемый в Mac OS X
  • Objective-C
Внешние ссылки
Последняя правка сделана 2021-06-09 10:13:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте