Паттернов это: Что такое Паттерн?

Содержание

Об использовании паттернов / Хабр

К сожалению, иногда приходится наблюдать случаи, когда люди, прошедшие паттерны проектирования в институте в рамках курса программирования, или же прочитавшие книжку с паттернами сразу после учебника по программированию, начинают применять их в работе буквально с первого класса. Иногда это даёт результат, чаще всего с паттернами Singleton (хотя бы знают про double locking idiom). Но чаще всего возникает ситуация, когда человек применяет паттерн просто для того, что его применить. И это плохо.

Для начала, что такое паттерн? Можно перевести как «образец», «пример», «модель», но мне больше всего нравится слово «шаблон» или же «шаблон проектирования». Потому что любой паттерн это не образец, с которого надо копировать ваш код. Это образец оформления кода, которому надо следовать. Разница такая же, как между образцом документа, который висит на стене, и шаблоном документа в MS Word / OpenOffice Writer, который используется для единообразного оформления (отступы, шрифты, оформление абзацев).

Немного из собственного опыта. Стаж программирования 13 лет. Через два года самостоятельного обучения по книжкам (ни одного слова о паттернах) написал несколько приложений «под заказ», одно из которых используется до сих пор. Но только спустя ещё два года задумался о том, что:

  • Во-первых, код должен быть читаемым хотя бы для самого себя
  • Во-вторых, с кодом, вполне возможно, придётся работать кому-то другому

И тогда я начал задаваться вопросами, вроде:

  • Как обозвать коллекцию почтовых адресов? MailAccounts?
  • Куда положить методы, которые отвечают за работу с почтовыми адресами?
  • Куда сложить методы, которые работают с базой данных, чтобы потом легко их было найти?
  • Как лучше организовать доступ к объекту, который в системе должен быть один и только один? Сделать public static final (const) поле? Сделать public static метод?

Много позже стал понимать, что ответ на эти вопросы как раз и дают паттерны. Шаблоны проектирования не просто диктуют правила именования (тогда они мало чем отличаются от правил оформления кода), но и определяют структуру кода.А определяют ли они способ решения задачи? Нет, выбор способа решения конкретной задачи бизнес-задачи всё равно остаётся за программистом. Например, нам нужно организовать доступ к объектам в базе. Это можно сделать двумя способами:

  • сделать простой доступ к базе с использованием методов getName(int id), setName(int id)
  • выделить под каждую строку в базе данных свой экземпляр объекта

Или, нам нужно сделать парсер формата CSV. Мы можем:

  • Сделать «тупой» парсер на основе нескольких методов parseLine, parseToken, parseString(), работая с последовательностями символов
  • Сделать парсер, который бы работал с отдельными символами (onSemicolon(), onDot(), onQuote(), etc)

Для решения бизнес-задачи мы можем выбрать один из нескольких вариантов решения задачи. Ошибка начинающего программиста, знакомого с шаблонами проектирования, в том, что вместо перебора способов решения задачи он начинает перебирать известные (и неизвестные) ему шаблоны проектирования с целью выбрать подходящий шаблон. И, часто бывает, ошибается. В случае с объектами в базе данных под известный шаблон попадает второй способ, с отдельными экземплярами объекта для каждой строки в базе данных. Но программисту даже в голову не придёт, что большая часть работы может идти с помощью bulk-операций, и тогда нужно использовать другой паттерн. В случае с парсером программист выбирает работу с отдельными символами, так как это хорошо ложится на известный ему паттерн state machine. Но в результате он получает код, который очень сложно читать и невозможно дорабатывать. Потому что свой выбор он начал с выбора шаблона проектирования, а не с выбора способа решения задачи.

Даже если рассматривать более высокоуровневые шаблоны, вроде Model-View-Controller, их применение не должно быть ответом на поставленную бизнес-задачу. Программист должен чётко осознавать, что в его случае действительно нужно иметь возможность отделить поведение системы от отображения. И, придя к этой идее, представив, как он это будет делать хотя бы примерно, обратить внимание на шаблон MVC, который пояснит ему, какие именно части как написать, как их назвать, и какими функциями наделить.

Знание шаблонов проектирования помогают написать код. В случае простых шаблонов они помогают оформить код, чтобы он был более понятным другим людям. Более сложные шаблоны помогают структурировать код. Но обязательна должна быть цепочка «задача» — «способ решения» — «шаблон» — «код», а не «задача» — «шаблон» — «код».

Update: Переписал топик, акцентировав на том, где кончается решение задачи и начинается паттерн. Не уверен, стоит ли переопубликовывать топик или же надо делать новый. Просьба сильно не бить за незнание паттернов поведения на Хабре

Основы паттернов проектирования | C# и .NET

Введение в паттерны проектирования

Последнее обновление: 31.10.2015

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

Хотя идея паттернов как способ описания решения распространенных проблем в области проектирования появилась довольно давно, но их популярность стала расти во многом благодаря известной работе четырех авторов Эриха Гаммы, Ричарда Хелма, Ральфа Джонсона, Джона Влиссидеса, которая называлась «Design Patterns: Elements of Reusable Object-Oriented Software» (на русском языке известна как «Приемы объектно-ориентированного проектирования. Паттерны проектирования») и которая вышла в свет в 1994 году. А сам коллектив авторов нередко называют «Банда четырёх» или Gang of Four или сокращенно GoF. Данная книга по сути являлась первой масштабной попыткой описать распространенные способы проектирования программ. И со временем применение паттернов стало считаться хорошей практикой программирования.

