Стратегия
Также известен как: Strategy
Суть паттерна
Стратегия — это поведенческий паттерн проектирования, который определяет семейство схожих алгоритмов и помещает каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять прямо во время исполнения программы.
ПроблемаВы решили написать приложение-навигатор для путешественников. Оно должно показывать красивую и удобную карту, позволяющую с лёгкостью ориентироваться в незнакомом городе.
Одной из самых востребованных функций являлся поиск и прокладывание маршрутов. Пребывая в неизвестном ему городе, пользователь должен иметь возможность указать начальную точку и пункт назначения, а навигатор — проложит оптимальный путь.
Первая версия вашего навигатора могла прокладывать маршрут лишь по дорогам, поэтому отлично подходила для путешествий на автомобиле. Но, очевидно, не все ездят в отпуск на машине. Поэтому следующим шагом вы добавили в навигатор прокладывание пеших маршрутов.
Через некоторое время выяснилось, что некоторые люди предпочитают ездить по городу на общественном транспорте. Поэтому вы добавили и такую опцию прокладывания пути.
Но и это ещё не всё. В ближайшей перспективе вы хотели бы добавить прокладывание маршрутов по велодорожкам. А в отдалённом будущем — интересные маршруты посещения достопримечательностей.
Код навигатора становится слишком раздутым.
Если с популярностью навигатора не было никаких проблем, то техническая часть вызывала вопросы и периодическую головную боль. С каждым новым алгоритмом код основного класса навигатора увеличивался вдвое. В таком большом классе стало довольно трудно ориентироваться.
Любое изменение алгоритмов поиска, будь то исправление багов или добавление нового алгоритма, затрагивало основной класс. Это повышало риск сделать ошибку, случайно задев остальной работающий код.
Кроме того, осложнялась командная работа с другими программистами, которых вы наняли после успешного релиза навигатора.
Ваши изменения нередко затрагивали один и тот же код, создавая конфликты, которые требовали дополнительного времени на их разрешение. РешениеПаттерн Стратегия предлагает определить семейство схожих алгоритмов, которые часто изменяются или расширяются, и вынести их в собственные классы, называемые стратегиями.
Вместо того, чтобы изначальный класс сам выполнял тот или иной алгоритм, он будет играть роль контекста, ссылаясь на одну из стратегий и делегируя ей выполнение работы. Чтобы сменить алгоритм, вам будет достаточно подставить в контекст другой объект-стратегию.
Важно, чтобы все стратегии имели общий интерфейс. Используя этот интерфейс, контекст будет независимым от конкретных классов стратегий. С другой стороны, вы сможете изменять и добавлять новые виды алгоритмов, не трогая код контекста.
Стратегии построения пути.
В нашем примере каждый алгоритм поиска пути переедет в свой собственный класс. В этих классах будет определён лишь один метод, принимающий в параметрах координаты начала и конца пути, а возвращающий массив точек маршрута.
Хотя каждый класс будет прокладывать маршрут по-своему, для навигатора это не будет иметь никакого значения, так как его работа заключается только в отрисовке маршрута. Навигатору достаточно подать в стратегию данные о начале и конце маршрута, чтобы получить массив точек маршрута в оговорённом формате.
Класс навигатора будет иметь метод для установки стратегии, позволяя изменять стратегию поиска пути на лету. Такой метод пригодится клиентскому коду навигатора, например, переключателям типов маршрутов в пользовательском интерфейсе.
Аналогия из жизниРазличные стратегии попадания в аэропорт.
Вам нужно добраться до аэропорта. Можно доехать на автобусе, такси или велосипеде. Здесь вид транспорта является стратегией. Вы выбираете конкретную стратегию в зависимости от контекста — наличия денег или времени до отлёта.
СтруктураКонтекст хранит ссылку на объект конкретной стратегии, работая с ним через общий интерфейс стратегий.
Стратегия определяет интерфейс, общий для всех вариаций алгоритма. Контекст использует этот интерфейс для вызова алгоритма.
Для контекста неважно, какая именно вариация алгоритма будет выбрана, так как все они имеют одинаковый интерфейс.
Конкретные стратегии реализуют различные вариации алгоритма.
Во время выполнения программы контекст получает вызовы от клиента и делегирует их объекту конкретной стратегии.
Клиент должен создать объект конкретной стратегии и передать его в конструктор контекста. Кроме этого, клиент должен иметь возможность заменить стратегию на лету, используя сеттер. Благодаря этому, контекст не будет знать о том, какая именно стратегия сейчас выбрана.
В этом примере контекст использует Стратегию для выполнения той или иной арифметической операции.
// Общий интерфейс всех стратегий.
interface Strategy is
method execute(a, b)
// Каждая конкретная стратегия реализует общий интерфейс своим
// способом.
class ConcreteStrategyAdd implements Strategy is
method execute(a, b) is
return a + b
class ConcreteStrategySubtract implements Strategy is
method execute(a, b) is
return a - b
class ConcreteStrategyMultiply implements Strategy is
method execute(a, b) is
return a * b
// Контекст всегда работает со стратегиями через общий
// интерфейс. Он не знает, какая именно стратегия ему подана.
class Context is
private strategy: Strategy
method setStrategy(Strategy strategy) is
this.strategy = strategy
method executeStrategy(int a, int b) is
return strategy.execute(a, b)
// Конкретная стратегия выбирается на более высоком уровне,
// например, конфигуратором всего приложения. Готовый объект-
// стратегия подаётся в клиентский объект, а затем может быть
// заменён другой стратегией в любой момент на лету.
class ExampleApplication is
method main() is
// 1. Создать объект контекста.
// 2. Получить первое число (n1).
// 3. Получить второе число (n2).
// 4. Получить желаемую операцию.
// 5. Затем, выбрать стратегию:
if (action == addition) then
context.setStrategy(new ConcreteStrategyAdd())
if (action == subtraction) then
context.setStrategy(new ConcreteStrategySubtract())
if (action == multiplication) then
context.setStrategy(new ConcreteStrategyMultiply())
// 6. Выполнить операцию с помощью стратегии:
result = context.executeStrategy(n1, n2)
// 7. Вывести результат на экран.
Когда вам нужно использовать разные вариации какого-то алгоритма внутри одного объекта.
Стратегия позволяет варьировать поведение объекта во время выполнения программы, подставляя в него различные объекты-поведения (например, отличающиеся балансом скорости и потребления ресурсов).
Когда у вас есть множество похожих классов, отличающихся только некоторым поведением.
Стратегия позволяет вынести отличающееся поведение в отдельную иерархию классов, а затем свести первоначальные классы к одному, сделав поведение этого класса настраиваемым.
Когда вы не хотите обнажать детали реализации алгоритмов для других классов.
Стратегия позволяет изолировать код, данные и зависимости алгоритмов от других объектов, скрыв эти детали внутри классов-стратегий.
Когда различные вариации алгоритмов реализованы в виде развесистого условного оператора. Каждая ветка такого оператора представляет собой вариацию алгоритма.
Стратегия помещает каждую лапу такого оператора в отдельный класс-стратегию. Затем контекст получает определённый объект-стратегию от клиента и делегирует ему работу. Если вдруг понадобится сменить алгоритм, в контекст можно подать другую стратегию.
Шаги реализацииОпределите алгоритм, который подвержен частым изменениям. Также подойдёт алгоритм, имеющий несколько вариаций, которые выбираются во время выполнения программы.
Создайте интерфейс стратегий, описывающий этот алгоритм. Он должен быть общим для всех вариантов алгоритма.
Поместите вариации алгоритма в собственные классы, которые реализуют этот интерфейс.
В классе контекста создайте поле для хранения ссылки на текущий объект-стратегию, а также метод для её изменения. Убедитесь в том, что контекст работает с этим объектом только через общий интерфейс стратегий.
Клиенты контекста должны подавать в него соответствующий объект-стратегию, когда хотят, чтобы контекст вёл себя определённым образом.
- Горячая замена алгоритмов на лету.
- Изолирует код и данные алгоритмов от остальных классов.
- Уход от наследования к делегированию.
- Реализует принцип открытости/закрытости.
- Усложняет программу за счёт дополнительных классов.
- Клиент должен знать, в чём состоит разница между стратегиями, чтобы выбрать подходящую.
Мост, Стратегия и Состояние (а также слегка и Адаптер) имеют схожие структуры классов — все они построены на принципе «композиции», то есть делегирования работы другим объектам. Тем не менее, они отличаются тем, что решают разные проблемы. Помните, что паттерны — это не только рецепт построения кода определённым образом, но и описание проблем, которые привели к данному решению.
Команда и Стратегия похожи по духу, но отличаются масштабом и применением:
- Команду используют, чтобы превратить любые разнородные действия в объекты. Параметры операции превращаются в поля объекта. Этот объект теперь можно логировать, хранить в истории для отмены, передавать во внешние сервисы и так далее.
- С другой стороны, Стратегия описывает разные способы произвести одно и то же действие, позволяя взаимозаменять эти способы в каком-то объекте контекста.
Стратегия меняет поведение объекта «изнутри», а Декоратор изменяет его «снаружи».
Шаблонный метод использует наследование, чтобы расширять части алгоритма. Стратегия использует делегирование, чтобы изменять выполняемые алгоритмы на лету. Шаблонный метод работает на уровне классов. Стратегия позволяет менять логику отдельных объектов.
Состояние можно рассматривать как надстройку над Стратегией. Оба паттерна используют композицию, чтобы менять поведение основного объекта, делегируя работу вложенным объектам-помощникам. Однако в Стратегии эти объекты не знают друг о друге и никак не связаны. В Состоянии сами конкретные состояния могут переключать контекст.
Команда
Также известен как: Действие, Транзакция, Action, Command
Суть паттерна
Команда — это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
ПроблемаПредставьте, что вы работаете над программой текстового редактора. Дело как раз подошло к разработке панели управления. Вы создали класс красивых Кнопок
и хотите использовать его для всех кнопок приложения, начиная от панели управления, заканчивая простыми кнопками в диалогах.
Все кнопки приложения унаследованы от одного класса.
Все эти кнопки, хоть и выглядят схоже, но делают разные вещи. Поэтому возникает вопрос: куда поместить код обработчиков кликов по этим кнопкам? Самым простым решением было бы создать подклассы для каждой кнопки и переопределить в них метод действия под разные задачи.
Множество подклассов кнопок.
Но скоро стало понятно, что такой подход никуда не годится. Во-первых, получается очень много подклассов. Во-вторых, код кнопок, относящийся к графическому интерфейсу, начинает зависеть от классов бизнес-логики, которая довольно часто меняется.
Несколько классов дублируют одну и ту же функциональность.
Но самое обидное ещё впереди. Ведь некоторые операции, например, «сохранить», можно вызывать из нескольких мест: нажав кнопку на панели управления, вызвав контекстное меню или просто нажав клавиши Ctrl+S
. Когда в программе были только кнопки, код сохранения имелся только в подклассе SaveButton
. Но теперь его придётся продублировать ещё в два класса.
Хорошие программы обычно структурированы в виде слоёв. Самый распространённый пример — слои пользовательского интерфейса и бизнес-логики. Первый всего лишь рисует красивую картинку для пользователя. Но когда нужно сделать что-то важное, интерфейс «просит» слой бизнес-логики заняться этим.
В реальности это выглядит так: один из объектов интерфейса напрямую вызывает метод одного из объектов бизнес-логики, передавая в него какие-то параметры.
Прямой доступ из UI в бизнес-логику.
Паттерн Команда предлагает больше не отправлять такие вызовы напрямую. Вместо этого каждый вызов, отличающийся от других, следует завернуть в собственный класс с единственным методом, который и будет осуществлять вызов. Такие объекты называют командами.
К объекту интерфейса можно будет привязать объект команды, который знает, кому и в каком виде следует отправлять запросы. Когда объект интерфейса будет готов передать запрос, он вызовет метод команды, а та — позаботится обо всём остальном.
Доступ из UI в бизнес-логику через команду.
Классы команд можно объединить под общим интерфейсом c единственным методом запуска. После этого одни и те же отправители смогут работать с различными командами, не привязываясь к их классам. Даже больше: команды можно будет взаимозаменять на лету, изменяя итоговое поведение отправителей.
Параметры, с которыми должен быть вызван метод объекта получателя, можно загодя сохранить в полях объекта-команды. Благодаря этому, объекты, отправляющие запросы, могут не беспокоиться о том, чтобы собрать необходимые для получателя данные. Более того, они теперь вообще не знают, кто будет получателем запроса. Вся эта информация скрыта внутри команды.
Классы UI делегируют работу командам.
После применения Команды в нашем примере с текстовым редактором вам больше не потребуется создавать уйму подклассов кнопок под разные действия. Будет достаточно единственного класса с полем для хранения объекта команды.
Используя общий интерфейс команд, объекты кнопок будут ссылаться на объекты команд различных типов. При нажатии кнопки будут делегировать работу связанным командам, а команды — перенаправлять вызовы тем или иным объектам бизнес-логики.
Так же можно поступить и с контекстным меню, и с горячими клавишами. Они будут привязаны к тем же объектам команд, что и кнопки, избавляя классы от дублирования.
Таким образом, команды станут гибкой прослойкой между пользовательским интерфейсом и бизнес-логикой. И это лишь малая доля пользы, которую может принести паттерн Команда!
Аналогия из жизниПример заказа в ресторане.
Вы заходите в ресторан и садитесь у окна. К вам подходит вежливый официант и принимает заказ, записывая все пожелания в блокнот. Откланявшись, он уходит на кухню, где вырывает лист из блокнота и клеит на стену. Далее лист оказывается в руках повара, который читает содержание заказа и готовит заказанные блюда.
В этом примере вы являетесь отправителем, официант с блокнотом — командой, а повар — получателем. Как и в паттерне, вы не соприкасаетесь напрямую с поваром. Вместо этого вы отправляете заказ с официантом, который самостоятельно «настраивает» повара на работу. С другой стороны, повар не знает, кто конкретно послал ему заказ. Но это ему безразлично, так как вся необходимая информация есть в листе заказа.
СтруктураОтправитель хранит ссылку на объект команды и обращается к нему, когда нужно выполнить какое-то действие. Отправитель работает с командами только через их общий интерфейс. Он не знает, какую конкретно команду использует, так как получает готовый объект команды от клиента.
Команда описывает общий для всех конкретных команд интерфейс. Обычно здесь описан всего один метод для запуска команды.
Конкретные команды реализуют различные запросы, следуя общему интерфейсу команд. Обычно команда не делает всю работу самостоятельно, а лишь передаёт вызов получателю, которым является один из объектов бизнес-логики.
Параметры, с которыми команда обращается к получателю, следует хранить в виде полей. В большинстве случаев объекты команд можно сделать неизменяемыми, передавая в них все необходимые параметры только через конструктор.
Получатель содержит бизнес-логику программы. В этой роли может выступать практически любой объект. Обычно команды перенаправляют вызовы получателям. Но иногда, чтобы упростить программу, вы можете избавиться от получателей, «слив» их код в классы команд.
Клиент создаёт объекты конкретных команд, передавая в них все необходимые параметры, среди которых могут быть и ссылки на объекты получателей. После этого клиент связывает объекты отправителей с созданными командами.
В этом примере паттерн Команда служит для ведения истории выполненных операций, позволяя отменять их, если потребуется.
Пример реализации отмены в текстовом редакторе.
Команды, которые меняют состояние редактора (например, команда вставки текста из буфера обмена), сохраняют копию состояния редактора перед выполнением действия. Копии выполненных команд помещаются в историю команд, откуда они могут быть получены, если нужно будет сделать отмену операции.
Классы элементов интерфейса, истории команд и прочие не зависят от конкретных классов команд, так как работают с ними через общий интерфейс. Это позволяет добавлять в приложение новые команды, не изменяя существующий код.
// Абстрактная команда задаёт общий интерфейс для конкретных
// классов команд и содержит базовое поведение отмены операции.
abstract class Command is
protected field app: Application
protected field editor: Editor
protected field backup: text
constructor Command(app: Application, editor: Editor) is
this.app = app
this.editor = editor
// Сохраняем состояние редактора.
method saveBackup() is
backup = editor.text
// Восстанавливаем состояние редактора.
method undo() is
editor.text = backup
// Главный метод команды остаётся абстрактным, чтобы каждая
// конкретная команда определила его по-своему. Метод должен
// возвратить true или false в зависимости о того, изменила
// ли команда состояние редактора, а значит, нужно ли её
// сохранить в истории.
abstract method execute()
// Конкретные команды.
class CopyCommand extends Command is
// Команда копирования не записывается в историю, так как
// она не меняет состояние редактора.
method execute() is
app.clipboard = editor.getSelection()
return false
class CutCommand extends Command is
// Команды, меняющие состояние редактора, сохраняют
// состояние редактора перед своим действием и сигнализируют
// об изменении, возвращая true.
method execute() is
saveBackup()
app.clipboard = editor.getSelection()
editor.deleteSelection()
return true
class PasteCommand extends Command is
method execute() is
saveBackup()
editor.replaceSelection(app.clipboard)
return true
// Отмена — это тоже команда.
class UndoCommand extends Command is
method execute() is
app.undo()
return false
// Глобальная история команд — это стек.
class CommandHistory is
private field history: array of Command
// Последний зашедший...
method push(c: Command) is
// Добавить команду в конец массива-истории.
// ...выходит первым.
method pop():Command is
// Достать последнюю команду из массива-истории.
// Класс редактора содержит непосредственные операции над
// текстом. Он отыгрывает роль получателя — команды делегируют
// ему свои действия.
class Editor is
field text: string
method getSelection() is
// Вернуть выбранный текст.
method deleteSelection() is
// Удалить выбранный текст.
method replaceSelection(text) is
// Вставить текст из буфера обмена в текущей позиции.
// Класс приложения настраивает объекты для совместной работы.
// Он выступает в роли отправителя — создаёт команды, чтобы
// выполнить какие-то действия.
class Application is
field clipboard: string
field editors: array of Editors
field activeEditor: Editor
field history: CommandHistory
// Код, привязывающий команды к элементам интерфейса, может
// выглядеть примерно так.
method createUI() is
// ...
copy = function() {executeCommand(
new CopyCommand(this, activeEditor)) }
copyButton.setCommand(copy)
shortcuts.onKeyPress("Ctrl+C", copy)
cut = function() { executeCommand(
new CutCommand(this, activeEditor)) }
cutButton.setCommand(cut)
shortcuts.onKeyPress("Ctrl+X", cut)
paste = function() { executeCommand(
new PasteCommand(this, activeEditor)) }
pasteButton. setCommand(paste)
shortcuts.onKeyPress("Ctrl+V", paste)
undo = function() { executeCommand(
new UndoCommand(this, activeEditor)) }
undoButton.setCommand(undo)
shortcuts.onKeyPress("Ctrl+Z", undo)
// Запускаем команду и проверяем, надо ли добавить её в
// историю.
method executeCommand(command) is
if (command.execute())
history.push(command)
// Берём последнюю команду из истории и заставляем её все
// отменить. Мы не знаем конкретный тип команды, но это и не
// важно, так как каждая команда знает, как отменить своё
// действие.
method undo() is
command = history.pop()
if (command != null)
command.undo()
ПрименимостьКогда вы хотите параметризовать объекты выполняемым действием.
Команда превращает операции в объекты. А объекты можно передавать, хранить и взаимозаменять внутри других объектов.
Скажем, вы разрабатываете библиотеку графического меню и хотите, чтобы пользователи могли использовать меню в разных приложениях, не меняя каждый раз код ваших классов. Применив паттерн, пользователям не придётся изменять классы меню, вместо этого они будут конфигурировать объекты меню различными командами.
Когда вы хотите ставить операции в очередь, выполнять их по расписанию или передавать по сети.
Как и любые другие объекты, команды можно сериализовать, то есть превратить в строку, чтобы потом сохранить в файл или базу данных. Затем в любой удобный момент её можно достать обратно, снова превратить в объект команды и выполнить. Таким же образом команды можно передавать по сети, логировать или выполнять на удалённом сервере.
Когда вам нужна операция отмены.
Главная вещь, которая вам нужна, чтобы иметь возможность отмены операций, — это хранение истории. Среди многих способов, которыми можно это сделать, паттерн Команда является, пожалуй, самым популярным.
История команд выглядит как стек, в который попадают все выполненные объекты команд. Каждая команда перед выполнением операции сохраняет текущее состояние объекта, с которым она будет работать. После выполнения операции копия команды попадает в стек истории, все ещё неся в себе сохранённое состояние объекта. Если потребуется отмена, программа возьмёт последнюю команду из истории и возобновит сохранённое в ней состояние.
Этот способ имеет две особенности. Во-первых, точное состояние объектов не так-то просто сохранить, ведь часть его может быть приватным. Но с этим может помочь справиться паттерн Снимок.
Во-вторых, копии состояния могут занимать довольно много оперативной памяти. Поэтому иногда можно прибегнуть к альтернативной реализации, когда вместо восстановления старого состояния команда выполняет обратное действие. Недостаток этого способа в сложности (а иногда и невозможности) реализации обратного действия.
Шаги реализацииСоздайте общий интерфейс команд и определите в нём метод запуска.
Один за другим создайте классы конкретных команд. В каждом классе должно быть поле для хранения ссылки на один или несколько объектов-получателей, которым команда будет перенаправлять основную работу.
Кроме этого, команда должна иметь поля для хранения параметров, которые нужны при вызове методов получателя. Значения всех этих полей команда должна получать через конструктор.
И, наконец, реализуйте основной метод команды, вызывая в нём те или иные методы получателя.
Добавьте в классы отправителей поля для хранения команд. Обычно объекты-отправители принимают готовые объекты команд извне — через конструктор либо через сеттер поля команды.
Измените основной код отправителей так, чтобы они делегировали выполнение действия команде.
Порядок инициализации объектов должен выглядеть так:
- Создаём объекты получателей.
- Создаём объекты команд, связав их с получателями.
- Создаём объекты отправителей, связав их с командами.
- Убирает прямую зависимость между объектами, вызывающими операции, и объектами, которые их непосредственно выполняют.
- Позволяет реализовать простую отмену и повтор операций.
- Позволяет реализовать отложенный запуск операций.
- Позволяет собирать сложные команды из простых.
- Реализует принцип открытости/закрытости.
- Усложняет код программы из-за введения множества дополнительных классов.
Цепочка обязанностей, Команда, Посредник и Наблюдатель показывают различные способы работы отправителей запросов с их получателями:
- Цепочка обязанностей передаёт запрос последовательно через цепочку потенциальных получателей, ожидая, что какой-то из них обработает запрос.
- Команда устанавливает косвенную одностороннюю связь от отправителей к получателям.
- Посредник убирает прямую связь между отправителями и получателями, заставляя их общаться опосредованно, через себя.
- Наблюдатель передаёт запрос одновременно всем заинтересованным получателям, но позволяет им динамически подписываться или отписываться от таких оповещений.
Обработчики в Цепочке обязанностей могут быть выполнены в виде Команд. В этом случае множество разных операций может быть выполнено над одним и тем же контекстом, коим является запрос.
Но есть и другой подход, в котором сам запрос является Командой, посланной по цепочке объектов. В этом случае одна и та же операция может быть выполнена над множеством разных контекстов, представленных в виде цепочки.
Команду и Снимок можно использовать сообща для реализации отмены операций. В этом случае объекты команд будут отвечать за выполнение действия над объектом, а снимки будут хранить резервную копию состояния этого объекта, сделанную перед самым запуском команды.
Команда и Стратегия похожи по духу, но отличаются масштабом и применением:
- Команду используют, чтобы превратить любые разнородные действия в объекты. Параметры операции превращаются в поля объекта. Этот объект теперь можно логировать, хранить в истории для отмены, передавать во внешние сервисы и так далее.
- С другой стороны, Стратегия описывает разные способы произвести одно и то же действие, позволяя взаимозаменять эти способы в каком-то объекте контекста.
Если Команду нужно копировать перед вставкой в историю выполненных команд, вам может помочь Прототип.
Посетитель можно рассматривать как расширенный аналог Команды, который способен работать сразу с несколькими видами получателей.
ПОВЕДЕНЧЕСКИЕ ПАТТЕРНЫ. Словарь тактической реальности. Культурная интеллигенция и социальный контроль
ПОВЕДЕНЧЕСКИЕ ПАТТЕРНЫ
С тех пор, как по всему миру распространяется угроза международного терроризма, службы безопасности направляют повышенное внимание на невербальные способы коммуникации, что играет растущую роль в подготовке правительств, военных и правоохранительных органов. В целях обеспечения общественной безопасности требуется умение распознавать признаки нестандартного или подозрительного поведения и временные паттерны. Подготовка фокусируется на понимании движений, свидетельствующих о намерениях, сигналов, передаваемых через одежду и внешний вид, нестандартных паттернов взглядов, эмоциональных голосовых интонаций, и обманных трюков, также как и внешне незначительных свойств походки, выражений лица, и жестов. Энергетические карты движения показывают, какие области лица задействуются для выражения определенных эмоций. Анализируются многоспектральные цифровые фотографии, демонстрирующие сокращения лицевых мускулов при тех или иных эмоциях, на предмет выявления паттернов лицевой энергетики, использующихся для чтения эмоций, ощущений и настроений. Также, возможно отслеживание на расстоянии биоэлектрических полей субъекта — с помощью оборудования, предназначенного для считывания частотных графиков вызванных потенциалов мозга.
Новейшие системы наблюдения используют программное обеспечение, способное отличать нормальное поведение от подозрительного. Классифицируя такие свойства человеческого поведения, как быстрота, направление, форма и паттерн, компьютер отличает людей, ходящих, разговаривающих, действующих нормальным образом, от людей ненормального поведения, например, при драке или резком падении. Программное обеспечение, работающее с нейронными сетями, фиксирует и запоминает паттерны для создания новых программ, отличающих нормальное от ненормального, следуя той же формуле. Всеобщее усреднение социально-поведенческих паттернов, достигаемое посредством исчерпывающей автоматической классификации «нормальности» — в интересах не только широкомасштабных психологических операций и технологий политического контроля, но также и глобального массового маркетинга продуктов потребления.
ПОСЛЕДОВАТЕЛЬНЫЕ ИЛЛЮЗИИ
Иллюзии помогают понять, как работает восприятие, показывая, когда и как оно ошибается. Коль скоро галлюцинации определяются как ложное восприятие, то, в отсутствие стимуляции, вызванной наркотиками или другими видами воздействия, иллюзии — это ложные интерпретации последовательно испытанных стимулов. Еще в античные времена обсуждалась т.н. «иллюзия горизонта», при которой луна на горизонте представляется больше, чем в зените, и до сих пор она остается предметом изучения. Иллюзии обнажают сложность зрительного восприятия, но не существует удовлетворительной теории, которая объясняла бы многие из них, или хотя бы то, почему они могут возникать. Тем не менее, они могут быть документированы и классифицированы; они также имеют определенные практические применения. Иллюзии не более и не менее иллюзорны, чем все остальное, но в техническом смысле является иллюзией то, что если вы возьмете объект в физическом измерении и сравните его с вашей психологической оценкой, между ними будет несоответствие. Есть несколько типов зрительных иллюзий, которые являются характерными свойствами зрения, и дают возможность понять лежащие в их основании процессы. Долгий перечень оптических иллюзий демонстрирует некоторые из этих механизмов. Многие из них имеют дело с пространственными эффектами и/или эффектами дальнего/ближнего зрения, происходящими из ошибочной оценки, или неверного сопоставления расстояний или объектов. Иллюзии также связаны с контрастами яркости или неясностью. Картина, написанная на плоской поверхности, является преднамеренной попыткой создать пространственную иллюзию для зрения; привычка различать в картине глубину и перспективу — приобретенная, а не врожденная. Это очень эффективно, так как глаз, в своей обыкновенной деятельности, вынужден проделывать то же самое (сетчатка воспринимает плоскость, а не пространство). Адаптация, при которой восприятие освещения стремится к белому цвету, и постоянство цвета, при котором под разным освещением цвета воспринимаются сходным образом, — не являются иллюзиями, но фундаментальными и полезными свойствами цветового зрения.
От ощущений, то есть принятия стимуляции из окружения, к первоначальной кодировке в нервной системе, и до восприятия, — во всех этих процессах, посредством которых мы интерпретируем сообщения, поступающие от органов чувств, проявляется человеческая склонность конструировать значащее восприятие из фрагментов сенсорной информации и группировать объекты в высокоорганизованные целые структуры, а не разрозненные части. Это объединение отдельных черт в перцептивные единства основывается на правилах близости, сходства, продолжительности, завершения и неизбежного общего направления. Познавательные иллюзии, или иллюзии знания, аналогичны оптическим иллюзиям, с их систематическим несовпадением между оценочным суждением и выверенным суждением. Ключевые слова: институциональная экономика; культура; социальные
< ценности; поведенческие паттерны; индуктивное мышление.
со _
х
CULTURE, BEHAVIORAL PATTERNS AND INDUCTIVE
qj REASONING
55 VYACHESLAV V. VOLCHIK,
<
Department «Economic Theory», Southern Federal University, Rostov-on-Don, e-mail: [email protected]
en z
LL
о <
en
ZD —
2 © Вольчик В. В., 2016
Studies in culture are becoming more and more popular among economists. In this paper, culture is mainly considered in the framework of Original (Old) Institutional Economics. Basically, actors comprehend culture through behavioral patterns that are available to them. Social values correlate behaviors within and among various behavioral patterns in
different cultural contexts. That is why culture is regarded as a bunch of social values, institutions and behavioral patterns associated with specific historical features of social evolution. The identification of behavioral patterns implies analyzing historical facts, actors’ discourses and narratives. That enables us to reflect on how well we understand manifold social values and specific cultural features. We may face difficulties comparing behavioral patterns embedded in different cultures.
(2) Понимание, что ценности являются связующими элементами поведения актора в о
рамках поведенческих паттернов. Термин «поведенческий паттерн» может <
рассматриваться как два «поведения», согласующиеся через ценности. Такое о:
со ■н о см
00
s о
понимание поведенческого паттерна в явном виде отражает социальную значимость ценностей. Ценности функционируют как стандарты оценки, которые делают поведение согласующимся. Ценности не только согласуют поведение внутри поведенческого паттерна, но также согласуют между собой поведенческие паттерны. Взаимозависимости среди поведенческих паттернов могут проявляться как зависимость одного «поведения» в рамках одного поведенческого паттерна с другим «поведением» в другом поведенческом паттерне через определенные ценности. В сущности, взаимосвязи между поведенческими паттернами совершенствуются через поведенческие паттерны» (Bush, 1987. Р. 1077-1078).
Рис. 1. Культура, социальные ценности и поведенческие паттерны
CD Ш
О <
ф <
о о s X -Û X
-Û
<
CD
О X
s
<
CD X Œ
ф Ш
СЯ <
О I— 3 t I—
ш
Ll_
О
_J <
СП 3
о
Культуру можно рассматривать как социальные ценности и институты, согласующие поведенческие паттерны, в контексте, обусловленном специфическими историческими особенностями эволюции общества (рис. 1). Культура предстает сложно организованной структурой, состоящих из социальных ценностей, институтов, рутин, технологий, которые в свою очередь связаны с еще большим множеством поведенческих паттернов. Индивиды следуют поведенческим паттернам, изменяют их, а также паттерны, как и институты посредством нисходящей причинной связи (Hodgson, 2003) влияют на познавательные возможности индивидов и их предпочтения. Например, долгое время такие поведенческие паттерны упорядочивались и согласовывались ценностями религии, которая больше всего влияла на развитие культуры. В динамическом аспекте культура рассматривается как совокупность поведенческих паттернов, которые формируются эволюционно и усваиваются (принимаются) акторами в процессе социализации. Наборы (совокупности) поведенческих паттернов могут варьироваться в рамках одной культуры или использоваться акторами избирательно в ходе адаптации к экзогенным вызовам или шокам и эндогенным инкрементным изменениям.
Восприятие культуры и поведенческих паттернов: трудности
перевода
Какое значение имеет для экономистов изучение культуры? Ответ на этот вопрос зависит от нашего понимания культуры и институтов и их влияния на экономическое развитие. Также важным представляется вопрос: чем могут быть полезны исследования культуры в плане понимания фундаментальных экономических явлений? В данной статье мы предлагаем теоретическую рамку для исследования культуры через идентификацию и описание поведенческих паттернов в историческом и национальном контекстах эволюции хозяйственных порядков.
Культуру индивиды воспринимают через призму поведенческих паттернов. Поведенческие паттерны многообразны, и восприятие их акторами во многом субъективно. Построение всеобъемлющей и полной классификации таких образцов поведения представляется невыполнимой и, возможно, ненужной задачей. Эмпирические исследования поведенческих паттернов в контексте культуры
g должны учитывать сложности, возникающие при кросскультурном сравнении F фундаментальных социальных ценностей и институтов. Возникающая проблема t может быть охарактеризована как «трудности перевода» ценностей и институтов
I—
со одной культуры для релевантного понимания в рамках другой.
— Поведенческие паттерны, как и социальные ценности, нельзя рассматривать
о вне культурного и языкового контекстов. Более того, само восприятие индивидами
< ценностей, институтов, привычек и устойчивых поведенческих шаблонов происходит
сс через специфический для данного общества, организации или социальной группы
00
дискурс. Поэтому любая классификация и сравнение ценностей связаны с «трудностями перевода». Однако это не значит, что такие сравнения невозможны. Наряду с компаративистскими исследованиями ценностей необходимо проводить качественные исследования дискурсов, нарративов для лучшего понимания правил, интенций, стимулов и контекстов, которые воспринимаются индивидами как релевантные в тех или иных временных, пространственных и культурных рамках.
Например, в рамках европейской и китайской культур существует разное понимание концепта «эффективности». Вместо характерного для европейской традиции понимания эффективности как построения идеальной формы (образца действия) и затем проецирования на реальные вещи, в китайском понимании чтобы достигнуть желаемого эффекта, следует рассчитывать скорее на развитие событий, чем на свой собственный инструментарий. опыт осмысливается ими с использованием индуктивного мышления (Arthur, 1994). о Он формирует поведенческие паттерны, которые используются для определенного < структурирования социальной реальности. Для обеспечения регулярности о;
х
пз ш
о <
структурированных социальных взаимодействий необходимо существование встроенных эволюционных механизмов, «регулирующих» частоту возникновения релевантных и нерелевантных моделей поведения и, следовательно, локальных правил, этических (нравственных) норм и институтов (Вольчик, 2014). Культура и социальные ценности выступают инструментом, согласовывающим такую взаимоадаптацию и обеспечивающим устойчивость социального порядка.
Исследование культуры и поведенческих паттернов в рамках хозяйственных порядков может быть основано на концепте индуктивного мышления. Использование индуктивного мышления в адаптивно-сложных системах не дает гарантии нахождения единственно верных равновесных стратегий поведения, но позволяет идентифицировать реально используемые акторами поведенческие паттерны в их разнообразии и исторической и культурной ускоренности. Опыт, знания культурных контекстов и индуктивное мышление, которые позволяют акторам принимать решения в адаптивно-сложных системах, также могут быть полезны экономистам в теоретических и эмпирических исследованиях эволюции хозяйственных порядков.
СПИСОК ЛИТЕРАТУРЫ
со Бергер П. и Лукман Т. (1995). Социальное конструирование реальности. М.:
о Медиум.
™ Бёгельсдейк Ш. и Маселанд Р. (2016). Культура в экономической науке:
история, методологические рассуждения и области практического применения в современности. Расков Д. Е. (2012). Экономические институты старообрядчества. СПб.: Изд-
о во С.-Петерб. ун-та.
со ■н о см
о с
00
Тамбовцев В. Л. (2014). Экономическая теория неформальных институтов. M.: РГ-Пресс.
Этциони А. (2002). Социоэкономика: дальнейшие шаги // Экономическая социология, Т. 3, № 1.
Acemoglu D. and Robinson J. (2012). Why nations fail: The origins of power, prosperity, and poverty. Crown Business.
Akerlof G. A. and Snower D. J. (2016). Bread and bullets // Journal of Economic Behavior & Organization, no. 126, pp. 58-71.
Alesina A. and Giuliano P. (2015). Culture and institutions // Journal of Economic Literature, vol. 53, no. 4, pp. 898-944. doi:10.1257/jel.53.4.898.
Arthur W. B. (1994). Inductive reasoning and bounded rationality // The American economic review, vol. 84, no. 1, pp. 406-411.
Blim M. (2005). Culture and Economy. A Handbook of Economic Anthropology. doi:10.4337/9781845423469.00033.
Bowles S. (2016). The Moral Economy. Why Good Incentives Are No Substitute for Good Citizens. New Heaven; London: Yale University Press.
Brette O., Buhler T., Lazaric N. and Marechal K. (2014). Reconsidering the nature and effects of habits in urban transportation behavior // Journal of Institutional Economics, vol. 10, no. 3, pp. 399-426. doi: 10.1017/S1744137414000149.
Мoscow, New Literary Review Publ. (In Russian). o
Acemoglu D. and Robinson J. (2012). Why nations fail: The origins of power, <
prosperity, and poverty. Crown Business. cc
38
BOAbHMK B. B.
Akerlof G. A. and Snower D. J. (2016). Bread and bullets. Journal of Economic Behavior & Organization, no. 126, pp. 58-71.
Alesina A. and Giuliano P. (2015). Culture and institutions. Journal of Economic Literature, vol. 53, no. 4, pp. 898-944. doi:10.1257/jel.53.4.898.
Arthur W. B. (1994). Inductive reasoning and bounded rationality. The American economic review, vol. 84, no. 1, pp. 406-411.
Berger P. L. and Luckmann T. (1995). The Social Construction of Reality. A Treatise on sociology of Knowledge. Moscow, Medium Publ. (In Russian).
Beugelsdijk S. and Maseland R. (2016). Culture in Economics: History, Methodological Reflections, and Contemporary Applications. St. Petersburg, Publ. House of the Gaidar Institute. (In Russian).
Blim M. (2005). Culture and Economy. A Handbook of Economic Anthropology. doi:10.4337/9781845423469.00033.
Bowles S. (2016). The Moral Economy. Why Good Incentives Are No Substitute for Good Citizens. New Heaven; London, Yale University Press.
Brette O., Buhler T, Lazaric N. and Marechal K. (2014). Reconsidering the nature and effects of habits in urban transportation behavior. Don, March Publ. (In Russian).
g North D. (1997). Institutions, Institutional Change and Economic Performance.
F Moscow, «Fund Economic Book Beginnings». (In Russian).
t North D. (2010). Understanding the Process of Economic Change. Moscow, Publ.
co House of the Higher School of Economics (State University). (In Russian). — Oleinik A. (2012). Institutional Transfers in the Russian System of Higher
o Education: A Case Study. Journal of Economic Issues, vol. 46, no. 4, pp. 881-908. doi: < 10.2753/JEI0021-3624460403.
cc Raskov D. E. (2012). The Economic Institutions of the Old Believers. St.
o Petersburg: Publishing House St. Petersburg. University. (In Russian).
Simon H. A. (1993). Altruism and Economics (in The Economics of Altruism). The American Economic Review. Papers and Proceedings of the Hundred and Fifth Annual Meeting of the American Economic Association. (May, 1993), vol. 83, no. 2, pp. 156-161.
Stiglitz J. (2015). The great divide. Penguin UK.
Tambovtsev V. L. (2014). Economic Theory of Informal Institutions. Moscow, RG-Press. (In Russian).
Volchik V. V. (2008). Postindustrial Economy Institutions Evolution in Context of Veblen’s Dichotomy. TERRA ECONOMICUS, vol. 6, no. 2, pp. 53-65. (In Russian).
Volchik V. V. (2014). Inductive Reasoning and Economic Behavior. Journal of Institutional Studies, vol. 6, no. 3, pp. 6-13. (In Russian).
Volchik V. V. and Berezhnoy I. V. (2012). Selection and Exaptation of Institutions: the Role of Groups and Special Interests / Evolutionary and Institutional Economics discussion, Methods and Applications. St. Petersburg, pp. 165-187. (In Russian).
Volchik V. V. and Posukhova O. Yu. (2016). Precarity and Professional Identity in the Context of Institutional Change. TERRA ECONOMICUS, vol. 14, no. 2, pp. 159173. (In Russian).
Yefimov V. M. (2011a). Discourse Analysis of the Economy: Review of the Methodology and the History of Economic Science (Part 1). Journal of Economic Sociology, vol. 12, no. 3, pp. 15-53. (In Russian).
Yefimov V. M. (2011b). Discourse Analysis of the Economy: Review of the Methodology and the History of Economic Science (Part 2). Journal of Economic Regulation, vol. 2, no. 3, pp. 5-79. (In Russian).
CO ■H
о см
о с
00
о >
x
te ш
о <
(D <
О
о
X -О х
-О
<
пз х О
< пз
>у
Ш Ш
ш <
о
I— 3 Ь; I—
ш
LL
о <
СП 3
о
Коррекционная работа с поведенческими паттернами Текст научной статьи по специальности «Психологические науки»
УДК 159. 9.019.43 Е. А. Малько
E. A. Malko
Научный руководитель: д-р филос. наук Г. В. Горнова Research supervisor: Doctor of Philosophical Science G. V. Gornova
КОРРЕКЦИОННАЯ РАБОТА CORRECTIONAL WORK
С ПОВЕДЕНЧЕСКИМИ ПАТТЕРНАМИ WITH BEHAVIORAL PATTERNS
В статье рассматривается феномен «поведенческий паттерн», определяется его структура, выявляются его основные компоненты и возможности коррекционной работы. Основная цель — изучить природу паттернов и определить их взаимосвязь с поведением индивида.
Ключевые слова: паттерн, поведение, коррекция паттернов.
This article is devoted to the phenomenon of behavioral pattern. Its structure and main components are considered. Some options of working with patterns are given. The main purpose is to explore the origin of patterns and to establish the link between them and the person’s behavior.
Keywords: pattern, behavior, correction of the patterns.
При работе с людьми, участвовавшими в военных действиях, ключевым моментом выступает работа с поведенческими паттернами. Термин «паттерн» (от английского pattern — «шаблон», «модель», «система», «структура» [1, с. 120]) применяется в различных научных дисциплинах и сферах деятельности. Бихевиоральные теории и теории научения утверждают, что страхи и тревоги приобретаются путем формирования условных рефлексов, т. е. паттернов. Согласно учению Скиннера, опыт складывается в процессе научения, результатом которого является приобретение специфического для каждого человека набора поведенческих реакций. Поведенческие и эмоциональные проблемы понимаются как закрепленные в результате поощрения и подкрепления дезадап-тивных реакций на средовые раздражители.
Рассмотрим структуру поведенческого паттерна:
1. Восприятие реальности, которая не устраивает.
2. Формирование программы поведения (на основе врожденных инстинктов, приобретенного опыта и случайных догадок).
3. Реализация программы поведения — собственно действие.
4. Сопоставление полученного результата с результатом желаемым.
5. В случае, если результат желаемый с полученным совпал — прекращение действия.
6. В случае, если результат желаемый с полученным не совпал — формирование новой или повторение сформированной до этого программы поведения [1, с. 122].
Традиционно в структуре поведенческого паттерна выделяют следующие основные компоненты:
1) когнитивный — осознание страха;
2) физиологический — учащенное сердцебиение, головокружение, паническое состояние и т. д.;
3) поведенческий — побуждения убежать или напасть [1, с. 125].
При рассмотрении любой области человеческого поведения, где применяются шаблоны, можно говорить о паттернах. Например, гипнотический паттерн — это
текст, который использует гипнолог, чтобы ввести человека в транс. Словесные паттерны — это речевые приемы, которые мы сознательно или бессознательно применяем в речи. Паттерны мышления — мыслительные шаблоны, в частности обобщения.
Индивидам свойственна стереотипизация поведения, выработка определенных способов взаимодействия с окружающим миром. Это объясняется принципом рациональности: вместо того чтобы каждый раз изобретать новые способы реагирования на различные явления, человек воспроизводит готовую модель. Поведенческие паттерны формируются в процессе обучения, воспитания, а также наблюдения за окружающими.
Зная о том, как индивид вел себя в определенных ситуациях, какие у него имеются паттерны поведения, можно спрогнозировать его действия и поступки в схожих ситуациях. Для этого необходимо изучить личность комплексно, учитывая весь жизненный опыт.
Паттерны характеризуются устойчивостью и поэтому трудно поддаются изменению. Для корректировки поведения Э. Эриксон использует особые формы вмешательства, базируясь на нескольких предпосылках. В их число входят: 1) наблюдение, согласно которому любое изменение повлечет за собой новые формы взаимодействия и опыта, поскольку формы человеческого поведения носят паттерновый характер; 2) наблюдение, согласно которому паттерны поведения быстро закрепляются благодаря соответствующим цепям средовой обратной связи, порождаемой этими новыми формами поведения; 3) представление о том, что, для того чтобы достичь глубоких и долгосрочных изменений, не обязательно изучать онтогенез проблемы; 4) наличие соответствия между моделью мира и поведением конкретного человека, так что изменение индивидуального поведения оказывает непосредственное влияние на его опыт и обобщения [2, с. 22].
Таким образом, если изменить поведенческие паттерны человека, его опыт также станет более позитивным, и тогда он будет использовать данную форму поведения достаточно долго для того, чтобы сформировались вне-
122
Гуманитарные исследования • 2015 • № 1 (5)
шние и внутренние реакции, необходимые для постоянного закрепления новой формы поведения.
В общем виде базовая схема поведенческого вмешательства имеет следующий вид:
1. Идентифицировать для себя результат, которого должен достичь индивид с точки зрения того, какие формы поведения или взаимодействий ему необходимо реализовать в проблемном контексте.
2. Идентифицировать для себя ситуацию, к которой естественным образом приходит любой человек, вовлеченный в данное поведение или взаимодействие.
3. Установить специфический контакт, включающий определенную меру доверия и взаимопонимания с человеком или группой людей [2, с. 23].
Таким образом, паттерн имеет сложную структуру и тяжело поддается видоизменению, что особенно важно учитывать при необходимости коррекции негативных состояний. При работе со страхами и тревогами надо учитывать весь жизненный опыт человека, его физическое состояние.
Первым шагом в разработке методов коррекции поведенческих паттернов послужило экспериментальные исследования Д. Вальпо [3, с. 233]. Он проводил опыты над лабораторными животными и изучал возникновение и развитие невротической тревожности. Результаты работы позволили Д. Вальпо сделать вывод о том, что необходимо воздействовать на условные реакции, т. е. обеспечить угасание, основанное на механизме контробусловливания. Этот метод получил название систематическая десенсибилизация.
Д. Вальпо выдвинул гипотезу о том, что невротическое поведение человека определяется тревогой. Действия, которые происходят в воображении, равны действиям, совершаемым человеком в реальной жизни. Воображение в состоянии релаксации не является исключением из этого положения. Страх, тревога поддаются подавлению, при объединении во времени стимулов, вызывающих страх, и стимулов, противоположных ему. Произойдет контробусловливание: не вызывающий страх стимул подавит прежний рефлекс. У животных таким контробусловливанием выступает процесс кормления. У человека — релаксация. Поэтому, если обучить индивида глубокой релаксации и в этом состоянии спроектировать в воображении стимулы, вызывающие приступы тревоги, начнет действовать процесс десенсибилизации пациента к реальным стимулам или ситуациям, вызывающим страх. Процедура работы с тревогой выглядит таким образом: у человека, находящегося в состоянии глубо-
кой релаксации, вызываются стрессовые воспоминания, включающие страх, далее путем глубокого погружения в состояние релаксации индивид снимает тревожные приступы. Воображение проигрывает ситуации от самых легких до трудных, вызывающих наибольший страх. Процедура заканчивается, когда самый сильный стимул перестает вызывать страх.
Одним из вариантов работы с паттернами выступает проговаривание проблемы вслух, диалог между консультантом и индивидом, нуждающимся в помощи. В беседе основными средствами коррекции выступают вопросы по существу задачи и ответы на них, выполняющие функцию планирования способа ее решения; самоинструктирование с целью управления исполнением; реплики, ободряющие самого себя и направленные на преодоление фрустрации, неопределенности и тревожности; оценочные высказывания, выполняющие функцию самоподкрепления [3, с. 195]. Таким образом, человек корректирует свое поведение, учится формулировать проблему, анализировать ее, делать выводы, планировать и прогнозировать дальнейшие действия и давать оценку собственным мыслям, чувствам и поступкам.
Знание специфики поведенческих паттернов и способов коррекционной работы с ними может быть полезно при оказании консультативной помощи участникам вооруженных конфликтов. При работе с людьми, участвовавшими в боевых действиях, следует основной акцент сделать на анализ паттернов, которые были приобретены во время боевых действий. Это поможет выбрать необходимый метод коррекции и снизить уровень тревожности человека в реальной жизни. Главной задачей в данном случае является увеличение общей способности к разрешению проблемных ситуаций за счет развития умений специфицировать задачу, выдвигать и анализировать альтернативные варианты ее решения.
1. Жмуров В. А. Большая энциклопедия по психиатрии. 2-е изд. М.: Джан-гар, 2012. 169 с.
2. Гордон Д., Майерс-Андерсон М. Феникс. Терапевтические паттерны Милтона Эриксона. М.: Прайм-Еврознак, 2004. 187 с.
3. Паттерсон С., Уоткинс Э. Теории психотерапии. СПб.: Питер, 2003. 544 с.
© Малько Е. А., 2015
Гуманитарные исследования • 2015 • № 1 (5)
123
Паттерны (шаблоны) поведения. Виды паттернов поведения
Паттерны » Паттерны поведения
Паттерны поведения рассматривают вопросы о связях между объектами и распределением обязанностей между ними. Для этого могут использоваться механизмы, основанные как на наследовании, так и на композиции.
Кратко рассмотрим особенности паттернов (шаблонов) поведения.
Паттерн Chain of Responsibility позволяет обработать запрос нескольким объектам-получателям. Получатели связываются в цепочку, и запрос передается по цепочке, пока не будет обработан каким-то объектом. Паттерн Chain of Responsibility позволяет также избежать жесткой зависимости между отправителем запроса и его получателями.
Паттерн Command преобразовывает запрос на выполнение действия в отдельный объект-команду. Это придает системе гибкость: позволяет осуществлять динамическую замену команд, использовать сложные составные команды, осуществлять отмену операций.
Паттерн Iterator предоставляет механизм обхода элементов составных объектов (коллекций) не раскрывая их внутреннего представления.
Паттерн Interpreter предназначен для решения повторяющихся задач, которые можно описать некоторым языком. Для этого паттерн Interpreter описывает решаемую задачу в виде предложений этого языка, а затем интерпретирует их.
Паттерн Mediator инкапсулирует взаимодействие совокупности объектов в отдельный объект-посредник. Уменьшает степень связанности взаимодействующих объектов — им не нужно хранить ссылки друг на друга.
Паттерн Memento получает и сохраняет за пределами объекта его внутреннее состояние так, чтобы позже можно было восстановить объект в таком же состоянии.
Паттерн Observer определяет зависимость «один-ко-многим» между объектами так, что при изменении состояния одного объекта все зависящие от него объекты уведомляются и обновляются автоматически.
Паттерн State позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Создается впечатление, что объект изменил свой класс. Паттерн State является объектно-ориентированной реализацией конечного автомата.
Если поведение системы настраивается согласно одному из некоторого множества алгоритму, то применение паттерна Strategy переносит семейство алгоритмов в отдельную иерархию классов, что позволяет заменять один алгоритм другим в ходе выполнения программы. Кроме того, такую систему проще расширять и поддерживать.
Паттерн Template Method определяет основу алгоритма и позволяет подклассам изменить некоторые шаги этого алгоритма без изменения его общей структуры.
Паттерн Visitor определяет операцию, выполняемую на каждом элементе из некоторой структуры без изменения классов этих объектов.
Поведенческие паттерны, что такое паттерны поведения в психологии – MC Rewa
Курс возводит слушателя от написания простых конкретных классов к профессиональному конструированию приложения в объектно-ориентированной парадигме. Паттерны проектирования позволяют шагнуть за пределы простого использования синтаксических конструкций языка. Вы научитесь писать красиво и элегантно, будете использовать проверенные временем концепции и создавать масштабируемые программы. Использование паттернов проектирования является признаком профессионализма программиста.
- Так что паттерны бывают разные, как на уровне простого поведения, так и более сложного.
- Нам бы стоило огромных денег нанимать для каждой роли отдельного актера, поэтому мы используем паттерн «приспособленец».
- Мы создадим все нужные нам костюмы, но для каждой массовки будем переодевать небольшую группу актеров в требуемые для этой сцены костюмы.
- Самым лучшим примером (который я смог найти в реальной жизни) для метафорического сравнения паттерна «приспособленец» является театральная постановка.
- В результате мы имеем возможность ценой малых ресурсов создавать видимость управления большим количеством казалось бы разных объектов.
Одинаковые ли шаблоны для всех языков программирования?
По мере взросления ребенок начинает анализировать паттерны и заимствует их уже не в таком явном виде, как раньше. Теперь он вырабатывает собственные привычки, опираясь на поведение людей, с которых берёт пример. Но даже во взрослом возрасте сохраняется склонность перенимать чужие шаблоны поведения. Определенные стереотипы восприятия и шаблоны поведения есть у каждого из нас. Они формируются на протяжении всей жизни и оказывают огромное влияние на наше поведение.
Во-вторых, паттерн представляет собой нечто целостное. Мы можем долго расписывать, какие действия мы предпринимаем, для того, чтобы стартовать автомобиль с места, а можем сказать — я тронулся с места. И для человека, хорошо освоившего управление автомобилем, это будет действительно целостный кусок поведения, о деталях которого он не задумывается – просто делает и все. Вы удивитесь, насколько обильна наша обычная жизнь паттернами! Огромная часть деятельности – это привычные, сложившиеся годами паттерны.
Что такое паттерн (в русле идей де Боно)
Разработчики заметили эти закономерности, и выделили те, что наиболее часто встречаются, в паттерны (шаблоны проектирования, шаблоны программирования). В паттернах предлагается в том числе наиболее оптимальные способы реализации той или иной задачи. Как понятно из названия, данный паттерн чаще всего roboforex типы счетов используется для расширения исходного объекта до требуемого вида. Например мы условно можем считать «декоратором» человека с кистью и красной краской. Таким образом, какой бы объект (или определенный тип объектов) мы не передали в руки «декоратору», на выходе мы будем получать красные объекты.
Если эти решения описать и систематизировать в каталоги, то они станут доступными менее опытным разработчикам, которые после изучения смогут использовать их как шаблоны или образцы для решения задач http://nika30.ru/?p=42132 подобного класса. Паттерны как раз описывают решения таких повторяющихся задач. В программировании, хотя каждая задача и каждая программа уникальна, у многих из них все же есть общие черты.
Из чего состоит паттерн?
Лишь верхушка айсберга – наше сознание, которое иногда вмешивается для выбора очередного паттерна в очень туманной и непонятной ситуации или формирования нового паттерна. Надо сказать, что мы применяем намного больше паттернов, чем думаем, – сознательно или бессознательно. В частности, ежедневно нам на выручку приходят словесные паттерны — это речевые приемы (готовые фразы, реакции на те или иные вопросы и высказывания и т.д.), которые мы используем в речи. Также мы активно прибегаем к паттернам мышления — мыслительным шаблонам, в частности обобщениям.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками C# шаблоны
Через каких лиц проходит цепь принятия решения, или же это происходит в одной голове, а остальные – хор поддержки. http://www.blablaaudiovisual.com/pamm-scheta-alьpari На кого и как влиять в первую очередь, а на кого во-вторую, если Вы хотите, чтобы приняли нужное Вам решение?
Шаг 2: составьте шаблон для повторения
Курс "Шаблоны проектирования".» src=»https://www.youtube.com/embed/gBRk8v4FJqY?feature=oembed» frameborder=»0″ allow=»accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture» allowfullscreen=»»/>
Например, в зависимости от сферы применения существуют такие паттерны как паттерны анализа, проектирования, тестирования, документирования, организации процесса разработки, планирования проектов и другие. При создании программных систем Форекс для начинающих с нуля перед разработчиками часто встает проблема выбора тех или иных проектных решений. Дело в том, что почти наверняка подобные задачи уже решались ранее и уже существуют хорошо продуманные элегантные решения, составленные экспертами.
лучших книг о шаблонах проектирования
Все это вопросы умения замечать и использовать паттерны, прерывать уже сложившиеся, но деструктивные и создавать новые, более эффективные. Именно поэтому анализ паттернов поможет вам понять, как вести себя с тем или иным человеком и как он будет действовать в различных Нужно ли предсказывать рынок ситуациях. Один из красноречивых примеров – модель поведения вечной жертвы. Это паттерны, которые создают объекты, или позволяют получить доступ к существующим. Порождающие паттерны – это те шаблоны, по которым можно создать автомобиль и сделать это лучшим образом.
Классические книги по паттернам проектирования описывают их реализацию на C++, C#, Java. У языка Python есть своя специфика из-за которой он отлично подходит для использования паттернов проектирования. Вышесказанное лишь подтверждает тот факт, что лучший найти что такое паттерны в гугл поиске способ привить ребенку правильные привычки – демонстрировать ему нужные модели поведения на собственном примере. Нередко люди в течение всей жизни сохраняют в неизменном виде поведенческие шаблоны, перенятые от собственных родителей в детстве.
Кто в вашем коллективе первым инициирует вечеринки? Кто чаще всего соглашается с директором на совещании, а кто первым начинает критику найти что такое паттерны в википедии новых предложений «снизу»? Кто на самом деле в совете директоров является лицом, принимающим решения – генеральный, или серый кардинал?
Самым лучшим примером (который я смог найти в реальной жизни) для метафорического сравнения паттерна «приспособленец» является театральная постановка. Нам бы стоило огромных денег нанимать для каждой роли отдельного актера, поэтому мы используем паттерн «приспособленец». Мы американская сессия время создадим все нужные нам костюмы, но для каждой массовки будем переодевать небольшую группу актеров в требуемые для этой сцены костюмы. В результате мы имеем возможность ценой малых ресурсов создавать видимость управления большим количеством казалось бы разных объектов.
Умение замечать поведенческие паттерны у окружающих также будет полезным, поскольку поможет лучше понимать других людей и легче добиваться от них нужных поступков и решений. В силу популярности каталога GoF часто под паттернами проектирования подразумевают все виды паттернов программной индустрии, что является не совсем корректным. В области разработки программных систем существует множество паттернов, которые отличаются областью применения, масштабом, содержимым, стилем описания.
Различия паттерна и принта
Большинство литературы посвященной паттернам в ООП (объектно-ориентированном программировании), как правило, объясняются на примерах с самим кодом. И это правильный подход, так как паттерны ООП уже по-умолчанию предназначаются для людей, которые знают что такое программирование и суть ООП. Однако порой требуется заинтересовать этой темой людей, которые в этом совершенно https://www.inmobiliarianovelda.com/2020/05/05/psihologija-trejdinga-kak-ne-slitь-svoj-depozit-na/ ничего не понимают, например «не-программистов» или же просто начинающих «компьютерщиков». Во-первых, зная, какой мы наблюдаем паттерн, мы можем по его куску восстановить все. Если мы в дырочку крыши увидели в небе после дождя оранжевый, желтый и зеленый цвета, то, подвигав головой из стороны в сторону, мы точно можем увидеть все соседние цвета радуги.
Зная, что такое паттерн и как он формируется, можно научиться эффективно программировать собственные привычки. Это позволит избавиться от негативных шаблонов поведения и заменить их позитивными.
Как работают поведенческие паттерны
Так что паттерны бывают разные, как на уровне простого поведения, так и более сложного. Паттерны найти что такое паттерны в ютюбе внутри каждого человека, которые оказывают влияние на формирование групповых паттернов.
Как распознать и изменить токсичные поведенческие паттерны
Паттерны обычно включают в себя повторяющиеся действия, задачу или поведение, которыми часто занимаются, часто даже не задумываясь. В большинстве случаев повседневное поведение происходит автоматически, это действие выполняется столько раз, что кажется комфортным и в нем нет никакого вреда. Или это поведение, которое мы не хотим менять из-за связанной с ним награды. Токсичные поведенческие паттерны также часто являются автоматическими, не обязательно представляют собой вредные по своей природе, и они с большей вероятностью сохранятся из-за соответствующего вознаграждения.
Некоторые модели вызывали проблемы в прошлом, в настоящее время способствуют возникновению проблем дома, на работе или где-либо еще, но их может быть трудно распознать и изменить. И необходимо уметь распознавать токсичные поведенческие паттерны, прежде чем решать, как их остановить и изменить.
Даже когда мы распознаем токсичное поведение, мы все равно не хотим меняться. Мы можем захотеть измениться, но по-прежнему опасаемся этого. Преодоление страха перед неизвестным может стать непреодолимым препятствием.Слышать от других, что перемены — это хорошо, и их следует принять, мало помогает уменьшить такой страх. Истина в том, что преодоление страха — это исключительно личный процесс.
Тем не менее, прислушиваясь к рекомендациям других о том, что сработало для них эффективно, может быть очень полезно для мотивации тех, кто сопротивляется переменам, к самосовершенствованию. В самом деле, иногда истинные изменения могут начаться только после того, как услышат такую поддержку.
Итак, распознавание токсичных поведенческих моделей — это первый шаг, который нужно сделать, прежде чем что-либо с ними делать.Распознав закономерности, легче принимать обоснованные решения о том, что делать в будущем.
Что представляет собой узор?
Как узнать, что какое-то личное действие является частью общей модели поведения? Это включает в себя отстраненность, отступление и наблюдение за поведением глазами других. Есть еще и непривязанность, которая приходит со временем. Когда с последнего поведенческого инцидента прошли месяцы или годы, легче увидеть, где и как такое поведение превратилось в токсичный паттерн.
Хотя отстранение сложно тренировать, есть более простые способы научиться различать паттерны.
Это привычка или шаблон? Несколько примеров могут быть полезны. Если вы делаете что-то каждый день автоматически, это, вероятно, привычка. Это может быть чашка горячего кофе при пробуждении или латте во время обеда или перерыва.
Конечно, прошлые привычки — это вещи, о которых вы очень хорошо знаете, например, пристрастие к наркотикам и алкоголю, которые переросли в злоупотребление психоактивными веществами и, возможно, зависимость или расстройство, связанное с употреблением алкоголя.Это было не изредка. Так было постоянно, и эта привычка захватила вашу жизнь до такой степени, что вы почувствовали, что не можете существовать без нее. Или вы можете быть почти алкоголиком и хотите изменить это токсичное поведение.
Например, когда кто-то выходит из кайфа, вызванного алкоголем или наркотиками, их привычка к употреблению требует определенного поведения, когда им нужно искать наркотик, который они хотят использовать снова. Затем узор укоренился. Человек сделал это потому, что он должен был, потому что не было другого способа удовлетворить их постоянную потребность и желание использовать.
В итоге, закономерность — это поведение, к которому мы возвращаемся раз за разом, и которое мы делаем, не обязательно задумываясь. Когда дело доходит до распознавания закономерностей, важно выяснить, как устранить те, которые приводят к негативным последствиям, и принять те, которые оказываются полезными для благополучия.
Хорошие новости, плохие новости
Может стать шоком осознание того, что то, что, по вашему мнению, было хорошо для вас, на самом деле прямо противоположное. В этом признании есть хорошие и плохие новости.С одной стороны, вы знаете, что то, что вы считали хорошим, возможно, вы заставили поверить. Может быть, вы думали, что это будет хорошо для вас, потому что это хорошо для кого-то другого, и вы приняли такое поведение в надежде, что у вас будет такой же успех.
Слепая приверженность какой-либо идее никогда не бывает мудрой. Требуется тщательное обдумывание заранее и тщательный анализ после этого, чтобы определить, подходит ли вам модель поведения.
С чего начать
Рассмотрите возможность составления списка текущего поведения, составляющего шаблон.Это помогает делать заметки, которые можно использовать позже в качестве справки.
Сделайте два отдельных листа, по одному на каждый образец хорошего и плохого поведения. Или просто составьте список моделей поведения и посмотрите, соответствуют ли они шаблонам. Затем присвойте им положительное или отрицательное значение.
Это значение означает не то, нравится вам поведение или нет. Тебе нравилось кайфовать, верно? Это не означало, что это был положительный образец поведения. Нет, здесь положительное или отрицательное значение относится к тому, улучшает оно или ухудшает вашу жизнь.
Пример токсичного поведения — слишком много на работе. Хотя, конечно, нет ничего плохого в желании заботиться о своей семье и своих обязанностях, но когда вы постоянно берете на себя новые задания, просите больше ответственности на работе и пренебрегаете другими аспектами своей жизни, это красный флаг, который должен сигнализировать о проблемах. предстоящий.
Может быть, вы раньше не были трудоголиком, но такая модель поведения является симптоматикой характеристик трудоголика.Когда все ваше время занято работой и связанными с ней задачами, остается мало времени ни на что другое. В результате повышается уровень стресса, нарастает напряжение и снижается продуктивность. Работать усерднее и дольше становится все меньше.
Кому обращаться
Когда у вас есть список шаблонов, особенно тех, которые вы хотите изменить, что вы должны с ним делать? К кому лучше всего обратиться за помощью во всем этом?
Есть несколько предложений, любое из которых или все могут быть подходящими для вашей ситуации.
- Ваш супруг (а) или близкие — Ваш (а) супруг (а) и / или близкие и члены семьи — логичный первый выбор здесь. Это люди, которые знают вас больше всего и заботятся о вас. Они должны максимально поддерживать ваши усилия и могут принимать непосредственное участие в некоторых моделях поведения, которые вы хотите изменить.
- Ваш терапевт — Обязательно воспользуйтесь возможностью обсудить со своим консультантом или терапевтом виды поведения, которые вы хотите изменить.Как объективный профессионал, терапевт может лучше указать на наблюдения по поводу определенных форм поведения, о которых вы, возможно, не задумывались, или провести параллели с другими ранее обсуждавшимися формами поведения. Консультации также носят конфиденциальный характер, что должно развеять опасения.
- Ваш начальник. В некоторых случаях изменение моделей поведения потребует от вас определенных обсуждений со своим начальником или руководителем на работе. Очевидно, вам следует очень тщательно обдумать, как вы подходите к этому человеку, включая то, что, когда и где вы планируете такое обсуждение.Имейте в виду, что ваш работодатель хочет, чтобы вы работали как можно более продуктивно, поскольку это бизнес, и бизнес требует продуктивности для достижения успеха. Сосредоточьте свое обсуждение на том, как вы можете удовлетворить свои потребности и что вы можете сделать, чтобы помочь.
Встреча с сопротивлением
Что делать, если вы не можете продвинуться вперед из-за сопротивления? Некоторые токсичные поведенческие паттерны не могут быть устранены в одночасье. Признание того, что необходимо изменить, имеет решающее значение, но до того, как это произойдет, еще далеко.
Наберитесь терпения. Будьте готовы выполнять работу и не разочаровывайтесь и не расстраивайтесь, когда что-то не разрешается сразу. Жизнь может быть запутанной, сложной и трудной для понимания. Это еще одно преимущество поддержки сильной сети поддержки, когда есть люди, к которым можно обратиться в трудные времена.
Также важно понимать внутреннее сопротивление переменам.
Празднуйте успех
Также невероятно ценно отмечать небольшие успехи после внесения этих важных изменений.
Помните, что не каждое изменение будет потрясающим. Это не обязательно, чтобы считаться успехом. Если это важно для вас, важно для вашего благополучия.
Признайте ваши достижения. Отдайте себе должное за то, что вы сделали, а затем посмотрите на следующий пункт в списке и вернитесь к работе. Успех строится на успехе. С инерцией легче двигаться вперед.
Понимание шаблонов поведенческого проектирования | Слизистость
Добро пожаловать обратно в нашу серию шаблонов дизайна .В первой части этой серии мы обсудили шесть шаблонов структурного проектирования. Во второй части мы рассмотрим модели поведения. Паттерны поведения позволяют нашим объектам общаться друг с другом, будь то один к одному или многие к одному.
Шаблон делегирования
Я помню, как впервые услышал о делегате, представленном мне как способ разрешить объектам общаться друг с другом. Первоначальным препятствием, с которым я столкнулся при работе с делегатами, было различие между делегатами и протоколами.
Протокол — это набор требований, которые должен реализовывать каждый соответствующий ему тип. Протокол содержит детали декларации, а не детали реализации. Делегаты реализуются с использованием протоколов и полезны, потому что они устанавливают индивидуальный метод связи между объектами. (Следует отметить, что в ситуациях, когда одно закрытие может использоваться для передачи изменений в объект, делегатов может быть слишком много.)
Паттерн наблюдателя
В отличие от делегирования, этот шаблон позволяет нашим объектам взаимодействовать по принципу «один ко многим».Вот некоторые из обозревателей, используемых в iOS:
Центр уведомлений
Согласно Apple, этот собственный API — это механизм, который позволяет транслировать информацию зарегистрированным наблюдателям. Вам следует подумать об использовании этого API, если у вас есть несколько объектов, которым необходимо отслеживать одно и то же изменение, без прямого подключения этих объектов друг к другу. Также полезно, если это изменение нужно наблюдать неоднократно.
У использования этого шаблона есть несколько недостатков — например, нелегко отслеживать ошибки.В отличие от делегирования, уведомления и их наблюдатели имеют косвенное отношение. Это может затруднить отслеживание того, откуда приходит уведомление или где оно просматривается. Кроме того, объект, отправивший уведомление, и объекты, которые отслеживают изменения, должны знать об уведомлении , имя
и userInfo
. Кроме того, нет детерминированного порядка того, как объекты, слушающие изменения, получают эти уведомления.
Наблюдатели за ключевыми значениями
С помощью наблюдателей «ключ-значение» один тип может наблюдать свойства другого типа, чтобы узнать об изменениях в состоянии наблюдаемого типа.Эти виды наблюдателей могут обеспечить простой способ синхронизации информации между объектами и могут предоставить нам простой способ получить новое значение и предыдущее значение свойства.
Что дальше
Это далеко не полный список моделей поведения, но это хорошее место для начала. В третьем и последнем выпуске этой серии, который выйдет в ближайшее время, мы рассмотрим шаблонов создания .
Шаблон поведенческого проектирования из семейства шаблонов GoF
Поведенческий шаблон проектирования занимается взаимодействием между объектами класса.Они используются для определения наличия уже существующих шаблонов общения и могут управлять этими шаблонами. Поведенческий шаблон — это шаблон проектирования, с помощью которого идентифицируются общие шаблоны взаимодействия между различными объектами. Таким образом, общение осуществляется более гибко.
Поведенческий шаблон дизайнаШаблоны в этой категории характеризуют способы взаимодействия классов или объектов и распределения ответственности.Эти шаблоны проектирования специально предназначены для связи между объектами. Итак, здесь вы узнаете, как использовать поведенческие шаблоны для упрощения сложного управления потоком. Кроме того, вы будете использовать поведенческие шаблоны для инкапсуляции алгоритмов и их динамического выбора во время выполнения.
Этот модуль исследует различные поведенческие паттерны проектирования, паттерны, которые описывают способ взаимодействия объектов и классов и разделения ответственности между собой. Поведенческий паттерн абстрагирует действие, которое вы хотите предпринять, от объекта или класса, который выполняет это действие.Изменяя объект или класс, вы можете изменить используемый алгоритм, затронутые объекты или поведение, сохранив при этом тот же базовый интерфейс для клиентских классов.
Хороший набор поведенческих шаблонов позволяет решать множество сложных проблем, с которыми вы, вероятно, столкнетесь при проектировании объектно-ориентированных систем. К ним относятся перечисление списков, реакция на изменения состояния объекта, сериализация и десериализация объектов без проникновения в инкапсуляцию данных.
В этом модуле вы узнаете:- Как программисты используют шаблоны поведенческого проектирования
- О наиболее часто используемых шаблонах проектирования
- Когда использовать шаблоны наблюдателя и посредника
- Как использовать шаблон Посредник для управления различными светофорами
Шаблоны поведенческих объектов используют композицию объектов, а не наследование.Некоторые из этих шаблонов описывают, как группа одноранговых объектов взаимодействует для выполнения задачи, которую ни один объект не может выполнить сам по себе. Важным вопросом здесь является то, как одноранговые объекты узнают друг о друге. Одноранговые узлы могли поддерживать явные ссылки друг на друга, но это увеличило бы их связь. В крайнем случае, каждый объект будет знать обо всех остальных. Шаблон «Посредник» позволяет избежать этого, вводя объект-посредник между одноранговыми узлами. Посредник обеспечивает косвенное обращение, необходимое для слабой связи.
Книга с выкройками Spring 5
Вы можете купить мою книгу Spring 5 с названием « Spring 5 Design Pattern ». Эта книга доступна на веб-сайте издателя Amazon и Packt . Изучите различные шаблоны проектирования , и , лучшие практики в Spring 5 и используйте их для решения общих проблем проектирования. Вы можете воспользоваться авторской скидкой для покупки этой книги, используя код — « AUTHDIS40 ». Паттерны в паттерне поведенческого дизайнаПаттерны в этой категории паттернов поведенческого дизайна характеризуют способы, которыми классы или объекты взаимодействуют и распределяют ответственность.Эти шаблоны проектирования специально предназначены для связи между объектами. Итак, здесь вы узнаете, как использовать поведенческие шаблоны для упрощения сложного управления потоком. Кроме того, вы будете использовать поведенческие шаблоны для инкапсуляции алгоритмов и их динамического выбора во время выполнения. В эту категорию входят следующие перечисленные шаблоны проектирования.
Цепочка ответственностиСоздается цепочка объектов для обработки запроса, чтобы ни один запрос не возвращался невыполненным.
КомандаКомандный шаблон обрабатывает запросы, скрывая их внутри объекта как команду и отправляя вызывающему объекту, который затем передает ее соответствующему объекту, который может выполнить запрос.
ПереводчикШаблон интерпретатора используется для оценки языка или выражения путем создания интерфейса, который сообщает контекст для интерпретации.
ИтераторШаблон итератора используется для обеспечения последовательного доступа к числовым элементам, присутствующим внутри объекта коллекции, без какого-либо обмена соответствующей информацией.
Посредник Шаблон посредникаобеспечивает простую связь через свой класс посредника, который позволяет взаимодействовать нескольким классам.
MementoЭтот шаблон включает работу трех классов Memento, CareTaker и Originator. Memento сохраняет восстанавливаемое состояние объекта. Работа создателя — создание и хранение состояний, а работа смотрителя — восстановление состояний памятных вещей.
Нулевой объектNull Object используется вместо указания значения Null и используется для представления конкретной операции, которая при создании ничего не делает.По сути, это проверка нулевого значения без наличия значения.
НаблюдательОтношение «один ко многим» требует, чтобы шаблон наблюдателя проверял относительные зависимости объектов.
ГосударствоВ шаблоне состояния поведение класса зависит от его состояния и, таким образом, представлено объектом контекста.
Стратегия Шаблон стратегииимеет дело с изменением поведения класса во время выполнения.Объекты состоят из стратегий, а объект контекста оценивает поведение во время выполнения каждой стратегии.
Шаблонный методОн используется с компонентами, имеющими сходство, где шаблон кода может быть реализован для тестирования обоих компонентов. Код может быть изменен с небольшими изменениями.
ПосетительПосетитель выполняет набор операций с классом элемента и изменяет его поведение выполнения. Таким образом, изменение поведения класса элемента зависит от изменения класса посетителя.
Краткое описание шаблонов проектирования — Часть III. Поведенческие модели. | Кшиштоф Кемпински | Блог разработчиков kkempin
Шаблоны проектированияЯ хочу показать вам простой каталог шаблонов проектирования для объектно-ориентированного программирования, которые описаны в замечательной книге Шаблоны проектирования. Элементы объектно-ориентированного программного обеспечения многократного использования .
В предыдущих частях этой серии я представил шаблоны создания и структурные шаблоны.
Поведенческие шаблоны говорят о том, как решаются проблемы и как распределяются обязанности между объектами. Они больше о коммуникации, чем о структуре.
Цепочка ответственности
Отделите отправителя запроса от его получателя, предоставив более чем одному объекту возможность обработать этот запрос.
Используется, когда : более одного объекта могут обрабатывать запрос, и эта информация известна во время выполнения.
Команда
Инкапсулирует запрос как объект.
Используется, когда : у вас есть очередь запросов для обработки или вы хотите их зарегистрировать. Также, когда вы хотите выполнить действие «отменить».
Интерпретатор
Интерпретирует предложение на данном языке, используя представление грамматики на этом языке.
Используется, когда : вы хотите интерпретировать данный язык и можете представлять операторы как абстрактные синтаксические деревья.
Итератор
Обеспечивает способ последовательного доступа к элементам агрегированных объектов без раскрытия того, как они хранятся внутри.
Используется, когда : вы хотите получить доступ к содержимому объекта, не зная, как он представлен внутри.
Посредник
Определите объект, который знает, как взаимодействуют другие объекты. Это способствует ослаблению связи, удаляя прямые ссылки на объекты.
Используется, когда : набор объектов взаимодействует сложным образом.
Memento
Захватить внешнее состояние объекта, если потребуется восстановить его без нарушения инкапсуляции.
Используется, когда : вам нужно сделать снимок объекта.
Наблюдатель
Когда один объект меняет состояние, все его иждивенцы уведомляются об этом факте.
Используется, когда : изменение одного объекта требует изменения других.
Состояние
Объект может изменять свое поведение при изменении его внутреннего состояния. Похоже, объект меняет свой класс.
Используется, когда : поведение объекта зависит от его состояния, а изменения его поведения во время выполнения зависят от этого состояния.
Стратегия
Позволяет алгоритму быть независимым от клиентов, которые его используют.
Используйте, когда : у вас есть много классов, которые различаются по своему поведению. Стратегии позволяют настроить класс с одним из множества вариантов поведения.
Шаблонный метод
Определите скелет алгоритма в операции, перенеся некоторые шаги на подклассы. Шаблонный метод позволяет подклассам переопределять определенные шаги алгоритма без изменения структуры алгоритма.
Используется, когда : необходимо один раз определить шаги алгоритма и позволить подклассам реализовать его поведение.
Посетитель
Представляют операцию, которая должна выполняться над элементами конструкции. Он позволяет вам определять новые операции без изменения классов элементов.
Используется, когда : структура объекта включает в себя множество классов, и вы хотите выполнить операции с элементами этой структуры, которые зависят от их классов.
Я написал сообщение в блоге о шаблоне посетителя в Ruby.
Внимательность и неадекватные модели поведения
Если вы держите небольшой шарик с водой между двумя руками и сжимаете одну сторону, вода должна куда-то уйти. Это прекрасная глобальная метафора, поскольку она идеально описывает человеческий опыт. Если у нас есть модель поведения, и мы ограничиваем ее, фактически не обращая внимания на ее происхождение, а также на ее применимость или необходимость в нашей жизни, она имеет тенденцию выходить боком. Частично это говорит о нашей степени внимательности.
Если мы обращаем внимание, мы понимаем, с чего все начинается и где они могут развиваться. Если у нас будет тяжелый день на работе, и мы не избавимся от него, кто-то пострадает от этого. Если мы безответственны — намеренно или непреднамеренно — и страдаем от последствий этой безответственности, мы, вероятно, каким-то образом отыграем свое разочарование, даже если это разочарование, в конечном счете, связано с нами самими. Так оно и есть.
Не обращая внимания на свою жизнь и свой опыт, мы теряем невозмутимость, которая обеспечивает нам равновесие, а также чувство контроля и безопасности.Не обращая внимания на лежащие в основе модели поведения, которые создают и, следовательно, стимулируют нашу жизнь и наш опыт, мы можем в конечном итоге постоянно вращаться в повторяющихся образцах поведения.
Сценарий 1 : Моим клиентом движет навязчивая потребность «заполнить пространство», которое он чувствует в своей жизни. Это пространство с годами было заполнено продуктивными, непродуктивными и разрушительными вещами, но, независимо от их характера, эти вещи становятся для него потребляющими.
Что касается продуктивного труда, то у нас есть человек, который так и не закончил среднюю школу, получил GED, вернулся в колледж и получил степень бакалавра, а затем степень магистра, и все это в рекордно короткие сроки. Что касается непродуктивной стороны, у нас есть человек, который часами сидел в Интернете в поисках предметов коллекционирования на E-bay. На деструктивных стороны, это принуждение, чтобы «заполнить пустоту» привело к образцу последовательной зависимости и всему сопутствующему поведению, колеблется от алкоголя, к болеутоляющихам, чтобы играть в азартные игры, чтобы тратить, к порно, к эмоциональному делу.
Этот парень никогда не обращал внимания на чувство нехватки или пустоты; то, что я часто называл «дырой в форме Бога». Продуктивный, непродуктивный или деструктивный — отсутствие компенсации в отношении основной проблемы продолжает вызывать обсессивно-компульсивный комплекс, который вызывает его пристрастия, которые не ослабевают.
Сценарий 2 : Другой мой клиент был трезв 17 лет. Он пришел ко мне за консультацией по вопросам карьеры, и в ходе наших разговоров его отец, который был болен, начал склоняться к неминуемой смерти.
Мой клиент признался мне, что, когда он шел в хоспис, чтобы поговорить со своим отцом, он выпил немного водки и пива перед тем, как войти внутрь. Он поспешил указать, что не пил ни при каких других обстоятельствах и что его пьянство ограничивалось закусками и пивом.
Его отец умер, и он бросил пить в тот день. Это было 3 года назад.
В первом случае человек не обращает внимания на лежащие в его основе модели поведения, и, подавляя их или завершая цикл активности, где-то возникает обсессивно-компульсивный комплекс, который является механизмом для успокоения его чувства пустоты. еще — водный шар.
Во втором случае индивид усвоил ряд эффективных механизмов совладания, которые не позволяли ему участвовать в ошеломляющем / избегающем поведении, связанном с его зависимостью. Столкнувшись с ситуацией, которая была слишком подавляющей для этих новых механизмов выживания, он вернулся к старому поведению. Но когда ситуация перестала быть проблемой, эти старые механизмы выживания были изъяты из игры. Это не воздушный шар с водой — это сознательный акт.
Это обстоятельство не ограничивается аддиктивным поведением — эти примеры были одновременно удобными и совпадающими — но отражают все случаи, когда лежащий в основе шаблон или паттерн вступает в игру для нас неоднократно, с каким бы эффектом.Ключевым моментом для нас является внимание к циклам, реакциям, реакциям и самим созданным обстоятельствам, которые определяют наш опыт.
Выражение «на вынос» здесь восходит к старой пословице судебной психологии, которая гласит: « То, как люди делают что-то одно, — это то, как они делают все. Если мы хотим развиваться и меняться, нам нужно быть интроспективными, внимательными и внимательными к нашим паттернам, шаблонам и циклам поведения, а также к генезису наших действий, сводя все это под зонтик осознанного и сознательного контроля. вместо того, чтобы позволить этим вещам работать бесплатно…и запустить нас в процессе.
© 2009 Майкл Дж. Формика, Все права защищены.
Список рассылки Майкла | Электронная почта Майкла | Следуйте за Майклом в Twitter
Майкл в Facebook | Институт интегральной жизни на Facebook
Поведенческие модели учащихся начальной школы и учителей в индивидуальном обучении робототехнике
Основные моменты
- •
Используйте метод последовательного анализа с запаздыванием для определения поведенческих моделей в деятельности ER.
- •
Поведенческие последовательности мальчиков и девочек показали некоторые различия.
- •
Поведенческие последовательности показали некоторые различия в уровне сложности действий.
- •
Результаты следует учитывать при разработке мероприятий ER.
Реферат
Использование робототехники в образовании становится все более распространенным явлением и может повлиять на обучение студентов.Образовательная робототехника является ценным инструментом для развития когнитивных и социальных навыков учащихся, и она вызывает большой интерес как у учителей, так и у исследователей, от дошкольных учреждений до университетов. Цель этого исследования — понять модели поведения учащихся начальной школы и учителей в процессе индивидуального обучения робототехнике. В нем приняли участие 18 учеников начальной школы и 18 воспитателей. Количественный анализ содержания и последовательный анализ запаздывания были использованы для анализа взаимодействия ученика и учителя.Согласно выводам, наиболее частыми видами поведения были сборка кирпичей учащимися, обмен идеями и опытом, а также рекомендации и вопросы учителей. Что касается поведенческих последовательностей, руководство учителей в значительной степени следовало за поведением учеников, выражая и делясь своими идеями, которые следовали за вопросами учителей. Студенты также были очень склонны играть с роботами, созданными ими самими. Более того, взаимодействие учителя и ученика подробно обсуждалось с точки зрения гендерных различий и уровня сложности робототехнической деятельности.Результаты этого исследования могут быть приняты во внимание при проектировании учебных сред с робототехнической деятельностью.
Ключевые слова
Начальное образование
Гендерные исследования
Интерактивная среда обучения
Стратегии преподавания / обучения
Приложения в предметных областях
Рекомендуемые статьиЦитирующие статьи (0)
Полный текст© 2017 Elsevier Ltd. Все права защищены.
Рекомендуемые статьи
Цитирование статей
Как распознать повторяющиеся модели мыслей, эмоций и поведения
Моника Валанкевич
Чтобы распознать повторяющийся паттерн, нужна радикальная честность и хорошая доза сострадания к себе.Иногда наше повторяющееся поведение и переживания становятся настолько укоренившимися, что кажутся частью нашей личности. Когда мы неоднократно оказываемся в похожей, но нежелательной ситуации, или когда мы повторяем один и тот же сценарий снова и снова, не зная почему, это может означать, что мы попали в повторяющийся цикл.
Первый шаг к освобождению — это распознать шаблон, какой он есть. Один из способов сделать это — сделать шаг назад и посмотреть на ситуацию через более широкий объектив.
Многие техники могут помочь нам отдалиться от наших мыслей и эмоций, медитация — самая известная из них.Однако ведение дневника, особенно письмо в потоке сознания, в котором вы не подвергаете себя цензуре и просто позволяете словам течь по странице, также позволяет вам увеличить расстояние, необходимое для распознавания образов. Итак, возьмите лист бумаги и подумайте о своем прошлом и настоящем.
Вы находитесь в ситуации, которая вызывает знакомое чувство дискомфорта? Эта ситуация напоминает вам что-то из вашего прошлого? Обычно существует активная связь между прошлым и настоящим.Спросите себя, что привело вас туда, где вы находитесь. Замечаете ли вы какие-либо ситуации, которые имеют тенденцию повторяться — например, всегда общаться с людьми одного и того же типа или постоянно упускать возможности из-за того, что вы не чувствуете себя «достаточно хорошим»? Иногда это не так очевидно и заметно, но суть ситуации может быть такой же, то есть заставляет вас чувствовать то же самое. Присутствует сильное чувство близости или дежавю, хотя обстоятельства могут быть очень разными. Это похоже на дом, но не в хорошем смысле.Обратите на это внимание. Это ваша подсказка, ведущая к раскрытию закономерности.
Затем поищите более внутренние шаблоны, например, негативные разговоры с самим собой. Может быть, вы постоянно принижаетесь или склонны к катастрофам. Эти шаблоны побуждают вас делать определенный выбор и вести себя определенным образом, поэтому рано или поздно они проявятся внешне. То же самое и с эмоциями. Есть ли негативные эмоции, которые всегда присутствуют на фоне вашей жизни? Есть ли эмоции, которые вы испытываете при повторении? Вам кажется, что вы перерабатываете одни и те же чувства, и часто они не отражают то, что происходит в вашей жизни в данный момент? Это подсказки, которые помогут вам определить закономерность, которая потенциально может саботировать ваши сознательные усилия.
Как только вы распознаете шаблон, вы можете начать искать убеждения, которые его создали, и вот как вы отпустите его. Выявление паттерна — это первый шаг на пути к исцелению, это положительный шаг, потому что вы не можете исцелить то, чего не знаете.
Я не зря упомянул сострадание к себе, так как увидеть наши модели при ярком свете дня может быть трудно и вызвать у нас чувство вины или стыда. Вы хотите избежать попадания в эту ловушку. Относитесь к себе, как к лучшему другу или к любимому человеку.Каждый из нас несет эмоциональный багаж, делает то, чем не гордится, и время от времени терпит неудачу. Естественно и по-человечески реагировать на старые обиды и истории, формируя определенные модели поведения или опыта.