Паттерн в музыке: Паттерн (значения) — Википедия – что такое паттерн | как использовать образцы в музыке

Содержание

Паттерн — Википедия

Плитка — пример использования паттернов в дизайне помещений.

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

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

Каждый из органов восприятия (чувств) воспринимает паттерны в соответствии со своими особенностями.

В науке, в том числе в математике и языкознании, паттерны выявляются путём исследования.

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

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

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

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

рисунки морских животных Эрнста Геккеля, демонстрирующие различные виды симметрии

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

В XIX веке бельгийский физик Жозеф Плато, изучая мыльные пузыри, сформулировал концепцию минимальной поверхности. Немецкий биолог и художник Эрнст Геккель нарисовал сотни морских организмов, подчёркивая их симметрию. Шотландский биолог Дарси Томпсон первым начал изучение паттернов роста как растений, так и животных, показав, что спиральный рост можно описать простыми уравнениями. В XX веке британский математик Алан Тьюринг предсказал механизмы морфогенеза, которые ответственны за образование пятен и полос. Венгерский биолог Аристид Линденмайер и французско-американский математик Бенуа́ Мандельбро́т показали, как математика фракталов может объяснить паттерны роста растений.

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

Симметрия[править | править код]

Симметрия для живых организмов является практически всеобщей. У большинства животных наблюдается зеркальная, или билатеральная, симметрия, она также присутствует в листьях растений и некоторых цветах, например орхидеях.[1] Растения часто имеют круговую, или вращательную, симметрию, как у многих цветов и некоторых животных, например у медуз. Пятилучевая симметрия встречается у иглокожих, таких как морские звёзды, морские ежи и морские лилии[2].

В неживой природе снежинка имеет красивую шестилучевую симметрию, каждая снежинка уникальна, но один и тот же паттерн повторяется на всех шести её лучах[3]. Кристаллы обычно имеют разные виды симметрии и габитусы, они могут быть кубическими, шестигранными, восьмигранными, но настоящие кристаллы никогда не имеют пятилучевую симметрию (чего нельзя сказать о квазикристаллах).[4] Вращательная симметрия встречается в различных явлениях неживой природы, например при всплеске, когда капля падает в водоём,

[5] а также в сферических формах и кольцах планет, таких как Сатурн.[6]

Деревья, фракталы[править | править код]

самоподобие фрактального листа

Фракталы бесконечно самоподобны.[7][8][9] Бесконечные повторения в природе невозможны, поэтому 'фрактальные' паттерны фрактальны лишь приблизительно. Например, листья папоротников и зонтичных (Apiaceae) самоподобны на 2-м, 3-м или 4-м уровне. Схожие с папоротником паттерны самоподобия встречаются также у животных, включая мшанки, кораллы, гидроидные, а также в неживой природе, преимущественно в электрических разрядах.

Фракталоподобные паттерны широко встречаются в природе, в таких распространённых феноменах, как облака, речные сети, геологические разломы, горы, береговые линии,[10] окрас животных, снежинки,[11]кристаллы,[12] разветвления кровеносных сосудов[13] и морские волны.

[14]

Спирали[править | править код]

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

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

Спираль произрастания листьев может быть выведена из последовательности чисел Фибоначчи: 1, 1, 2, 3, 5, 8, 13… (каждое следующее число является суммой двух предыдущих). Например, при росте листьев из ствола, один поворот спирали равен двум листьям, поэтому паттерн или соотношение равно 1/2. У орешника соотношение 1/3; у абрикоса 2/5; у груши 3/8; у миндаля оно составляет 5/13.

[18]

Хаос, потоки, меандры[править | править код]

хаос в окраске ракушки Вид на Николаев из космоса. Синусоидальный паттерн, образованный реками — пример меандра

В математике динамическая система является хаотической, если она слишком чувствительна к начальным условиям (так называемый эффект бабочки[19]).

Теория хаоса считается одним из самых важных факторов, влияющих на возникновение паттернов в природе. Существует связь между хаосом и фракталами — странные аттракторы в хаотических системах имеют фрактальную размерность.[20]

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

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

[21]

Волны, дюны[править | править код]

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

Частным случаем дюн являются барханы.

Пузыри, пена[править | править код]

Мыльные пузыри образуют пену

Замощение[править | править код]

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

Трещины[править | править код]

Пятна и полосы[править | править код]

Паттерны (повторяющиеся элементы) широко используются для украшения среды обитания человека — от лепнины, тротуарной плитки, обоев, паркета и кафеля до орнаментов в одежде, раскраски тканей и использования узоров в оформлении всевозможной печатной продукции. Наиболее популярные паттерны имеют имена, Клетка, Гусиные лапки, Бута, Турецкие огурцы, Алагрек, Меандр.

Паттерны часто употребляются в исламском мире. Искусствоведы подразделяют исламские узоры на стилизованные растительные, которые называются Арабеска, и геометрические, называемые Мореска.[22]

Паттерны для детей[править | править код]

Teleidoscope animation.gif

Простым инструментом для создания паттернов является спирограф.

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

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

[23] одинаковую последовательность колебаний биопотенциалов, повторяющуюся в одном или нескольких отведениях при одинаковых состояниях и условиях[24]

Термин паттерн используется для обозначения последовательности нервных импульсов, имеющей определённое информационное значение[25], например, «паттерны боли при биомеханических нарушениях суставов краниовертебрального перехода и шейного отдела позвоночника»[26] или «паттерны двигательных и чувствительных расстройств при патологии нервных структур в дистальных отделах верхней конечности»[27].

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

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

  1. ↑ Stewart, Ian. 2001. Pages 48-49.
  2. ↑ Stewart, Ian. 2001. Pages 64-65.
  3. ↑ Stewart, Ian. 2001. Page 52.
  4. ↑ Stewart, Ian. 2001. Pages 82-84.
  5. ↑ Stewart, Ian. 2001. Page 60.
  6. ↑ Stewart, Ian. 2001. Page 71.
  7. Mandelbrot, Benoît B. The fractal geometry of nature (неопр.). — Macmillan, 1983.
  8. Falconer, Kenneth. Fractal Geometry: Mathematical Foundations and Applications (англ.). — John Wiley, 2003.
  9. Briggs, John. Fractals:The Patterns of Chaos (неопр.). — Thames and Hudson (англ.)русск., 1992. — С. 148.
  10. Batty, Michael. Fractals – Geometry Between Dimensions (англ.) // New Scientist : magazine. — Holborn Publishing Group, 1985. — 4 April (vol. 105, no. 1450). — P. 31.
  11. Meyer, Yves; Roques, Sylvie. Progress in wavelet analysis and applications: proceedings of the International Conference "Wavelets and Applications," Toulouse, France – June 1992 (англ.). — Atlantica Séguier Frontières, 1993. — P. 25.
  12. Carbone, Alessandra; Gromov, Mikhael; Prusinkiewicz, Przemyslaw. Pattern formation in biology, vision and dynamics (англ.). — World Scientific, 2000. — P. 78. — ISBN 9789810237929.
  13. Hahn, Horst K.; Georg,Manfred; Peitgen, Heinz-Otto. Fractal aspects of three-dimensional vascular constructive optimization // Fractals in biology and medicine (неопр.) / Losa, Gabriele A.; Nonnenmacher, Theo F.. — Springer (англ.)русск., 2005. — С. 55—66.>
  14. Addison, Paul S. Fractals and chaos: an illustrated course (англ.). — CRC Press, 1997. — P. 44—46.
  15. ↑ Maor, Eli. e: The Story of a Number. Princeton University Press, 2009. Page 135.
  16. ↑ Ball, 2009. Shapes pp 29-32.
  17. Kappraff, Jay. Growth in Plants: A Study in Number (неопр.) // Forma. — 2004. — Т. 19. — С. 335—354.
  18. Coxeter, H. S. M. (англ.)русск.. Introduction to geometry (неопр.). — Wiley, 1961. — С. 169.
  19. Lorenz, Edward N. Deterministic Nonperiodic Flow (англ.) // Journal of the Atmospheric Sciences (англ.)русск. : journal. — 1963. — March (vol. 20, no. 2). — P. 130—141. — ISSN 1520-0469. — doi:10.1175/1520-0469(1963)020<0130:DNF>2.0.CO;2. — Bibcode: 1963JAtS...20..130L.
  20. ↑ Ruelle, David. Chance and Chaos. Princeton University Press, 1991.
  21. Lewalle, Jacques. Flow Separation and Secondary Flow: Section 9.1 // Lecture Notes in Incompressible Fluid Dynamics: Phenomenology, Concepts and Analytical Tools (англ.). — Syracuse, NY: Syracuse University, 2006. Архивная копия от 29 сентября 2011 на Wayback Machine.
  22. ↑ Информация из справочника интерьерных идей 4living.ru (неопр.) (недоступная ссылка). Дата обращения 4 апреля 2013. Архивировано 3 декабря 2012 года.
  23. ↑ Ciaccio E. J., Dunn S.M., Akay M. Biosignal pattern recognition and interpretation systems. Part 4 of 4: Review of applications // IEEE Engineering in Medicine and Biology Magazine. — 1994. — Vol. 13, 2006, Issue 2. — P. 269—273.
  24. ↑ Гапонова О .В. Электроэнцефалографические паттерны синдрома Веста // Медицинский совет. — 2008.- № 1-2.
  25. ↑ Малая меди цинская энциклопедия. — М.: Медицинская энциклопедия. 1991-96 гг.
  26. ↑ Небожин А. И., Ситель А. Б. Паттерны боли при биомеханических нарушениях шейного отдела позвоночника // Мануальная терапия. — 2007. — № 1 (25). — С. 2-8.
  27. ↑ Паттерны двигательных и чувствительных расстройств при патологии нервных структур в дистальных отделах верхней конечности // Медицинский портал для врачей и студентов doctorspb.ru. 2010. Источник в Интернет: http://doctorspb.ru/articles.php?article_id=1477