Что же дает нам применение паттернов? При написании программ мы можем формализовать проблему в виде классов и объектов и связей между ними. И применить один из существующих паттернов для ее решения. В итоге нам не надо ничего придумывать. У нас уже есть готовый шаблон, и нам только надо его применить в конкретной программе.

Причем паттерны, как правило, не зависят от языка программирования. Их принципы применения будут аналогичны и в C#, и в Jave, и в других языках. Хотя в рамках данного руководства мы будем говорить о паттернах в контексте языка C#.

Также мышление паттернами упрощает групповую разработку программ. Зная применяемый паттерн проектирования и его основные принципы другому программисту будет проще понять его реализацию и использовать ее.

В то же время не стоит применять паттерны ради самих паттернов. Хорошая программа предполагает использование паттернов. Однако не всегда паттерны упрощают и улучшают программу. Неоправданное их использование может привести к усложнению программного кода, уменьшению его качества. Паттерн должен быть оправданным и эффективным способом решения проблемы.

Существует множество различных паттернов, которые решают разные проблемы и выполняют различные задачи.

Но по своему действию их можно объединить в ряд групп. Рассмотрим некоторые группы паттернов. В основу классификации основных паттернов положена цель или задачи, которые определенный паттерн выполняет.

Порождающие паттерны

Порождающие паттерны — это паттерны, которые абстрагируют процесс инстанцирования или, иными словами, процесс порождения классов и объектов. Среди них выделяются следующие:

  • Абстрактная фабрика (Abstract Factory)

  • Строитель (Builder)

  • Фабричный метод (Factory Method)

  • Прототип (Prototype)

  • Одиночка (Singleton)

Другая группа паттернов — структурные паттерны — рассматривает, как классы и объекты образуют более крупные структуры — более сложные по характеру классы и объекты. К таким шаблонам относятся:

  • Адаптер (Adapter)

  • Мост (Bridge)

  • Компоновщик (Composite)

  • Декоратор (Decorator)

  • Фасад (Facade)

  • Приспособленец (Flyweight)

  • Заместитель (Proxy)

Третья группа паттернов называются поведенческими — они определяют алгоритмы и взаимодействие между классами и объектами, то есть их поведение.

Среди подобных шаблонов можно выделить следующие:

  • Цепочка обязанностей (Chain of responsibility)

  • Команда (Command)

  • Интерпретатор (Interpreter)

  • Итератор (Iterator)

  • Посредник (Mediator)

  • Хранитель (Memento)

  • Наблюдатель (Observer)

  • Состояние (State)

  • Стратегия (Strategy)

  • Шаблонный метод (Template method)

  • Посетитель (Visitor)

Существуют и другие классификации паттернов в зависимости от того, относится паттерн к классам или объектам.

Паттерны классов описывают отношения между классами посредством наследования. Отношения между классами определяются на стадии компиляции. К таким паттернам относятся:

  • Фабричный метод (Factory Method)

  • Интерпретатор (Interpreter)

  • Шаблонный метод (Template Method)

  • Адаптер (Adapter)

Другая часть паттернов — паттерны объектов описывают отношения между объектами. Эти отношения возникают на этапе выполнения, поэтому обладают большей гибкостью. К паттернам объектов относят следующие:

  • Абстрактная фабрика (Abstract Factory)

  • Строитель (Builder)

  • Прототип (Prototype)

  • Одиночка (Singleton)

  • Мост (Bridge)

  • Компоновщик (Composite)

  • Декоратор (Decorator)

  • Фасад (Facade)

  • Приспособленец (Flyweight)

  • Заместитель (Proxy)

  • Цепочка обязанностей (Chain of responsibility)

  • Команда (Command)

  • Итератор (Iterator)

  • Посредник (Mediator)

  • Хранитель (Memento)

  • Наблюдатель (Observer)

  • Состояние (State)

  • Стратегия (Strategy)

  • Посетитель (Visitor)

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

И в данном руководстве мы рассмотрим наиболее основные и распространенные паттерны и принципы их использования применительно к языку C#.

Как выбрать нужный паттерн?

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

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

И в конечном счете надо придерживаться принципа KISS (Keep It Simple, Stupid) — сохранять код программы по возможности простым и ясным. Ведь смысл паттернов не в усложнении кода программы, а наоборот в его упрощении.

Как уловки в дизайне могут обманывать пользователей

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

Dark patterns или «темные паттерны», — это вид пользовательского интерфейса, который создан для того, чтобы обмануть или получить желаемый результат вопреки интересам пользователя.

Темные паттерны используются повсюду: от сайтов знакомств и агрегаторов авиабилетов, до подписок на email-рассылку.

Массово темные паттерны начали использовать после того, как произошел взрывной рост индустрии e-commerce. Компании поняли, что при таком обилии выбора просто предлагать хороший продукт и выделяться недостаточно. В начале 2010-х годов компании стали использовать разные трюки, чтобы обманом заставить пользователей сделать то, чего хочет компания или дизайнер.

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

