Комментарии 66
Отлично! Захотелось сразу даже блокнотик сделать со шпаргалками. Спасибо вам, очень полезно!
все читают теги
Прочитал только после этого комментария. А так никогда не читаю. :)
Спасибо пунктуации на новый тег «я верю» %)
Сейчас будет крик души.
Когда уже основная масса хабраавторов поймёт, что теги не для того, чтобы их читали, а для того, чтобы нужный материал было легче найти по заданному тегу как в общем поиске, так и в избранном. Поэтому нужно указывать четкие однозначные метки, а не писать сочинение в стиле «теги никто не читает, потому напишу сюда какую-нибудь лабуду».
Постоянно приходится дописывать свои теги к постам при добавлении в избранное, но проблему общего поиска по тегам это не решает.
Сейчас у меня в избранном полно информационного мусора в тегах: «никто не читает теги», «тег который никто не читает», «зачем я пишу такие подробные теги?» и пр. А по тегу «всё равно никто не читает теги» на хабре аж 43 топика.
Когда уже основная масса хабраавторов поймёт, что теги не для того, чтобы их читали, а для того, чтобы нужный материал было легче найти по заданному тегу как в общем поиске, так и в избранном. Поэтому нужно указывать четкие однозначные метки, а не писать сочинение в стиле «теги никто не читает, потому напишу сюда какую-нибудь лабуду».
Постоянно приходится дописывать свои теги к постам при добавлении в избранное, но проблему общего поиска по тегам это не решает.
Сейчас у меня в избранном полно информационного мусора в тегах: «никто не читает теги», «тег который никто не читает», «зачем я пишу такие подробные теги?» и пр. А по тегу «всё равно никто не читает теги» на хабре аж 43 топика.
Попытки использовать какую-то ужасную нотацию, то ли куски UML, то ли сами что-то напридумывали. Где-то типы указаны, где-то нет, где то вообще поля какие-то берутся, а то вот, пустые прямоугольники. Не вижу шпаргалки тут, вижу набор субъективных представлений выраженных в плохих рисунках.
Да и вообще, в виде схем воспринимается сложнее — привычнее такое видеть в виде кода на любом распространенном языке с Си-образным синтаксисом.
Согласен. Только лучше Python (код короче и нагляднее) и примеры на одной и той же задаче «почувствуйте разницу».
freehabr.ru/blog/designpatterns/2565.html
freehabr.ru/blog/designpatterns/2565.html
А это как?
Ведь каждый паттерн — это решение своей задачи, нельзя одним паттерном решить все задачи и нельзя всеми паттернами решить одну и ту же проблему…
Ведь каждый паттерн — это решение своей задачи, нельзя одним паттерном решить все задачи и нельзя всеми паттернами решить одну и ту же проблему…
Возможно имеется в виду задача как проект, в котором с помощью паттернов решаются те или иные архитектурные проблемы более удачным или, хотя бы, более понятным большинству, способом.
В таком контексте поддержу просьбу.
Хотелось бы увидеть практическое применение в пределах одного проекта с объяснением бывалых почему для конкретного случая было выбрано применение определенного паттерна, потому как суть некоторых основываясь лишь на теории самому не очень ясна.
Хотелось бы увидеть практическое применение в пределах одного проекта с объяснением бывалых почему для конкретного случая было выбрано применение определенного паттерна, потому как суть некоторых основываясь лишь на теории самому не очень ясна.
Так в оригинальной книге GoF как раз с примерами, как по отдельным паттернам, так и в пределах проекта «Текстовый редактор». Эта шпаргалка — выжимка из той книги.
Структурные паттерны на питоне? Ну-ну :)
Нет, я не спорю, написать то можно что угодно, только вот показывать плохие примеры для языка это не правильно…
Нет, я не спорю, написать то можно что угодно, только вот показывать плохие примеры для языка это не правильно…
У меня там freehabr.ru/blog/designpatterns/2565.html приведены следующие паттерны.
Behavioral: interpreter, iterator;
Creational: abstractfactory, builder, singleton;
Structural: facade, flyweight.
А так, примеры есть на все из «книги четырех» я их просто не выкладывал.
А Вы уж определитесь какие из «плохие примеры для языка». Плохо иметь единый пример, чтобы четко различать и чувствовать разницу в реализации, или надо было их делать не на Python, а на PHP, а лучше на Pascal/Delphi, которые Вы типа знаете, но испортили ими в молодости своей неокрепший разум.
Behavioral: interpreter, iterator;
Creational: abstractfactory, builder, singleton;
Structural: facade, flyweight.
А так, примеры есть на все из «книги четырех» я их просто не выкладывал.
А Вы уж определитесь какие из «плохие примеры для языка». Плохо иметь единый пример, чтобы четко различать и чувствовать разницу в реализации, или надо было их делать не на Python, а на PHP, а лучше на Pascal/Delphi, которые Вы типа знаете, но испортили ими в молодости своей неокрепший разум.
в описании у каждого патерна указан тип 'поведенческий'. А судя по списку в начале должны ещё быть порождающие и структурные.
Упс… извиняюсь, глупая ошибка, сейчас исправлю.
Всё же очевидно, они по цвету различаются. Легенда цветов в начале. Я на неё посмотрел и дальше не читал подписи.
Ах, у кого-то проблемы с цветовосприятием? Так это их проблемы, и вообще их всего несколько процентов. Зачем ещё придумывать, как продублировать цветовую информацию?
В общем, это надо не в хаб «Паттерны», а в хаб «Анти-Accessibility». Точно будет популярным.
Ах, у кого-то проблемы с цветовосприятием? Так это их проблемы, и вообще их всего несколько процентов. Зачем ещё придумывать, как продублировать цветовую информацию?
В общем, это надо не в хаб «Паттерны», а в хаб «Анти-Accessibility». Точно будет популярным.
Это точно ко мне вопросы? Для меня очевидно какой паттерн куда относится вообще без цветов и подписей. Да и без этой статьи тоже :-)
Но если автор делает шпаргалку по теме, то информация должна быть либо верной либо отсутствовать вообще.
Там есть ещё файлы для скачки и печати, в которых тот же косяк. после их распечатки цветовая маркировка уже сильно не поможет
Но если автор делает шпаргалку по теме, то информация должна быть либо верной либо отсутствовать вообще.
Там есть ещё файлы для скачки и печати, в которых тот же косяк. после их распечатки цветовая маркировка уже сильно не поможет
Обновил пост: поменял типы паттернов, обновил ссылки на файлы.
А ссылку на исходник на английском добавьте плз
В общем, мораль понял: поспешишь — людей насмешишь :(
А как их предлагается использовать?
Вот сидишь, значит, проектируешь новое приложение, перебираешь шпаргалки, какой паттерн куда вставить… Что-то мне кажется, что если так делать, то ничего дельного в итоге не получится.
Вот сидишь, значит, проектируешь новое приложение, перебираешь шпаргалки, какой паттерн куда вставить… Что-то мне кажется, что если так делать, то ничего дельного в итоге не получится.
Думаю, для изучения, закрепления и повторения материала пригодится.
А вот в этом и заключается редкое и ценное умение использовать паттерны.
Программисту их надо просто знать, чтобы не изобретать велосипед и уметь применять там, где в этом есть смысл.
Начинающему программисту с ними надо хотя бы ознакомиться, чтобы узнать, что в его любимом языке программирования можно еще и вот такие штуки вытворять. Также начинающему программисту при ознакомлении с паттернами наставник должен сказать о том, что не стоит теперь всё писать используя только паттерны.
Начинающему программисту с ними надо хотя бы ознакомиться, чтобы узнать, что в его любимом языке программирования можно еще и вот такие штуки вытворять. Также начинающему программисту при ознакомлении с паттернами наставник должен сказать о том, что не стоит теперь всё писать используя только паттерны.
Например, я шпаргалки по паттернам просматриваю перед собеседованиями. Книга банды четырех была прочитана и усвоена уже давно и я периодически начинаю путать названия паттернов, хотя и продолжаю помнить их смысл. Вот в такие моменты и пригодится шпаргалка.
Еще неплохо в ситуации, когда тебе коллега говорит «Вкратце, то, что я здесь реализовал похоже на паттерн N», а ты подзабыл который из паттернов называется N, но, быстро взглянув на шпаргалку, вспомнил.
Еще неплохо в ситуации, когда тебе коллега говорит «Вкратце, то, что я здесь реализовал похоже на паттерн N», а ты подзабыл который из паттернов называется N, но, быстро взглянув на шпаргалку, вспомнил.
На английском есть очень похожая реализация (Refcardz на DZone) — http://cdn.dzone.com/sites/all/files/refcardz/rc008-designpatterns_online.pdf — подготовленная для печати версия.
Честно говоря, вообще никак не воспринимаю картинки-схемы, для меня это пустое место. Вот код — другое дело.
Я такую своим ребятам раздал, пользы от нее никакой правда )
Найти бы подобную по TDD: 5 правил TDD (типа NO PRODUCTION CODE BEFORE RED TEST), паттерны и операции рефакторинга применяемые при этом и т.п.
Т.е. 3 часть «Экстремального программирования» Кента Бека но на одну страничку :)
Найти бы подобную по TDD: 5 правил TDD (типа NO PRODUCTION CODE BEFORE RED TEST), паттерны и операции рефакторинга применяемые при этом и т.п.
Т.е. 3 часть «Экстремального программирования» Кента Бека но на одну страничку :)
НЛО прилетело и опубликовало эту надпись здесь
Мне кажется это бесполезным. Ну будет у вас сниппет, например, на фабричный метод? Его цена равна нулю если не знать когда и зачем его применять. Это же самое главное.
После прочтения фразы про «цветовую дифференциацию штанов» (конечно же, из многими любимого фильма «Кин-дза-дза») вспомнил лекции по мат. логике, где были задачки с этой фразой… Ностальгия.
Как это в плюсах нет функций высших порядков? Есть std::function, есть std::bind, есть std::mem_fn, есть лямбды, есть функциональные объекты. По коду будет длиннее, чем в JS, но работать код будет заметно шустрее, особенно если функцию можно заинлайнить.
А вообще для меня эта шпаргалка скорее нужна чтобы давать более менее устоявшиеся названия сущностям в коде чтобы другие понимали, а сама по себе она не учит ничему.
Для того, чтобы научиться видеть и применять шаблоны нужен цикл задач на применения того или иного шаблона проектирования, есть ли в интернете именно задачники причем желательно с какой-нибудь возможностью тестирования эффективности полученного решения?
А вообще для меня эта шпаргалка скорее нужна чтобы давать более менее устоявшиеся названия сущностям в коде чтобы другие понимали, а сама по себе она не учит ничему.
Для того, чтобы научиться видеть и применять шаблоны нужен цикл задач на применения того или иного шаблона проектирования, есть ли в интернете именно задачники причем желательно с какой-нибудь возможностью тестирования эффективности полученного решения?
Как это в плюсах нет функций высших порядков? Есть std::function, есть std::bind, есть std::mem_fn, есть лямбды, есть функциональные объекты.
Да функция, принимающая в качестве аргумента указатель на другую функцию (или возвращающая его), уже есть функция высшего порядка. Это даже в простом Си работает.
НЛО прилетело и опубликовало эту надпись здесь
Лямбды страшноватые из за статической типизации, да и не слишком это страшнее, чем
var result = foo(a, function(a, b, c) {… });
Хотя конечно это не функциональные языки и ленивые вычисления не поддерживаются а из за отсутствия сборки мусора за временем жизни захваченных переменных нужно самому следить, но зато работают они очень быстро.
Вот раз сборника задач и нет, то, как мне кажется, он бы имел весьма большой успех. Хорошо бы их сделать вместе с тестировщиком, но я ума не приложу как тестировать архитектуру кода, это не входные и выходные данные через stdio подсовывать и забирать.
var result = foo(a, function(a, b, c) {… });
Хотя конечно это не функциональные языки и ленивые вычисления не поддерживаются а из за отсутствия сборки мусора за временем жизни захваченных переменных нужно самому следить, но зато работают они очень быстро.
Вот раз сборника задач и нет, то, как мне кажется, он бы имел весьма большой успех. Хорошо бы их сделать вместе с тестировщиком, но я ума не приложу как тестировать архитектуру кода, это не входные и выходные данные через stdio подсовывать и забирать.
Выберите короче свой любимый язык и постарайтесь сделать шпаргалку именно по паттернам для него.Естественно, ведь по сути фраза «я использовал паттерн X» — это «выразительных возможностей используемого мной языка не хватает, чтобы записать X очевидным образом». Даже сами GoF говорят о том, что их книга с паттернами направлена на языки с выразительностью уровня Java. Возможности языков различаются, так что паттерны не имеют смысла без привязки к языку. Где-то есть поддержка функций высшего порядка — там нет Strategy, там просто создаётся и передаётся функция. Где-то сигналы-слоты заменяют велосипедные Observers. Где-то есть поддержка мультметодов — и там не нужен Visitor. Где-то есть встроенные синглтоны. Где-то классы являются являются объектами и Factory сводится к простому вызову функции make.
Такие вещи полезны, что бы вставлять их в слайды лекций.
Вот к примеру, очень хорошо рассматриваются паттерны на dofactory.com в разделе ".NET Design Patterns". Там есть и простые и из реального мира примеры на каждый паттерн :). Я пользуюсь этим ресурсом.
имеется в виду https://dofactory.com/net/design-patterns ?
просто много еще других ссылок
Вот еще шпаргалка, только без картинок itdumka.com.ua/index.php?cmd=shownode&node=11
Было бы также не менее интересно посмотреть частотность использования тех или иных паттернов программистами. Ведь часто бывает так, что программист знаком с паттерном, но решить проблему он пытается «в лоб», т.е не в обход с помощью паттернов.
В статье можно бы добавить ясности, если придерживаться группировки шаблонов как в книге. Так будет проще и быстрее найти то что нужно. В идеале, и той же последовательности паттернов лучше придерживаться. В книге они группировались на 3 раздела Creational, Structural и Behavioral patterns. Здесь же идут в перемешку… например Visitor -> Adapter -> Proxy…
Спасибо!
Шпаргалки — это прекрасно. Они структурируют все, что лежит у тебя в голове.
Большое спасибо!
Пожалуйста, если у Вас будет возможность, продолжайте!
Пожалуйста, если у Вас будет возможность, продолжайте!
Очень структурно. информативно и полезно!
Thanks a million!
Thanks a million!
Получается, что агрегация вообще нигде не используется, но зачем-то описана.
НЛО прилетело и опубликовало эту надпись здесь
Жаль, что шаблоны не обозначены в языке. То есть пока коментарий не напишешь
/* это шаблон мост */, остается догадываться что там за шаблон.
Было бы что-то типа «implements template Bridge» — было бы понятнее
/* это шаблон мост */, остается догадываться что там за шаблон.
Было бы что-то типа «implements template Bridge» — было бы понятнее
Тогда уж pattern а не template.
Шаблоны как раз применяются для преодоления недостатков языка. Скажем, в языках с сильно развитой функциональной парадигмой нет нужды во многих ООП-шаблонах. А там где их используют обычно просто добавляют название шаблона к имени: Bridge, Factory, Adapter, (прости господи)Singleton
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Шпаргалка по шаблонам проектирования