Что такое "паттерн" в современном понимании?

Приветствую Вас, друзья!

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

Что такое паттерн?

Дама с напитком

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

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

  1. Шаблонная модель поведения. Такие неосознанные шаблоны могут присутствовать в любых действиях, которые мы выполняем достаточно регулярно (чистка зубов, заваривание чая, мытьё посуды или выполнение рутинной работы)
  2. Заранее сформированная оценка (стереотипное восприятие). Наш мозг старается облегчить себе работу, поэтому для классификации внешних событий использует систему стереотипов. Оценка получается неполной и неточной, зато быстрой.

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

Как работают паттерны?

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

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

Вышесказанное лишь подтверждает тот факт, что лучший способ привить ребенку правильные привычки – демонстрировать ему нужные модели поведения на собственном примере. Нередко люди в течение всей жизни сохраняют в неизменном виде поведенческие шаблоны, перенятые от собственных родителей в детстве. По мере взросления ребенок начинает анализировать паттерны и заимствует их уже не в таком явном виде, как раньше. Теперь он вырабатывает собственные привычки, опираясь на поведение людей, с которых берёт пример. Но даже во взрослом возрасте сохраняется склонность перенимать чужие шаблоны поведения.

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

Смартфон в руках

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

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

Существует три основных способа классификации, в рамках каждого из которых все паттерны можно разбить на две группы:

  1. Индивидуальные и социальные. К индивидуальным паттернам относятся личные привычки: то, как человек ест, водит машину, чистит зубы или принимает душ. К социальным шаблонам относятся привычки в общении и взаимодействии с другими людьми: вежливость, учтивость, колкие шутки и прочее.
  2. Врождённые и приобретённые. Врожденные паттерны – это реакции на внешние события, заложенные в нас на уровне инстинктов. Приобретенные – это модели поведения, формирующиеся в результате воспитания и накопления жизненного опыта.
  3. Позитивные и негативные. Разумеется, шаблоны поведения могут быть как хорошими, так и плохими. Одни помогают нам сохранять здоровье, повышать качество жизни, улучшать отношения с близкими, становиться сильнее и легче справляться с трудностями. Другие только мешают жить, отнимая время, ухудшая здоровье и прочие аспекты жизни.

Как можно использовать паттерны?

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

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

Есть и другой способ использования паттернов – провокационный. Зная, как знакомый ведёт себя в определенных ситуациях, можно использовать это в собственных интересах. Например, все мы с детства знаем, что можно элементарно заставить человека сделать что-то, «взяв его на слабО». В данном методе используется распространенный паттерн: практически каждый человек боится показаться слабым или трусом, поэтому может согласиться на какую-нибудь авантюру.

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

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

Как паттерны влияют на человека?

Леди со смартфоном

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

Также некоторые паттерны закрепляются в виде вредных привычек и оказывают негативное влияние на нашу жизнь. В качестве примера можно назвать такие привычки как:

  • Употребление завтрака в спешке или на ходу. Данная привычка приводит к ухудшению пищеварения и здоровья в целом.
  • Утренняя чашка кофе на голодный желудок. Напиток кажется более ароматным и бодрящим, чем обычно, но скачок кофеина в крови наносит ущерб здоровью и снижает работоспособность в течение дня.
  • Чтение соцсетей перед сном. Данная привычка ухудшает засыпание и снижает качество сна, постепенно приводя к хроническому недосыпанию.
  • Акцентирование внимания на собственных неудачах. Несколько неприятностей, случившихся подряд, могут заставить человека считать себя неудачником. А дальше в дело вступает эффект Пигмалиона: неудачи случаются чаще и воспринимаются болезненнее, усиливая плохое настроение и провоцируя депрессию.
  • Грубость в общении. Привычка грубить может навредить как рабочему общению, так и личному.

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

Заключение

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

что это такое, паттерны поведения примеры

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

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

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

Паттерн что это такое

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

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

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

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

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

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

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

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

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

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

Паттерн в психологии

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

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

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

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

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

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

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

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

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

Благодаря, позитивным и комфортным моделям поведения, человек может гармонично развиваться и справляться со сложностями. Их диапазон протягивается от встряхивания рук после умывания до умения искать компромиссы.

Человек сам способен выбирать те шаблоны или стратегии поведения, которыми ему лучше пользоваться. Для кого-то – это саморазрушающие паттерны, кому-то лучше использовать манипулятивные, а кто-то предпочитает модель уверенного поведения.

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

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

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

Примеры лидерских качеств, которые отображаются в эффективной модели поведения:

- лидеры стимулируют и применяют самоорганизующиеся процессы;

- самостоятельно овладевают необходимой информацией;

- пользуются моделями или шаблонами с целью, упрощенного отображения реальности;

- применяют в творческом процессе случай;

- развивают особенные необходимые состояния и стратегии доступа к подсознательным процессам;

- думают системно, а не механически;

- оперируют динамическими моделями;

- концентрируются на «глубинных процессах» в противоположность «поверхностным процессам»;

- свои идеи представляют в виде схем, карт, формальных внешних систем;

- их идеи соответствуют уровню их знаний.

Автор: Практический психолог Ведмеш Н.А.

Спикер Медико-психологического центра «ПсихоМед»

Математик сочинил «самую неприятную музыку в мире» / Habr

Математик Скотт Рикард (Scott Rickard) попробовал сделать то, что ни один музыкант никогда не пытался, а именно — сочинить самую противную мелодию. Таким способом учёный хотел проиллюстрировать тезис, что гармония музыки заключается в математических паттернах, то есть в повторах.

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

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

Сочинить музыку без повторов пытался сочинить около 70 лет назад Арнольд Шёнберг, известный композитор, основатель новой венской школы. Его музыка действительно была похожа на генератор звуков с массива Костаса, но у Шёнберга не было математического образования, да оно бы и не помогло ему в 1940-е годы, потому что Джон Костас опубликовал свою работу в 1965 году.