Важно отметить, что темные паттерны — это не просто непродуманный дизайн. Такой интерфейс создается специально для того, чтобы ввести пользователя в заблуждение. А, чтобы сделать интерфейс максимально «темным» и эффективным, дизайнеры даже прибегают к человеческой психологии.

Виды темных паттернов

Вопреки распространенному мнению, темные паттерны используются не только сайтами с сомнительной репутацией, но и крупными компаниями. В 2010 году дизайнер Гарри Брингул создал сайт DarkPatterns.org, где начал собирать виды темных паттернов и перечень сайтов, компаний и сервисов, использующих их.

«Бесплатная» подписка на сервис

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

Лишние товары в корзине

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

Хотите узнать, почему так произошло и понимаете, что сервис без вашего ведома добавил к заказу несколько позиций.

Известный пример: сайт РЖД и «галочки» напротив страховок, которые прибавляют к цене билета ₽200–500:

Подобный паттерн используют в том числе авиакомпании. Например, когда лоукостер предлагает вам выбрать место в самолете за дополнительную плату, убирая кнопку «продолжить без выбора места» подальше

Отвлечение внимания

Сайты с пиратским контентом часто используют еще один темный паттерн, вводящий в заблуждение.

Вы собираетесь загрузить программу, переходите на страницу скачивания и видите большую кнопку «скачать». Нажимая на нее, вас может перебросить на другой сайт (в случае, если эта кнопка — лишь реклама стороннего ресурса), или предложить ввести свои личные данные (например, номер телефона или банковской карты) в выпадающем окне.
Большой баннер «скачать» на подобных сайтах просто отвлекает внимание, а реальная ссылка для скачивания контента находится в другом месте. Например, подписана более мелким шрифтом.

Запутанная навигация и уговоры остаться

Еще один пример темного паттерна, который особенно заметен в Facebook — невозможность совершить простое действие. Например, удалить свой аккаунт.Если вы захотите деактивировать аккаунт на Facebook, вам придется разобраться в запутанной навигации и несколько раз подтвердить свое решение (несмотря на то, что случайно удалить аккаунт в Facebook невозможно).

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

Выбрав «Я не считаю платформу Facebook полезной», вы сразу же увидите всплывающее окно, которое пытается удержать вас на платформе, объясняя, что на Facebook можно найти друзей. Возможно, вы просто не разобрались со всеми функциями социальной сети.

Даже если вы нажали «закрыть», Facebook все равно не отпустит вас, еще раз показав всплывающее окно, выделенное желтым. Видимо, для того, чтобы вы еще раз обдумали свое решение.

Только с премиум-аккаунтом

Это темный паттерн, который использует, например, платформа для социальной журналистики Medium. Если вы являетесь активным пользователем платформы, то могли заметить, что Medium ввел систему премиум-аккаунтов.

Сейчас если у вас нет платного аккаунта на платформе, Medium постоянно сообщает о том, что читать статьи пользователей без ограничений можно только с премиум-аккаунтом.

Надпись сверху: «Это последняя бесплатная статья для вас в этом месяце. Получите безграничный доступ»

Если вы решите прочесть другую статью от определенных авторов, сделать этого не получится. Лимит бесплатных статей исчерпан.

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

Можно читать статьи и вполне популярных авторов. Например, у серийного предпринимателя Гэри Вайнерчука 289 тыс. подписчиков на платформе

Несмотря на такую возможность, Medium использует темный паттерн, который вводит людей в заблуждение, давая понять, что теперь платформа стала платной.

Игра на чувствах

Пример, который часто используется при предложении подписаться на рассылку — своего рода игра на чувствах, когда пользователю предлагается указать свою почту в выпадающем окне, а если он отказывается, ему нужно кликнуть на «нет, я не хочу получать выгодные предложения».

Арт-директор веб-отдела коммуникационного агентства SETTERS Сергей Борцов объясняет: «Действительно, может показаться, что большинство описанных примеров выглядят как ошибки при разработке интерфейса. Но эти ошибки являются следствием образования как раз тех самых темных UX-паттернов. Задача таких «ошибок» — сделать опыт использования вашего сервиса для пользователя максимально неуютным. Подменить, вызвать чувство вины, ввести в заблуждение. Создатели темных интерфейсов точно знают, что делают».

Как соблюсти баланс

В зависимости от того, как выстроен баланс между потребностями бизнеса и пользователя, дизайн пользовательского опыта (UX-дизайн) можно разделить на три категории: белый, серый и темный.

  1. В белом UX пользователь в приоритете, а компания получит выгоду, но в долгосрочной перспективе.
  2. Серый UX предполагает использование уловок в дизайне, но только тех, что действительно необходимы бизнесу для получения выгоды. Пользователь важен, но бизнес не всегда действует в его интересах.
  3. Темный UX путает пользователя, задерживает его на сайте и делает опыт общения неприятным. Но бизнес получает быструю выгоду.

Задача-максимум для компании — соблюсти баланс между собственными потребностями и запросами пользователей. Сделать это довольно сложно, поскольку цели бизнеса и клиентов разные.

Сергей Борцов: «Утрируя, можно сказать, что компании все равно, как она получит деньги: через скрытые покупки или показывая клиенту лишнюю порцию рекламы. У пользователя другая цель — он желает разрешить свою задачу как можно более коротким, быстрым и безболезненным (особенно, для кошелька) путем. Здесь важно соблюдать баланс. В выборе между черным и белым UX дизайнер или компания должны выбирать серое (желательно, светло-серое)».

Зачем это крупным компаниям

В список сайта DarkPatterns, созданный дизайнером Гарри Брингулом, сразу же попали большие корпорации вроде Amazon, Netflix и Facebook.

Последняя даже получила отдельный вид темного паттерна, названный в честь основателя социальной сети Марка Цукерберга — «privacy zuckering». Подобный паттерн означает уловку, когда пользовательское соглашение либо скрыто от глаз людей, либо написано настолько непонятно, что большинству не захочется вдаваться в подробности. При этом соцсеть, например, может оставлять за собой возможность собирать личные данные пользователей и передавать их третьим лицам.

В странах, где с защитой персональных данных все сложно, использование таких паттернов может стать угрозой для пользователей.

По мнению Сергея Борцова, крупные компании используют темные и серые паттерны, потому что являются монополистами на рынке: «Крупным компаниям-монополистам это выгодно, так как аналогов их продукту нет. Люди будут продолжать пользоваться Facebook и Google, даже несмотря на то, что те собирают данные «в тихую». Все к такому привыкли, а сами корпорации являются иконами для веб-индустрии».

Запрет использования темных паттернов

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

Вопрос ограничения использования темных паттернов обсуждается в США и на федеральном уровне. В конце апреля 2021 года Федеральная торговая комиссия провела семинар, где в том числе обсуждалось то, как темные паттерны манипулируют потребителями, какие группы людей могут быть особенно уязвимы и какие правила нужно разработать.

Сергей Борцов отмечает: «Так как государственные органы постепенно приходят к регулированию использования темных паттернов, сейчас компаниям особенно важно думать о пользователе. Выход тут один: нужно быть бдительными при использовании таких дизайнерских уловок, не перебарщивать, и в целом стараться соблюдать этику при разработке пользовательских интерфейсов»

Паттерны микросервисной разработки: самый полный список

Шаблон «Разбиение по поддоменам» (Decompose By Subdomain)

При разбиении по бизнес-возможностям могут появиться так называемые «божественные классы» (God Classes) — сущности, которые будут общими для нескольких микросервисов. Как правило, их очень сложно разделить.

Например, в приложении для интернет-магазина такой сущностью может стать заказ. В приведенном выше примере он используется сразу в нескольких сервисах: создание заказов (Orders Creation), доставка заказов (Orders Delivery), оповещения о заказах (Orders Alerts), предзаказы (Preorders).

Чтобы избежать появления God Classes, можно использовать альтернативный шаблон разложения на микросервисы — разбиение по поддоменам. Он основан на концепциях предметно-ориентированного проектирования (Domain-Driven Design, DDD).

DDD разбивает всю модель предметной области (домен) на поддомены. У каждого поддомена своя модель данных, область действия которой принято называть ограниченным контекстом (Bounded Context). Каждый микросервис будет разрабатываться внутри этого ограниченного контекста. Основная задача при использовании DDD-подхода — подобрать поддомены и границы между ними так, чтобы они были максимально независимы друг от друга.

Если вернуться к примеру с интернет-магазином, то все, что связано с заказами, можно рассматривать в рамках поддомена «Заказы» (Orders Subdomain) и именно внутри этого поддомена создавать микросервис по управлению заказами (Orders Service). Таким образом, можно сократить число микросервисов по сравнению с декомпозицией на основе бизнес-возможностей. В нашем сильно упрощенном примере четыре микросервиса были преобразованы в один.

Паттерн Decompose By Subdomain. Пример создания микросервисов на основе поддоменов для интернет-магазина: по сравнению с декомпозицией на основе бизнес-возможностей число микросервисов, так или иначе связанных с заказами, сокращено с 4 до 1

Выставочные залы Москвы | Выставка «Конструкты паттернов. Часть I: Дом»

17 сентября 2021 года в галерее «На Песчаной» Объединения «Выставочные залы Москвы» состоится открытие выставочного проекта «Конструкты паттернов. Часть I: Дом».

Двухчастный проект начинающего куратора Майкла Арутюняна «Конструкты паттернов» посвящен поведенческим паттернам, клише, привычкам, шаблонным неосознанным действиям и попытке рационально определить систему, невидимые человеку алгоритмы в контекстах Дома и Города.

Первая часть проекта, которая будет представлена в галерее «На Песчаной», посвящена Дому и его устройству, философии и положению человека в его чертогах. В состав экспозиции войдут работы 26 художников — студентов и преподавателей Школы Дизайна НИУ ВШЭ, работающих в разных медиа и жанрах.

В рамках первой части выставочного проекта планируется проведение кураторских экскурсий, лекции, мастер-класса и вечера перформансов для значительного расширения представления о теме проекта. У посетителей будет возможность стать участниками конструкции и деконструкции паттернов вместе с художниками и куратором. Более подробная информация о событиях будет представлена в социальных сетях галереи и в каталоге, который можно приобрести в книжном магазине галереи «На Песчаной».