Что получилось у Рикарда — см. на видео с TEDxMIA.

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

Паттерны ООП в метафорах / Habr

Большинство литературы посвященной паттернам в ООП (объектно-ориентированном программировании), как правило, объясняются на примерах с самим кодом. И это правильный подход, так как паттерны ООП уже по-умолчанию предназначаются для людей, которые знают что такое программирование и суть ООП. Однако порой требуется заинтересовать этой темой людей, которые в этом совершенно ничего не понимают, например «не-программистов» или же просто начинающих «компьютерщиков». Именно с этой целью и был подготовлен данный материал, который призван объяснить человеку любого уровня знаний, что такое паттерн ООП и, возможно, привлечет в ряды программистов новых «адептов», ведь программирование это на самом деле очень интересно.
Статья предназначена исключительно для новичков, так что «старожилы» ничего нового для себя не узнают. В основном статья описывает известные паттерны из книги «Приемы объектно-ориентированного программирования. Шаблоны проектирования.», но более популярным и простым языком.
Что же такое вообще паттерн в ООП?

Паттерн (от англ. Pattern) — образец, шаблон.
Представьте, что вы хотите сделать новый автомобиль, но вы никогда этим не занимались. Сколько колес и почему вы спроектируете для него? Сейчас вы уже скорее всего скажете что 4, однако почему не 3, 5, 10, 20? Потому-что практикой использования уже было выяснено, что обычные автомобили лучше всего делать на 4-х колесах — это шаблон проектирования сформированный временем. Именно такому же подходу и служат паттерны в ООП и вы не столкнетесь с ними в разработке до тех пор, пока вам не потребуется «сделать автомобиль». Однако иногда случается так, что вы создаете «трицикл», и только потом, набив несколько шишек с его устойчивость и неудачным вписыванием в колею на дороге, узнаете что существует паттерн «автомобиль», который значительно упростил бы вам жизнь, знай вы про него ранее.

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

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

Паттерны которые создают новые объекты, или позволяют получить доступ к уже существующим. То есть те шаблоны, по которым можно создать новый автомобиль и как это лучше сделать.
Singleton (одиночка)

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

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

Registry (реестр, журнал записей)

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

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

Примечание:
«Реестр» нередко является «одиночкой», однако это не всегда должно быть именно так. Например мы можем заводить в бухгалтерии несколько журналов, в одном работники от «А» до «М», в другом от «Н» до «Я». Каждый такой журнал будет «реестром», но не «одиночкой», потому как журналов уже 2. Хотя нередко «реестр» служит именно для хранения «одиночек».
Сам паттерн «реестр» не являтся «порождающим паттерном» в полном смысле этого термина, однако его удобно рассматривать именно во взаимосвязи с ними.

Multiton (пул «одиночек»)

Как понятно из названия паттерна, это по своей сути «реестр» содержащий несколько «одиночек», каждый из которых имеет своё «имя» по которому к нему можно получить доступ.
Object pool (пул объектов)

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

Суть паттерна практически полностью описывается его названием. Когда вам требуется получать какие-то объекты, например пакеты сока, вам совершенно не нужно знать как их делают на фабрике. Вы просто говорите «сделайте мне пакет апельсинового сока», а «фабрика» возвращает вам требуемый пакет. Как? Всё это решает сама фабрика, например «копирует» уже существующий эталон. Основное предназначение «фабрики» в том, чтобы можно было при необходимости изменять процесс «появления» пакета сока, а самому потребителю ничего об этом не нужно было сообщать, чтобы он запрашивал его как и прежде.
Как правило, одна фабрика занимается «производством» только одного рода «продуктов». Не рекомендуется «фабрику соков» создавать с учетом производства автомобильных покрышек. Как и в жизни, паттерн «фабрика» часто создается «одиночкой».
Builder (строитель)

Данный паттерн очень тесно переплетается с паттерном «фабрики». Основное различие заключается в том, что «строитель» внутри себя, как правило, содержит все сложные операции по созданию объекта (пакета сока). Вы говорите «хочу сока», а строитель запускает уже целую цепочку различных операций (создание пакета, печать на нем изображений, заправка в него сока, учет того сколько пакетов было создано и т.п.). Если вам потребуется другой сок, например ананасовый, вы точно также говорите только то, что вам нужно, а «строитель» уже позаботится обо всем остальном (какие-то процессы повторит, какие-то сделает заново и т.п.). В свою очередь процессы в «строителе» можно легко менять (например изменить рисунок на упаковке), однако потребителю сока этого знать не требуется, он также будет легко получать требуемый ему пакет сока по тому же запросу.

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

Prototype (прототип)

Данный паттерн чем-то напоминает «фабрику», он также служит для создания объектов, однако с немного другим подходом. Представьте что у вас есть пустой пакет (из под сока), а вам нужен полный с апельсиновым соком. Вы «говорите» пакету «Хочу пакет апельсинового сока», он в свою очередь создает свою копию и заполняет ее соком, который вы попросили. Немного «сказочный пример», но в программировании часто так и бывает. В данном случае пустой пакет и является «прототипом», и в зависимости от того что вам требуется, он создает на своей основе требуемые вами объекты (пакеты сока).
Клонирование не обязательно должно производится на самом «пакете», это может быть и какой-то другой «объект», главное лишь что данный «прототип» позволяет получать его экземпляры.
Factory method (фабричный метод)

Данный паттерн довольно сложно объяснить в метафорах, но всё же попробую.
Ключевой сложностью объяснения данного паттерна является то, что это «метод», поэтому метафора метода будет использовано как действие, то есть например слово «Хочу!». Соответственно, паттерн описывает то, как должно выполнятся это «Хочу!».
Допустим ваша фабрика производит пакеты с разными соками. Теоретически мы можем на каждый вид сока делать свою производственную линию, но это не эффективно. Удобнее сделать одну линию по производству пакетов-основ, а разделение ввести только на этапе заливки сока, который мы можем определять просто по названию сока. Однако откуда взять название?
Для этого мы создаем основной отдел по производству пакетов-основ и предупреждаем все под-отделы, что они должны производить нужный пакет с соком про простому «Хочу!» (т.е. каждый под-отдел должен реализовать паттерн «фабричный метод»). Поэтому каждый под-отдел заведует только своим типом сока и реагирует на слово «Хочу!».
Таким образом если нам потребуется пакет апельсинового сока, то мы просто скажем отделу по производству апельсинового сока «Хочу!», а он в свою очередь скажет основному отделу по созданию пакетов сока, «Сделай ка свой обычный пакет и вот сок, который туда нужно залить».

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

Lazy initialization (отложенная инициализация)

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

Внедрение зависимости позволяет переложить часть ответственности за какой-то функционал на другие объекты. Например если нам требуется нанять новый персонал, то мы можем не создавать свой отдел кадров, а внедрить зависимость от компании по подбору персонала, которая свою очередь по первому нашему требованию «нам нужен человек», будет либо сама работать как отдел кадров, либо же найдет другую компанию (при помощи «локатора служб»), которая предоставит данные услуги.
«Внедрение зависимости» позволяет перекладывать и взаимозаменять отдельные части компании без потери общей функциональности.
Service Locator (локатор служб)
автор: VolCh
«Локатор служб» является методом реализации «внедрения зависимости». Он возвращает разные типы объектов (компаний) в зависимости от кода инициализации. Пускай задача стоит доставить наш пакет сока, созданный строителем, фабрикой или ещё чем, куда захотел покупатель. Мы спрашиваем у локатора «дай нам службу доставки», и он нам соединяет на со службой доставки по номеру телефона, который директор ему дал (потому что получает откат они нам дают скидку как постоянным клиентам), а мы уже просим службу доставить сок по нужному адресу. Сегодня одна служба, а завтра может быть другая. Нам без разницы какая это конкретно служба, решение принимает директор и сообщает об этом локатору служб, нам важно знать лишь что они могут доставлять то, что мы им скажем туда, куда скажем, то есть службы реализуют интерфейс «Доставить на ».
Структурирующие паттерны

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