Двухчастный проект «Конструкты паттернов» исследует феномен паттерного мышления и поведения в двух взаимодополняющих контекстах: Дом/Город. Паттерн — это не только повторения или орнаменты, а также доведенная до автоматизма психологическая модель поведения, которая обычно переходит в разряд неосознаваемых человеком. Это целая программа, клише, привычки, по которым мы живем и развиваемся. Проект обращается к проблеме неосознаваемых шаблонов с точки зрения Дома/Города, являющимися конструктами паттерного миропонимания. Два контекста представляются центрами, в которых возникают штампы, передающиеся человеку по СМИ, урбанистическому строю, общению, взаимодействию, визуально.

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

Выставка «Конструкты паттернов. Часть I: Дом» обращается ко Внутреннему контексту. Термин «Дом» является зонтичным, объединяющий многие закрытые пространства и сооружения: дом, квартира, отельный номер, подъезд и, в каких-то случаях, виртуальное цифровое поле, так как оно герметично и пока что существует в неком закрытом поле.

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


О кураторе:

Майкл Арутюнян (род. 2000). Художник, куратор, студент Школы Дизайна НИУ ВШЭ направления «Современное искусство: художник и куратор». В художественных работах использует разные приемы: реди-мейд, инсталляция, «бедное искусство», графика, исследует вопросы семьи, памяти, внутренние конфликты, разрабатывает темы призрачности, отчужденности, фантазийности, одиночества.

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


Участники: Дарья Аксенова, Софья Афанасьева, Ксения Баруздина, Маргарита Варакина, Нигина Вахидова, Анна Виленская, Полина Дмитриева, Александр Журавлев, Алиса Колеватых, Анатолий Лужнов, Милена Малова, Даяна Мангутова, Варвара Медуницына, Елизавета Молостова, Ярослав Мотайлов, Дарья Мухина, Мария Панина, Александра Параил, Анастасия Самилова, Эрнест Саттаров, Юлия Стародубцева, Александра Сыренова, Эльвира Фазлетдинова, Елизавета Шаль, Полина Штанько, Екатерина Юклова (Дюша)


Открытие состоится 17 сентября, 2021 года.

Посещение вернисажа возможно строго по регистрации в обозначенный временной слот. На вернисаж действует бесплатный вход.

Регистрация по ссылке:

https://galereya-na-peschanoy.timepad.ru/event/1743835/

Что такое паттерн в трейдинге

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

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

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

Классификация

Традиционно паттерны в трейдинге делятся на три вида. Основным критерием, по которому фигура получает своё место в классификации, является направление движения цены после формирования паттерна.

Фигуры неопределённости. Двусторонние фигуры

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

«Клин»

В растущем тренде можно увидеть два вида этих фигур: медвежий и бычий «Клин». Обе модели образуются сужением ценового канала. Бычий «Клин» выглядит на растущем графике как небольшая коррекция: локальные минимумы обновляются, но цена в диапазоне замедляется. Максимумы и минимумы клина становятся всё ближе. Для трейдера сигналом к покупке актива будет пробитие верхней границы нисходящего «Клина», бычьего.

Рис. 1. Нисходящий «Клин» на растущем графике акций Газпрома. Источник: Tradingview

Медвежий «Клин» образуется аналогично, но с обновлением максимумов. Цена замедляется, диапазон становится всё меньше. Эта модель сигнализирует о развороте тренда или говорит о последующей коррекции.

Рис. 2. Медвежий «Клин». График акций Газпрома. Источник: Tradingview

Для нисходящей тенденции паттерн идентифицируется зеркально.

«Треугольник»

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

  • Восходящий — имеет горизонтальную линию сопротивления, которую периодически тестирует цена. Минимумы при этом с каждой волной закрепляются выше, делая диапазон хождения цены уже. Для входа в лонг-позицию трейдеры используют факт пробоя линии сопротивления «Треугольника», либо последующий откат к ней;

Рис. 3. Восходящий «Треугольник» на графике акций Apple. Источник: Tradingview

  • Нисходящий — одна из сторон паттерна образуется горизонтальной поддержкой, а вторая — снижающимися максимумами. Это полная противоположность восходящего «Треугольника». Точки входа в продажу можно искать сразу после пробоя поддержки или отката к ней.

Любой из двух паттернов может образоваться как на медвежьем движении, так и на бычьем, поэтому они относятся к универсальным фигурам.

Рис. 4. Нисходящий «Треугольник» на графике акций Walmart. Источник: Tradingview

Фигуры продолжения

Если на экране монитора вырисовываются такие паттерны, как «Вымпел», «Флаг» или «Коробка», с большой вероятностью после реализации фигуры цена продолжит движение в том же направлении.

«Вымпел»

Данный паттерн на бирже часто называют «Треугольником», потому что образуется он практически так же. Диапазон цены с каждой сменой направления затухает, рисуя сужающийся коридор. Разница в том, что верхняя граница «Вымпела» направлена вниз, а нижняя вверх. Фигуру часто можно обнаружить после сильных импульсных движений актива в сторону основного тренда.

Сигнал для входа в сделку появляется после пробоя границы вымпела в сторону основного тренда. Для нисходящей тенденции ситуация зеркальная.

Рис. 5. «Вымпел» на растущем графике акций Moderna. Источник: Tradingview

«Прямоугольник»: коридор, диапазон, консолидация

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

Рис. 6. «Прямоугольник» в нисходящем тренде. График акций Сбербанка. Источник: Tradingview

«Флаг»

Паттерн продолжения, который напоминает «Прямоугольник», но направленный границами против основного тренда. Часто появляется после сильных движений на графике и показывает, что медведи ошибочно приняли небольшую коррекцию за разворот и некоторые продавцы открывают позиции. В какой-то момент покупатели снова вступают в борьбу, граница канала пробивается, и тренд продолжает движение в старом направлении. Для входа в сделку используют факт пробоя границ «Флага» в направлении главного тренда.

Рис. 7. «Флаг» на графике акций «Лукойла». Источник: Tradingview

Паттерны разворота в трейдинге

Некоторые фигуры становятся предвестниками смены текущего тренда или серьёзной коррекции. Часто такие паттерны возникают на исторических максимумах или на сильных уровнях поддержки или сопротивления.

«Голова и плечи»

Самая известная и используемая на всех биржевых рынках фигура технического анализа. Формация представляет собой три вершины, из которых средняя является самой высокой, а две по краям находятся примерно на одном уровне. Паттерн схематично напоминает силуэт человеческих плечей и головы. При этом допускается расположение «Плечей» на разной высоте. Сигналом для входа в сделку служит пробой линии «Шеи» или её тест после пробоя. Для нисходящего тренда фигура образуется зеркально.

Рис. 8. «Голова и Плечи» на графике акций «Лукойла». Источник: Tradingview

Двойные и тройные вершины, двойное/тройное дно

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

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

Рис. 9. Тройная вершина на графике акций «Магнит». Источник: Tradingview

Двойная вершина образуется аналогично тройной (рисунок 9), с той разницей, что линия поддержки пробивается после второго пика. Точки входа можно искать как после пробоя уровня, так и после его последующего тестирования.
Для паттерна двойное/тройное дно ситуация зеркальная.

Перечисленные выше примеры паттернов в трейдинге — основные и самые распространённые. Используя в своей торговой стратегии эти фигуры технического анализа, следует помнить, что они не являются священным Граалем трейдинга. Повысить процент точности прогноза движения цены можно при включении паттернов в комплексные стратегии. Например, фигуры могут стать отличным дополнением к свечному анализу, с которым можно ознакомиться в статьях «Открытого журнала».

13 наиболее популярных графических паттернов в трейдинге

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

Что такое графический паттерн в техническом анализе?

Графические паттерны – это характерные, повторяющиеся участки на графике цены, их еще называют фигурами технического анализа или техническими фигурами.

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

Графические паттерны «Голова и плечи», «Перевернутая голова и плечи»

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

Фигура «Голова и плечи»

Техническая Фигура «Голова и плечи» — формируется на максимумах графика цены в ходе восходящей тенденции. Через точки 1 и 2 проводится линия основания фигуры (линия шеи). Фигура считается полностью сформированной только после закрытия цены ниже линии основания фигуры.

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

Графический паттерн «Голова и плечи»

Фигура «Перевернутая голова и плечи»

Паттерн «Перевернутая голова и плечи» — формируется на минимумах графика цены в ходе нисходящей тенденции. Через точки 1 и 2 проводится линия основания фигуры (линия шеи). Данная фигура технического анализа считается полностью сформированной только после закрытия цены выше линии основания фигуры.

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

Графический паттерн «Перевернутая голова и плечи»

Графические паттерны «Двойная вершина», «Двойное дно»

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

Фигура «Двойная вершина»

Паттерн «Двойная вершина» формируется после восходящего движения на локальном максимуме графика. Состоит из двух последовательных вершин на графике цены, через минимум между ними (точка 1) проводится горизонтальный уровень поддержки – линия основания фигуры.

После пробития ценой линии основания техническая фигура «Двойная вершина» считается сформированной, рекомендуются продажи. Цель отработки – снижение цены от линии основания фигуры на величину Н – высоту фигуры в пунктах.

Графический паттерн «Двойная вершина»

Фигура «Двойное дно»

Паттерн «Двойное дно» формируется после нисходящего движения на локальном минимуме графика. Состоит из двух последовательных впадин на графике цены, через максимум между ними (точка 1) проводится горизонтальный уровень сопротивления – линия основания фигуры.

После пробития ценой линии основания техническая фигура «Двойное дно» считается сформированной, рекомендуются покупки. Цель отработки – рост цены от линии основания фигуры на величину Н – высоту фигуры в пунктах.

Графический паттерн «Двойное дно»

Графические паттерны «Тройная вершина», «Тройное дно»

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

Фигура «Тройная вершина»

Техническая фигура «Тройная вершина» — паттерн образуется на максимумах графика цены после предшествующей восходящей тенденции. Представляет из себя три последовательные вершины на графике цены, находящиеся примерно на одном уровне. Через два находящихся между ними минимума (точки 1 и 2) проводится линия основания фигуры, которая может быть горизонтальной, либо иметь небольшой наклон вверх или вниз. Фигура «Тройная вершина» считается сформированной после закрытия цены ниже линии основания фигуры. Рекомендуются продажи от линии основания фигуры с расчетом на снижение цены на величину высоты фигуры Н.