Данный паттерн полностью соответствует своему названию. Чтобы заставить работать «советскую» вилку через евро-розетку требуется переходник. Именно это и делает «адаптер», служит промежуточным объектом между двумя другими, которые не могут работать напрямую друг с другом.
Bridge (мост)

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

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

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

Паттерн «фасад» используется для того, чтобы делать сложные вещи простыми. Возьмем для примера автомобиль. Представьте, если бы управление автомобилем происходило немного по-другому: нажать одну кнопку чтобы подать питание с аккумулятора, другую чтобы подать питание на инжектор, третью чтобы включить генератор, четвертую чтобы зажечь ламочку на панели и так далее. Всё это было бы очень сложно. Для этого такие сложные наборы действий заменяются более простыми и комплексные как «повернуть ключ зажигания». В данном случае поворот ключа зажигания и будет тем самым «фасадом» для всего обилия внутренних действий автомобиля.
Front controller (единая точка входа)

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

Самым лучшим примером (который я смог найти в реальной жизни) для метафорического сравнения паттерна «приспособленец» является театральная постановка. Представьте что нам требуется поставить пьесу. Однако по сценарию в этой пьесе задействованы несколько десятков людей, которые по своей сути выполняют одинаковые действия, например участвуют в массовках различных сцен в разные промежутки времени, но между ними всё же есть какие-то различия (например костюмы). Нам бы стоило огромных денег нанимать для каждой роли отдельного актера, поэтому мы используем паттерн «приспособленец». Мы создадим все нужные нам костюмы, но для каждой массовки будем переодевать небольшую группу актеров в требуемые для этой сцены костюмы. В результате мы имеем возможность ценой малых ресурсов создавать видимость управления большим количеством казалось бы разных объектов.
Proxy или surrogate (прокси, заместитель, суррогат)

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

Эта группа паттернов позволяет структурировать подходы к обработке поведения и взаимодействия объектов. Проще говоря, как должны проходить процессы в которых существует несколько вариантов протекания событий.
Chain of responsibility (цепочка обязанностей)

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

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

Сравнить данный паттерн можно с тем, как вы закладываете часто используемые действия в сокращенный набор слов, чтобы сам «интерпретатор» потом превратил этот набор в более комплексные осмысленные действия. По сути каждый человек постоянно является «интерпретатором». Хотите провести жизненный эксперимент? Если из дома выходит кто-то из вашей семьи (муж, жена, ребенок), скажите ему простой набор слов «Литр молока, половинку белого, 200 грамм творога». По сути вы ничего особенного не сказали, лишь перечислили набор продуктов, однако велик шанс того, что «интерпретатор» транслирует это в команду «зайди по дороге в продуктовый магазин и купи следующее … и принеси это домой». Паттерн «интерпретатор» призван сократить часто исполняемые действия в более короткое их описание.
Iterator (итератор, указатель)

Все помнят школьное «на первый второй рассчитайся!»? Вот именно в этот момент шеренга вашего класса и являлась реализацией паттерна «итератор», хотя в программировании это конечно более функциональное понятие, но суть примерно та же. «Итератор» предоставляет правила доступа к списку каких-либо объектов независимо от того, что это за объекты. То есть не важно какой именно класс построен и из каких учеников, должны быть общие правила подсчета и обращения как каждому ученику по списку, вроде «13-ый, выйти из строя». Нередко паттерн «итератор» используется для доступа к «реестру». Ссылки, которые вы видите на многих сайтах для переходов по страницам, вроде «следующая», «предыдущая», «в начало» и т.п. по своей сути также являются доступом «итератору» который отвечает за страницы сайта.
Mediator (посредник)

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

Никогда не просили друга с сотовым телефоном на время запомнить (записать себе) тот номер, что диктуют вам по телефону, потому что вы не можете его запомнить сами (телефон занят)? В этот момент ваш друг реализовывал паттерн «хранитель». Он служит для тех случаев, когда какому-либо объекту требуется сохранить своё состояние (состояние знания номера) в другом объекте (вашем друге), и при необходимости его потом восстановить (спросить у друга номера и тем самым восстановить состояние когда вы его знали). Также уместен аналог с тем, как в играх работает сохранение. Файл «сейва» как раз и будет тем самым паттерном «хранитель».
Observer или Listener (наблюдатель, слушатель)

Очень распространенный паттерн в реальной жизни. Например если вы подписались на какую-либо email (или смс) рассылку, то ваш email (или номер сотового телефона) начинает реализовывать паттерн «наблюдатель». Как только вы подписываетесь на событие (например новая статья или сообщение), всем кто подписан на это событие (наблюдателям) будет выслано уведомление, а они уже в свою очередь могут выбрать как на это сообщение реагировать.
Blackboard (доска объявлений)

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

Как следует из названия, данный паттерн служит для предоставления группе объектов какого-либо общего функционала. Например телефонная станция является для жителей города паттерном «слуга» если речь заходит о том, как узнать точное время (набрать номер 100).
State (состояние)

В реальной жизни каждый человек может прибывать в разных состояниях. Точно также порой требуется чтобы объекты в программе вели себя по разному в зависимости от каких-либо их внутренних состояний. По аналогии с реальной жизнью можно например привести следующий пример:
Если вы устали то на фразу «Сходи в магазин» вы будете выдавать «Не пойду», если вам нужно сходить в магазин (за пивом?), то на «Сходи в магазин» вы будете выдавать «Уже бегу!». Человек (объект) один и тот же, а поведение разное. Именно для этих целей и используют паттерн «состояние».
Strategy (стратегия)

Используется для выбора различных путей получения результата. Вспомним пример с получением прав. Человек, который будет реализовывать паттерн «стратегия» будет действовать следующим образом: вы говорите ему «Хочу права, денег мало» в ответ вы получите права через длительное время и с большой тратой ресурсов. Если вы скажите ему «Хочу права, денег много», то вы получите права очень быстро. Что именно делал этот человек вы понятия не имеете, но вы задаете начальные условия, а как себя вести уже решает он сам (сам выбирает стратегию).
Соответственно внутри «стратегии» хранятся различные способы поведения, и чтобы выбрать, ему нужны определенные параметры, в данном случае это объем денежных средств. Как устроена сама «стратегия» и какие алгоритмы внутри нее вам собственно знать и требуется.
Specification (спецификация, определение)

Паттерн спецификации позволяет описывать подходит ли данный объект нам на основе каких-либо критериев. Например мы имеем несколько контейнеров для погрузки на судно. Однако чтобы определить грузить контейнер или нет на определенное судно, нам нужно выбрать метод как это определять. Реализация такого метода и является паттерном «спецификация». В самом простом случае для каждого контейнера мы можем определить в паттерне «спецификация» совпадает ли страна назначения корабля со страной назначения контейнера. Соответственно мы один раз вводим правило «сравнить две страны назначения» и применяем его ко всем контейнерам для проверки.
Subsumption (категоризация)

Данный паттерн является прямым последователем паттерна «спецификация». Он позволяет распределять объекты по категориям на основе каких-либо условий. Соответственно по аналогии с примером кораблей и контейнеров, это категоризация по тому, какие контейнеры в какие страны направляются.
Visitor (посетитель)

Данный паттерн можно сравнить с прохождением обследования в больнице. Однако «посетителем» в терминах паттернов здесь будут сами врачи. Чтобы было понятнее: у нас есть больной которого требуется обследовать и полечить, но так как за разные обследования отвечают разные врачи, то мы просто присылаем к больному врачей в качестве «посетителей». Правило взаимодействия для больного очень простое «пригласите врача (посетителя) чтобы он сделал свою работу», а врач («посетитель») приходит, обследует и делает всё необходимое. Таким образом следуя простым правилам можно использовать врачей для разных больных по одним и тем же алгоритмам. Как уже было сказано, паттерном «посетитель» в данном случае является врач, который может одинаково обслуживать разные объекты (больных) если его позовут.
Single-serving visitor (одноразовый посетитель)

Является частным случаем использования паттерна «посетитель». Если в случае с обычным «посетителем» у нас есть врач которого мы можем отправить к разным больным (и при желании по несколько раз), то в данном паттерне можно привести аналогию, что мы нанимаем врача, отправляем его к одному больному и после обследования сразу увольняем.
Hierarchical visitor (иерархический посетитель)

Тот же самый паттерн «посетитель», однако в данном случае он отправляется к не одному больному, а в целую больницу и обходит там всех больных.
Заключение

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

Надеюсь вы нашли данный материал полезным для себя и благодарю за внимание.

UPD:
дополнительные материалы, которые также могут быть интересны по данной теме:
От пользователя Markel
www.cours.polymtl.ca/inf3700/divers/nonSoftwareExample/patexamples.html

От пользователя NikoM
Книга «Фримен, Фримен, Сьерра: Паттерны проектирования»

Трекер (программа) — Википедия

У этого термина существуют и другие значения, см. Tracker.

Трекер (англ. tracker) — общий термин для класса программных музыкальных секвенсоров, которые в их простейшем виде позволяют пользователю расставлять звуковые семплы последовательно во времени на нескольких монофонических каналах. Интерфейс трекеров в основном числовой. Ноты вводятся с клавиатуры, в то время как параметры, эффекты и прочее вводятся в виде латинских букв и чисел (обычно в шестнадцатеричном виде). Завершённая музыкальная композиция состоит из нескольких небольших многоканальных фрагментов — паттернов, порядок воспроизведения которых определяется главным списком — так называемым ордер-листом.

Общими элементами для всех трекеров являются семплы, ноты, эффекты, каналы (треки), паттерны и их порядок.[1]

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