Графический паттерн «Тройная вершина»

Фигура «Тройное дно»

Паттерн «Тройное дно» — образуется на минимумах графика цены после предшествующей нисходящей тенденции. Представляет из себя три последовательные впадины на графике цены, находящиеся примерно на одном уровне. Через два находящихся между ними максимума (точки 1 и 2) проводится линия основания фигуры, которая может быть горизонтальной, либо иметь небольшой наклон вверх или вниз. Фигура технического анализа «Тройное дно» считается сформированной после закрытия цены выше линии основания фигуры. Рекомендуются покупки от линии основания фигуры с расчетом на рост цены на величину высоты фигуры Н.

Графический паттерн «Тройное дно»

Графический паттерн «Клин»

Паттерн «Клин» относится к разворотным фигурам, образуется на максимумах и минимумах графика цены между двумя сходящимися линиями поддержки и сопротивления. Он имеет схожие черты с паттерном «Треугольник», основным отличием является наклон фигуры (обеих линий, образующих его) в одном направлении. Пробитием «Клина», как разворотной фигуры считается выход цены из него в сторону, противоположную наклону клина.

Если паттерн «Клин» сформирован на максимумах графика в ходе восходящего тренда – рекомендуются продажи после закрытия цены ниже линии поддержки, цель отработки – величина основания паттерна (Н) в пунктах. Если паттерн «Клин» сформирован на минимумах графика в ходе нисходящего тренда – рекомендуются покупки после закрытия цены выше линии сопротивления, цель отработки – величина основания паттерна (Н) в пунктах.

Графический паттерн «Клин»

Графический паттерн «Бриллиант»

Паттерн «Бриллиант» — редкий разворотный паттерн в виде ромба. Формируется на локальных максимумах и минимумах графика цены в ходе восходящего или нисходящего тренда. Указывает на то, что действующая тенденция ослабла и ожидается либо коррекция, либо разворот и смена на противоположный тренд.

Если паттерн «Бриллиант» сформирован на максимумах графика в ходе восходящего тренда – рекомендуются продажи после закрытия цены ниже линии поддержки технической фигуры, цель отработки – высота паттерна (Н) в пунктах. Если «Бриллиант» сформирован на минимумах графика в ходе нисходящего тренда – рекомендуются покупки после закрытия цены выше линии сопротивления паттерна, цель отработки – высота паттерна (Н) в пунктах. 

Графический паттерн «Бриллиант»

Графический паттерн «Прямоугольник»

Универсальный паттерн «Прямоугольник», может предвещать как разворот, так и продолжение действующего тренда. Выглядит как боковой коридор, в котором консолидируется график цены, ограниченный горизонтальными уровнями поддержки и сопротивления. Рекомендуется вести торговлю в сторону пробития паттерна – если цена закрывается выше уровня сопротивления – покупаем, если цена закрывается ниже уровня поддержки – продаем. Цель отработки – высота паттерна (Н) в пунктах.

Графический паттерн «Прямоугольник»

Графический паттерн «Флаг»

Паттерн «Флаг» — фигура продолжения действующей тенденции. Выглядит в виде флага, когда после сильного ценового движения («древко флага»), формируется зона коррекции («полотнище флага»), которая расположена либо горизонтально, либо имеет наклон против «древка».

Зона коррекции паттерна «Флаг» может иметь вид «Прямоугольника», «Треугольника», «Клина». После завершения коррекции и закрытия цены выше линии сопротивления «полотнища флага» рекомендуются покупки, величина отработки – высота «древка флага» (Н).

Графический паттерн «Флаг»Графический паттерн «Флаг»

Графический паттерн «Треугольник»

Можно выделить три основных вида «Треугольников»:

Равносторонний треугольник

Универсальный паттерн «Треугольник», может предвещать как разворот, так и продолжение действующего тренда. Образуется между двумя сходящимися линиями поддержки и сопротивления. Рекомендуется вести торговлю в сторону пробития паттерна – если цена закрывается выше линии сопротивления – покупаем, если цена закрывается ниже линии поддержки – продаем. Цель отработки – величина основания паттерна (Н) в пунктах.

Графический паттерн «Равносторонний Треугольник»

Восходящий Треугольник

«Восходящий Треугольник» — паттерн продолжения восходящей тенденции. Образуется между горизонтальным уровнем сопротивления и восходящей линией поддержки. После закрытия цены выше уровня сопротивления рекомендуются покупки, цель отработки – величина основания паттерна (Н) в пунктах.

Графический паттерн «Восходящий Треугольник»

Нисходящий треугольник

«Нисходящий Треугольник» — паттерн продолжения нисходящей тенденции. Образуется между горизонтальным уровнем поддержки и нисходящей линией сопротивления. После закрытия цены ниже уровня поддержки рекомендуются продажи, цель отработки – величина основания паттерна (Н) в пунктах.

Графический паттерн «Нисходящий треугольник»

Видео «Популярные паттерны: варианты применения»

В качестве дополнительной информации, предлагаю вам ознакомиться с записью вебинара моего коллеги Андрея Гойлова, где он подробно рассказывает про популярные графические модели и показывает на примерах как данные паттерны влияют на движение цены.

Открыть торговый счёт


Материал подготовил

Виктор Грязин

Торгует на финансовых рынках с 2004 года. Приобретённые опыт и знания помогли ему сформировать собственный подход к анализу активов, деталями которого он охотно делится со слушателями вебинаров RoboForex.


Паттернов проектирования

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

Использование шаблонов проектирования

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

Часто люди понимают только, как применить определенные методы проектирования программного обеспечения к определенным проблемам. Эти методы трудно применить к более широкому кругу проблем. Шаблоны проектирования предоставляют общие решения, задокументированные в формате, который не требует специфики, привязанной к конкретной проблеме.

Кроме того, шаблоны позволяют разработчикам общаться, используя хорошо известные, хорошо понятные имена для взаимодействия с программным обеспечением. Общие шаблоны проектирования можно со временем улучшать, делая их более надежными, чем специальные конструкции.

Шаблоны проектирования для создания

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

  • Абстрактная фабрика
    Создает экземпляры нескольких семейств классов
  • Builder
    Отделяет построение объекта от его представления
  • Заводской метод
    Создает экземпляр нескольких производных классов
  • Пул объектов
    Избегайте дорогостоящего приобретения и высвобождения ресурсов путем утилизации неиспользуемых объектов.
  • Прототип
    Полностью инициализированный экземпляр для копирования или клонирования.
  • Singleton
    Класс, из которого может существовать только один экземпляр

Структурные шаблоны проектирования

Все эти шаблоны проектирования касаются композиции классов и объектов.Структурные шаблоны создания классов используют наследование для создания интерфейсов. Структурные шаблоны объектов определяют способы компоновки объектов для получения новых функциональных возможностей.

  • Адаптер
    Сопоставление интерфейсов разных классов
  • Мост
    отделяет интерфейс объекта от его реализации.
  • Composite
    Древовидная структура простых и составных объектов.
  • Decorator
    Динамическое добавление обязанностей к объектам
  • Фасад
    Единый класс, представляющий всю подсистему
  • Flyweight
    Мелкозернистый экземпляр, используемый для эффективного обмена
  • Данные частного класса
    Ограничивает доступ к средствам доступа / мутаторам.
  • Прокси
    Объект, представляющий другой объект

Поведенческие шаблоны проектирования

Все эти шаблоны проектирования связаны с взаимодействием объектов Class.Поведенческие паттерны — это те паттерны, которые наиболее конкретно связаны с общением между объектами.

  • Цепочка ответственности
    Способ передачи запроса между цепочкой объектов
  • Команда
    Инкапсулировать запрос команды как объект
  • Интерпретатор
    Способ включения языковых элементов в программу
  • Итератор
    Последовательный доступ к элементам коллекции
  • Посредник
    Определяет упрощенное взаимодействие между классами
  • Memento
    Захват и восстановление внутреннего состояния объекта
  • Нулевой объект
    Предназначен для использования в качестве значения объекта по умолчанию.
  • Observer
    Способ уведомления об изменении ряда классов
  • Состояние
    Изменить поведение объекта при изменении его состояния
  • Стратегия
    Инкапсулирует алгоритм внутри класса
  • Шаблонный метод
    Отложить точные шаги алгоритма на подкласс
  • Посетитель
    Определяет новую операцию для класса без изменений

Критика

Концепция шаблонов проектирования подвергалась критике со стороны некоторых специалистов в области информатики.

Решает неправильную задачу

Потребность в шаблонах возникает из-за использования компьютерных языков или методов с недостаточной способностью к абстракции. При идеальном факторинге концепция не должна копироваться, а должна быть просто указана. Но если на что-то делается ссылка, а не на копирование, то нет никакого «шаблона» для маркировки и каталогизации. Пол Грэм пишет в эссе Месть ботаников.

Питер Норвиг приводит аналогичный аргумент. Он демонстрирует, что 16 из 23 шаблонов в книге Design Patterns (которая в основном ориентирована на C ++) упрощены или устранены (посредством прямой языковой поддержки) в Lisp или Dylan.

Отсутствует формальная основа

Изучение шаблонов проектирования было чрезмерно спонтанным, и некоторые утверждали, что эту концепцию срочно нужно поставить на более формальную основу. В OOPSLA 1999 , «Банда четырех» (при их полном сотрудничестве) предстала перед показательным судом, в ходе которого они были «обвинены» в многочисленных преступлениях против информатики. Их «осудили» «присяжных», присутствовавших на суде.

Приводит к неэффективным решениям

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

Существенно не отличается от других абстракций

Некоторые авторы утверждают, что шаблоны проектирования не отличаются существенно от других форм абстракции и что использование новой терминологии (заимствованной из архитектурного сообщества) для описания существующих явлений в области программирования не требуется.Парадигма модель-представление-контроллер рекламируется как пример «шаблона», который на несколько лет предшествует концепции «шаблонов проектирования». Некоторые также утверждают, что основным вкладом сообщества шаблонов проектирования (и книги «Банда четырех») было использование языка шаблонов Александра в качестве формы документации; практика, которая часто игнорируется в литературе.