Нота определяет частоту, на которой воспроизводится семпл. Увеличением или уменьшением скорости воспроизведения оцифрованного семпла поднимается или опускается высота ноты (питч), имитируя инструментальные ноты (например, C, C#, D и т. д.)

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

Канал (или трек) — пространство, в котором одновременно может воспроизводиться только 1 семпл. Трекеры для классической Amiga предоставляли возможность создавать 4-х канальные 8-14 битные стерео-композиции на 4 канала (в то время как на IBM PC господствовал 1-битный монофонический спикер и только появилась карта FM-синтеза AdLib). Современные трекеры могут микшировать неограниченное количество виртуальных каналов в одном звуковом потоке благодаря программному микшированию. Каналы имеют фиксированное количество строк, на которых могут быть размещены ноты и эффекты (большинство трекеров выстраивают треки вертикально). Обычно канал содержит 64 строки, что составляет 4 такта размера 4/4 (или 16 beats, то есть 16 четвертей).

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

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

Существуют также трекеры, использующие вместо семплов синтез звуков в реальном времени. Многие из этих программ предназначены для создания музыки при помощи микросхем звукогенераторов, таких как микросхема OPL в звуковых картах Adlib[2] и SoundBlaster, или звуковых микросхем классических бытовых компьютеров. Большинство современных трекеров могут использовать в качестве источников звуков VST-инструменты (VSTi)[3].

Трекерная музыка обычно сохраняется в файлах, называемых «модулями», где информация о структуре композиции и семплы содержатся внутри одного и того же файла. Воспроизведение большинства «классических» форматов трекерных модулей поддерживается такими популярными музыкальными плеерами, как Winamp, XMMS, foobar2000, а также ModPlug Player (используется в XMMS в виде библиотеки), отдельно приспособленным для проигрывания модулей основной части когда-либо существовавших форматов и их вариаций. Наиболее распространёнными форматами модулей являются: MOD, S3M, XM и IT.

Термин «трекер» происходит от названия первой трекерной программы Ultimate Soundtracker[4]. Ultimate Soundtracker был разработан Карстеном Обарски (Karsten Obarski) и выпущен в 1987 году компанией Electronic Arts для компьютера Commodore Amiga. Ultimate Soundtracker был коммерческим продуктом, но немногие из последующих клонов, такие как NoiseTracer, были на него похожи. Основная концепция пошагового упорядочивания семплов с помощью цифр, как это делается в трекерах, применялась в Fairlight CMI, рабочей станции для записи семплов в конце 1970-х. Некоторые ранние музыкальные редакторы с интерфейсом, подобным трекерам, были выпущены для Commodore 64, например Rock Monitor, но они не имели возможности воспроизводить семплы вместо нот на встроенном в компьютере синтезаторе (некоторые версии позволяли использовать 4-битные семплы, программируя контроллер звука Commodore 64 нестандартным образом).

Первой компьютерной игрой использовавшей трекерную музыку была Amegas (1987 год), клон Арканоида для Amiga. Музыка сочинённая Карстеном Обарски, обычно считается первым когда-либо созданным трекерным модулем, она хорошо известна поклонникам старой школы в компьютерной музыке.

Большинство ранних музыкантов-трекеров были из Великобритании и Скандинавии[5]. Это может быть объяснено близкими отношениями трекеров и демосцены, которая быстро развивалась в скандинавских странах, и относительной доступностью в Великобритании компьютеров, способных исполнять трекерные программы. Трекерная музыка стала чем-то вроде андеграундного феномена[6][неавторитетный источник?], особенно когда большое количество современной популярной музыки было танцевальной музыкой, созданной на основе семплов (жанр относительно простой для производства пошаговым упорядочиванием). Фактически несколько верхних мест в танцевальных хит-парадах синглов 1989—1990 годов прямо предвещали направление в сочинении трекерной музыки, которое осталось популярным на многие годы. В частности песня «Pacific» от 808 State и «I believe» от Octave One.

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

Первые трекеры на Amiga поддерживали только 4 канала для 8-битных семплов. Это ограничение было вызвано аппаратными возможностями микросхемы Paula[7], реализующей функцию воспроизведения звука в компьютерах Amiga. Тем не менее, с того момента когда ноты были семплами, ограничение было менее важным, чем ограничение синтезирующих музыку микросхем. Более поздние трекерные программы, из которых наиболее известна OctaMED, позволяли использовать 8 и более каналов, в то время как специальное аппаратное обеспечение позволяло 16-битное воспроизведение.

Трекеры на IBM PC совместимых компьютерах[править | править код]

Трекерная музыка жива и сегодня[когда?]. Её можно услышать в таких компьютерных играх, как серия Unreal и Deus Ex, а также в значительном количестве инди-игр. Несмотря на лёгкую доступность программных семплеров, синтезаторов и секвенсоров, наступление форматов MP3 и позднее Ogg стало причиной перехода большинства профессиональных музыкантов на другое музыкальное программное обеспечение. Но трекерные программы продолжают развиваться. Оригинальная серия трекеров для Amiga (Sound/Noise/Pro Tracker/OctaMED) продолжена на ПК трекером ProTracker 5, разработка которого возобновлена в 2004 году. Buzz, Buzztrax (свободный аналог Buzz), ModPlug Tracker, MadTracker, Renoise, reViSiT, Skale, CheeseTracker, BeRoTracker, SunVox, SVArTracker и другие программы, предлагающие невообразимые возможности, вернулись в наши дни с улучшенными соотношением сигнал/шум, автоматизацией, поддержкой VST, внутренних DSP и мультиэффектов, поддержкой множества карт ввода-вывода. Трекерные форматы файлов популярны в сообществе Game Boy Advance, который, в отличие от оригинального Game Boy, обладает достаточной вычислительной мощностью для поддержи трекерной музыки, занимающей мало места по сравнению с MP3 и другими форматами хранения звука.

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

Антипаттерн — Википедия

Антипаттерн (англ. anti-pattern) — это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным[1]. В отличие от шаблона проектирования, рассмотрение антипаттерна включает в себя как неправильное решение проблемы с его признаками и последствиями, так и выход из ситуации[2].

Термин происходит из информатики, из книги «Банды четырёх» «Шаблоны проектирования», которая заложила примеры практики хорошего программирования. Авторы назвали эти хорошие методы «паттернами», и противоположными им являются «антипаттерны». Частью хорошей практикой программирования является избегание антипаттернов. До появления термина все проблемы назывались ловушки (pitfalls). Таким образом, антипаттерны — это самые распространённые ловушки, но не все ловушки будут антипаттернами.

Антипаттерны концептуально похожи на паттерны в том, что они документируют повторяющиеся решения общих проблем. Они известны как антипаттерны, потому что их использование (или злоупотребления) даёт негативные последствия[3]Перейти к разделу «#Антипаттерн и паттерн ошибки».

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

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

В отличие от паттернов ошибок, антипаттерны относятся к уровню проектирования, а не кодирования.

Антипаттерны являются паттернами проектирования, паттерны ошибок представляют собой паттерны некорректного поведения программ, коррелирующего с ошибками программирования[4].

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

Впервые термин «Антипаттерн» в смысле формальной модели типичного неудачного решения используется в 1996 году Майклом Эйкройдом (англ. Michael Akroyd) на конференции «Object World West Conference», посвященной аспектам объектно-ориентированного программирования.[5] В своей презентации «Антипаттерны: предотвращение неправильного использования объектов» Эйкройд обращал внимание на вредные, но частые программные конструкции, в частности, те, что противоречат принципам ООП. К тому же, для каждой такой конструкции он предлагал эффективную замену.

Термин (в смысле: «плохая идея») встречался и до Эйкройда, но не публиковался и особой популярностью не пользовался. И все же приписывать авторство одному человеку не стоит. Как считает Уильям Браун, автор книги «Антипаттерны: рефакторинг приложений, архитектур и проектов», антипаттерн — это этап эволюции понятия паттерна проектирования, расширения их модели.

Уильям Браун выделяет антипаттерны с трёх точек зрения: разработчика, архитектора и менеджера:

  • Антипаттерны разработки (development antipatterns)[⇨]
  • Архитектурные антипаттерны (architectural antipatterns)[⇨]
  • Организационные антипаттерны (managerial antipatterns)[⇨]

Нейл и Лаплантэ приводят четвёртый тип[6][7]:

  • Антипаттерны среды (environmental antipatterns)[⇨]

Кроме того, антипаттерны были описаны для отдельных информационных технологий, таких как[7]:

Технические проблемы и решения, с которыми имеют дело программисты[7]:

Антипаттерны в объектно-ориентированном программировании[править | править код]

  • Базовый класс-утилита (BaseBean[13]): Наследование функциональности из класса-утилиты вместо делегирования к нему.
  • Anemic Domain Model[en][13] — боязнь размещать логику в объектах предметной области.
  • Вызов предка[en] (Call super): Для реализации прикладной функциональности методу класса-потомка требуется в обязательном порядке вызывать те же методы класса-предка.
  • Ошибка пустого подкласса (Empty subclass failure): Создание класса (в Perl), который не проходит «проверку пустоты подкласса» («Empty Subclass Test») из-за различного поведения по сравнению с классом, который наследуется от него без изменений.
  • Божественный объект (God object): Концентрация слишком большого количества функций в одной части системы (классе).
  • Объектная клоака (Object cesspool): Переиспользование объектов, находящихся в непригодном для переиспользования состоянии.
  • Полтергейст[en] (Poltergeist[14]): Объекты, чьё единственное предназначение — передавать информацию другим объектам.
  • Проблема йо-йо[en] (Yo-yo problem): Чрезмерная размытость сильно связанного кода (например, выполняемого по порядку) по иерархии классов.
  • Одиночество (Singletonitis): Неуместное использование паттерна одиночка.
  • Френд-зона (Friend zone): Неуместное использование дружественных классов и дружественных функций в языке C++.
  • Каша из интерфейсов (Interface soup[15]): Объединение нескольких интерфейсов, разделенных согласно принципу изоляции интерфейсов (Interface segregation), в один.
  • Висящие концы: Интерфейс, большинство методов которого бессмысленны и реализуются «пустышками».
  • Заглушка (Stub): Попытка «натянуть» на объект уже имеющийся малоподходящий по смыслу интерфейс, вместо создания нового.

Антипаттерны в кодировании[править | править код]

  • Ненужная сложность[en] (Accidental complexity): Внесение ненужной сложности в решение.
  • Действие на расстоянии[en] (Action at a distance): Неожиданное взаимодействие между широко разделёнными частями системы.
  • Накопить и запустить (Accumulate and fire): Установка параметров подпрограмм в наборе глобальных переменных.
  • Слепая вера[en] (Blind faith): Недостаточная проверка корректности исправления ошибки или результата работы подпрограммы.
  • Лодочный якорь[en] (Boat anchor)[14]: Сохранение более не используемой части системы.
  • Активное ожидание[en] (Busy spin, busy waiting): Потребление ресурсов ЦПУ (процессорного времени) во время ожидания события, обычно при помощи постоянно повторяемой проверки, вместо того, чтобы использовать асинхронное программирование (к примеру, систему сообщений или событий).
  • Кэширование ошибки[en] (Caching failure): Забывать сбросить флаг ошибки после её обработки.
  • Воняющий подгузник (The Diaper Pattern Stinks): Сброс флага ошибки без её обработки или передачи вышестоящему обработчику.
  • Проверка типа вместо интерфейса (Checking type instead of membership, Checking type instead of interface): Проверка того, что объект имеет специфический тип в то время, когда требуется только определённый интерфейс.
  • Инерция кода (Code momentum): Сверхограничение части системы путём постоянного подразумевания её поведения в других частях системы.
  • Кодирование путём исключения[en] (Coding by exception): Добавление нового кода для поддержки каждого специального распознанного случая.
  • Таинственный код (Cryptic code): Использование аббревиатур вместо мнемоничных имён.
  • Жёсткое кодирование (Hard code): Внедрение предположений об окружении системы в слишком большом количестве точек её реализации.
  • Мягкое кодирование (Soft code): Патологическая боязнь жёсткого кодирования, приводящая к тому, что настраивается всё что угодно, при этом конфигурирование системы само по себе превращается в программирование.
  • Поток лавы[en] (Lava flow)[14]: Сохранение нежелательного (излишнего или низкокачественного) кода по причине того, что его удаление слишком дорого или будет иметь непредсказуемые последствия.
  • Волшебные числа (Magic numbers): Использование числовых констант без объяснения их смысла.
  • Процедурный код (Procedural code): Когда другая парадигма является более подходящей.
  • Спагетти-код (Spaghetti code, иногда «макароны»)[14]: Код с чрезмерно запутанным порядком выполнения.
  • Лазанья-код[en] (Lasagnia code, или «лук» (onion)): Использование неоправданно большого количества уровней абстракции.
  • Равиоли-код (Ravioli code, или «пельмени»): Объекты настолько «склеены» между собой, что практически не допускают рефакторинга.
  • Мыльный пузырь (Soap bubble): Объект, инициализированый мусором, максимально долго притворяется, что содержит какие-то данные.
  • Мьютексный ад (Mutex hell): Внедрение слишком большого количества объектов синхронизации между потоками.
  • (Мета-)шаблонный рак (Template cancer): Повсеместное использование шаблонов (в основном C++), в том числе там, где их использование не оправдано. Это уменьшает понимание и сопровождение кода и замедляет компиляцию.

Методологические антипаттерны[править | править код]

  • Паттерн проектирования: само по себе использование паттернов считается анти-паттерном — знаком того, что система не воплощает достаточный уровень абстракции[16].
  • Программирование методом копирования-вставки (Copy and paste programming)[14]: Копирование (и лёгкая модификация) существующего кода вместо создания общих решений.
  • Дефакторинг (De-Factoring): Процесс уничтожения функциональности и замены её документацией.
  • Золотой молоток (Golden hammer[14]): Сильная уверенность в том, что любимое решение универсально применимо. Название происходит от поговорки «когда в руках молоток, все проблемы кажутся гвоздями».
  • Фактор невероятности[en] (Improbability factor): Предположение о невозможности того, что сработает известная ошибка.
  • Преждевременная оптимизация (Premature optimization): Оптимизация на основе недостаточной информации.
  • Программирование методом подбора (Programming by permutation): Подход к разработке программного обеспечения небольшими изменениями.
  • Изобретение колеса/велосипеда (Reinventing the wheel[14]): Создание с нуля, вместо использования готового решения.
  • Изобретение квадратного колеса (Reinventing the square wheel): Создание плохого решения, когда существует хорошее известное решение.
  • Самоуничтожение (Self-destruction): Фатальная ошибка либо нестандартное поведение программы, приводящая к отказу в обслуживании, возникшая вследствие другой менее серьёзной ошибки. Например, при возникновении ошибки, приложение начинает очень быстро и много писать в лог, вследствие чего заканчивается место на жёстком диске быстрее, чем это обнаружит мониторинг.
  • Два тоннеля: Вынесение новой функциональности в отдельное приложение вместо расширения уже имеющегося. Чаще всего применяется, когда по каким-либо причинам (в основном, при нехватке времени либо нежелании менеджмента) внесение изменений в уже имеющийся код требует больших затрат, чем создание нового. При этом у клиента в конечном итоге работают два приложения, запускаясь одновременно либо попеременно друг из друга.
  • Коммит-убийца (Commit assasin): Внесение отдельных изменений в систему контроля версий без проверки влияния их на другие части программы. Как правило, после подобных коммитов работа коллектива парализуется на время исправления проблем в местах, которые ранее работали безошибочно.

Антипаттерны управления конфигурацией[править | править код]

  • Ад зависимостей (Dependency hell, на платформе Microsoft Windows также называется «DLL hell», «DLL-ад»): Разрастание графа взаимных зависимостей программных продуктов и библиотек, приводящее к сложности установки новых и удаления старых продуктов. В сложных случаях различные установленные программные продукты требуют наличия разных версий одной и той же библиотеки. В наиболее сложных случаях один продукт может косвенно потребовать сразу две версии одной и той же библиотеки.

Разные[править | править код]

  • Дым и зеркала (Smoke and mirrors[14]): Демонстрация того, как будут выглядеть ненаписанные функции (название происходит от двух излюбленных способов, которыми фокусники скрывают свои секреты).
  • Раздувание ПО (Software bloat): Разрешение последующим версиям системы требовать всё больше и больше ресурсов.
  • Функции для галочки: Превращение программы в конгломерат плохо реализованных и не связанных между собой функций (как правило, для того, чтобы заявить в рекламе, что функция есть).

Типичные проблемы, связанные со структурой системы[7]:

  • Инверсия абстракции (Abstraction inversion): Сокрытие части функциональности от внешнего использования, в надежде на то, что никто не будет его использовать
  • Неопределённая точка зрения (Ambiguous viewpoint[14]): Представление модели без спецификации её точки рассмотрения.
  • Большой комок грязи (Big ball of mud): Система с нераспознаваемой структурой.
  • Блоб (Blob[14]): см. Божественный объект (God object).
  • Бензиновая фабрика (Gas factory): Необязательная сложность дизайна.
  • Затычка на ввод данных (Input kludge[14]): Забывчивость в спецификации и выполнении поддержки возможного неверного ввода.
  • Раздувание интерфейса (Interface bloat): Разработка интерфейса очень мощным и очень сложным для реализации.
  • Волшебная кнопка (Magic pushbutton): Выполнение результатов действий пользователя в виде неподходящего (недостаточно абстрактного) интерфейса. Например, в системах типа Delphi это написание прикладной логики в обработчиках нажатий на кнопку.
  • Перестыковка (Re-Coupling): Процесс внедрения ненужной зависимости.
  • Дымоход (Stovepipe System[14]): Редко поддерживаемая сборка плохо связанных компонентов.
  • Состояние гонки (Race hazard, Race condition): непредвидение возможности наступления событий в порядке, отличном от ожидаемого.
  • Мышиная возня[источник не указан 2517 дней]: Неоправданное создание множества мелких и абстрактных классов для решения одной конкретной задачи более высокого уровня.
  • Членовредительство (Mutilation): Излишнее «затачивание» объекта под определенную очень узкую задачу таким образом, что он не способен будет работать с никакими иными, пусть и очень схожими задачами.
  • Сохранение или смерть (Save or die): Сохранение изменений в конфигурации на жесткий диск лишь при завершении приложения; приводит к тому, что в случае отказа в программе эти данные будут утеряны

Проблемы, с которыми встречаются менеджеры (или группы менеджеров)[7]:

  • Аналитический паралич (Analysis paralysis)[14]: неоправданно большие затраты на анализ и проектирование. Часто приводит к закрытию проекта до начала его реализации.
  • Дойная корова[en] (Cash cow): при наличии продукта, приносящего выгоду без существенных вложений, не вкладываются средства в развитие и разработку новых продуктов.
  • Продолжительное устаревание[en] (Continuous obsolescence)[14]: выделение непропорционально больших усилий на портирование системы в новые окружения.
  • Сваливание расходов (Cost migration): перенос расходов на проект к слабому отделу или бизнес-партнёру.
  • Раздутый улучшизм (Creeping featurism): добавление новых улучшений в ущерб суммарному качеству системы.
  • Раздутый элегантизм[en] (Creeping elegance): непропорциональное улучшение красивости кода в ущерб функциональности и суммарному качеству системы.
  • Разработка комитетом (Design by committee)[14]: разработка проекта без централизованного управления или без компетентного руководства.
  • Неуёмная преданность[en] (Escalation of commitment): продолжение реализации решения после того, как доказана его ошибочность.
  • Я тебе это говорил (I told you so): игнорирование мнения эксперта.
  • Управление, основанное на числах (Management by numbers): излишнее внимание к численным показателям, имеющим очень косвенное отношение к управляемой системе, сложным для получения, либо подверженным эффекту Гудхарта.
  • Драконовские меры (Management by perkele): неоправданно жесткий стиль управления.
  • Управление грибами[en] (Mushroom management)[14]: недостаточное информирование работников о выполняемой работе.
  • Расползание рамок[en] (Scope creep): потеря контроля над разрастанием проекта.
  • Привязка к поставщику (Vendor lock-in)[14]: жёсткая привязка к поставщику.
  • Тёплое тело (Warm Bodies)[14]: человек, чей вклад в проект под сомнением.
  • Единственный знающий человек (Single head of knowledge, SHOK): когда жизненно важными для проекта сведениями или навыками обладает только один человек в команде, а с его уходом работа останавливается.
  • Рыцарь на белом коне (Knight in shining armor, KISA): когда на сцене появляется человек, который пытается починить всё, не сообщая никому, что он сделал и почему.

Нейл и Лапланте приводят следующие антипаттерны[6]:

  • Заочный менеджер (Absentee Manager): менеджер ведет себя уклончиво или невидим в течение длительного времени - он прячется где-то в офисе или вдали от офиса.
  • Иметь только молоток (All You Have Is A Hammer): однонаправленное управление, где одни и те же приемы используются на всех подчиненных и во всех ситуациях. Иногда также называется «One-Trick Pony».
  • Дикий менеджер (Cage Match Negotiator): любой менеджер, который упрям не по разуму и использует подход к управлению «Победа любой ценой» или «Я прав, а вы нет». У них часто есть кофейная кружка с «Правилами управления»: «Правило №1: Босс всегда прав. Правило №2: Если босс не прав, см. Правило №1».
  • Доппельгангер (Doppelganger): менеджер или коллега, с которым то легко работать, то трудно.
  • Бесплодные прыжки (Fruitless Hoops): вы готовите для менеджеров всё новые и новые данные, нужные им для принятия решения, но менеджеры так и не принимают никакого решения, продолжая запрашивать у вас данные. Вы не знаете, зачем им нужны эти данные.
  • Золотой ребёнок (Golden Child): «Золотой ребенок» появляется в ситуациях, когда менеджер предоставляет особую ответственность, возможность, признание или вознаграждение члену своей команды на основе личных взаимоотношений с ним и вопреки его действительным действиям. Всех раздражает «Золотое дитя», но настоящая проблема заключается в менеджере.
  • Безглавая курица (Headless Chicken): менеджер без фокуса и плана, который никогда ничего не заканчивает.
  • Лидер не менеджер (Leader Not Manager): подчеркивает важность эффективного руководства.
  • Менеджер попугай (Managerial Cloning): менеджеры среднего звена, начинающие со временем вести себя, как их начальники.
  • Менеджер не лидер (Manager Not Leader): такой менеджер хорошо справляется с административными и управленческими обязанностями, но не обладает лидерскими способностями.
  • Злоупотребление метриками (Metric Abuse): неправильное использование метрик из-за некомпетентности или умышленного манипулирования данными.
  • Классный чувак (Mr. Nice Guy): менеджер, который сосредотачивается на том, чтобы быть другом каждого, в конечном итоге разочаровывает всех и не справляется со своими обязанностями.
  • Управление грибами (Mushroom Management): ситуация, в которой руководство не может эффективно общаться с персоналом. По сути, информация намеренно скрывается, чтобы все были «толстыми, глупыми и счастливыми». Название связано с аналогией: шампиньоны выращивают в темноте и в навозе.
  • Полирование тарелок (Plate Spinning): менеджер скрывает свою неэффективность, заставляя работников заниматься трудоёмкой и бесполезной работой.
  • Герой пролетариата (Proletariat Hero): менеджер ведёт себя с подчинёнными, как с идеальными работниками, но это лишь его опора, используемая для маскировки плохого управления. Это форма «мотивации» персонала, которая дает повод руководству повысить ожидаемые результаты или получить больше с меньшими затратами.
  • Звёздный выскочка (Rising Upstart): суперзвезды, которые не могут терять время на обучение и поиск своего места. Иногда это может быть из-за невежества (они не знают, чего не знают), а иногда из-за нетерпения (они знают то, чего не знают другие). Такой выскочка представляет настоящий вызов для всех, кроме самых опытных менеджеров.
  • Дорога в никуда (Road to Nowhere): Отсутствие плана вызывает замешательство и кризис руководства.
  • Бесхребетный руководитель (Spineless Executive): любой менеджер, который не имеет смелости вступить в необходимую конфронтацию или справиться со сложной ситуацией. Вместо этого он полностью избегает конфронтации или ситуации или просит вас сообщить ему плохие новости.
  • Трёхглавый рыцарь (Three-Headed Knight): нерешительный менеджер.
  • Абсолютный инструмент (Ultimate Weapon): менеджер объявляет, что все могут положиться на выдающихся сотрудников настолько, что эти сотрудники станут проводником всего.
  • Тёплое тело (Warm Bodies): управленческая ситуация, в которой работник, который едва соответствует минимальным требованиям, перемещается от проекта к проекту или от команды к команде. Слабый работник называется «теплым телом», хотя настоящая проблема заключается в менеджере. Этот антипаттерн является противоположностью «Звёздного выскочки» в отношении навыков и потенциала.

Проблемы, вызванные доминирующей в организации структурой и социальной моделью, являющейся результатом действующей в организации общественной политики[17][7][6][18]:

  1. Budgen, D. Software design. — Addison-Wesley, 2003. — ISBN 0-201-72219-4.
  2. ↑ Brown, 1998.
  3. ↑ Smith C. U., 2000.
  4. 1 2 Аллен Э., 2003, с. 65—66.
  5. ↑ http://c2.com/cgi/wiki?AntiPattern (неопр.). Cunningham & Cunningham, Inc..
  6. 1 2 3 Neill, Laplante, 2005.
  7. 1 2 3 4 5 6 Settas, 2011.
  8. ↑ Miroslav Kis. Information security antipatterns in software requirements engineering. In Proceedings of the 9th Conference on Pattern Language of Programs (Plop), 2002.
  9. ↑ John Long. Software reuse antipatterns. In ACM SIGSOFT Software Engineering Notes, volume26, page 4, July 2001.
  10. ↑ Paula Kotze, Karen Renaud, and Judy van Biljona. Don’t do this — pitfalls in using anti-patterns in teaching human-computer interaction principles. Computers and Education, 50(3):979-1008, April 2008
  11. ↑ J. Krai and M. Zemlicka. The most important service-oriented antipatterns. In proceedings of the International Conference on Software Engineering Advances (ICSEA), 2007.
  12. ↑ P.A. Laplante, R.R. Hoffman, and G. Klein. Antipatterns in the creation of intelligent systems. IEEE Intelligent Systems, 22:91-95, 2007.
  13. 1 2 Rajiv Ramnath, Cheyney Loffing. Beginning IOS Programming For Dummies. — John Wiley & Sons, 2014-04-14. — С. 105. — 470 с. — ISBN 9781118799277.
  14. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 William J. Brown. AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. — Wiley, 1998-04-03. — 156 с. — ISBN 0−471−19713−0.
  15. Gary McLean Hall. Adaptive Code via C#: Agile coding with design patterns and SOLID principles. — Microsoft Press, 2014. — С. 267-268. — ISBN 978-0735683204.
  16. ↑ Revenge of the Nerds (неопр.). — «In the OO world you hear a good deal about "patterns". I wonder if these patterns are not sometimes evidence of case (c), the human compiler, at work. When I see patterns in my programs, I consider it a sign of trouble. The shape of a program should reflect only the problem it needs to solve. Any other regularity in the code is a sign, to me at least, that I'm using abstractions that aren't powerful enough-- often that I'm generating by hand the expansions of some macro that I need to write.».
  17. ↑ В оригинале: socio-political forces
  18. Phillip Laplante The Burning Bag of Dung—and Other Environmental Antipatterns ACM Queue November 30, 2004 Volume 2, issue 7
  • Perl Design Patterns Book|Perl Design Patterns — A free online book and wiki
  • William J. Brown, Raphael C. Malveau, Hays W. McCormick III, and Thomas J. Mowbray. AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. — John Wiley & Sons, 1998. — ISBN 0471197130.
  • William J. Brown, Hays W. "Skip" McCormick, Scott W. Thomas. AntiPatterns and Patterns in Software Configuration Management. — Wiley, 1999. — ISBN 978-0-471-32929-9.
  • William J. Brown, Hays W. "Skip" McCormick, Scott W. Thomas. AntiPatterns in Project Management. — Wiley, 2000. — ISBN 978-0-471-36366-8.
  • Neal Ford, Matthew McCullough, Nathaniel Schutta. Presentation Patterns: Techniques for Crafting Better Presentations. — Addison-Wesley, 2012-08-15. — 395 с. — ISBN 9780132963374.
  • Chad Pytel, Tammer Saleh. Rails AntiPatterns: Best Practice Ruby on Rails Refactoring. — Addison-Wesley Professional, 2010-11-09. — 347 с. — ISBN 9780132660068.
  • Neill, Colin J. 9.1.2 Antipatterns in Systems Engineering: An Opening Trio (англ.) // INCOSE International Symposium. — 2012. — Vol. 22, no. 1. — P. 1233—1245. — ISSN 2334-5837.
  • Colin J. Neill, Philip A. Laplante. Antipatterns: Identification, Refactoring, and Management. — CRC Press, 2005. — ISBN 978-1-4200-3124-9.
  • Dimitrios Settas. Software project antipattern knowledge management (doctoral thesis). — Thessaloniki, Greece: Aristotle University, 2011.
  • Аллен Э. Типичные ошибки проектирования. — Издательский дом «Питер», 2003. — 224 с. — ISBN 5-887827-304-6.
  • Smith C. U., Williams L. G. Software Performance AntiPatterns (англ.) // 2nd International Workshop on Software and Performance. — 2000.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*

*

*