[C++] о паттернах
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 22.05.11 12:50
Оценка: 18 (3) +14 -1
Здравствуйте, Abyx,

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

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


23.05.11 12:00: Ветка выделена из темы [C++] о паттернах
Автор: Abyx
Дата: 21.05.11
— Odi$$ey
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: [C++] о паттернах
От: Sorc17 Россия  
Дата: 22.05.11 17:53
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, Abyx,


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


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


Можете придумать две как можно более простые программы в одной из которых было бы целесообразно использовать какой-нибудь самый простой паттерн, например синглтон, а другая была бы похожа на первую но там использование синглтона было бы не нужно?
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[2]: [C++] о паттернах
От: Carc Россия https://vk.com/gosha_mazov
Дата: 22.05.11 21:36
Оценка:
S>Можете придумать две как можно более простые программы в одной из которых было бы целесообразно использовать какой-нибудь самый простой паттерн, например синглтон, а другая была бы похожа на первую но там использование синглтона было бы не нужно?
В "наиболее простых программах" паттерны и нафиг не нужны. Ибо паттерны это эффективный элемент управления со сложностью. Чего в простых программах и вовсе нет, ибо программа по определению п_р_о_с_т_а_я!!!

Выше действительно правильно подметили: практика, практика, и еще раз практика. Тогда становится достаточно ясным плюсы и минусы использования того или иного паттерна.
Aml Pages Home
Re[2]: [C++] о паттернах
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 22.05.11 23:04
Оценка: 116 (10) +13 -1 :)
Здравствуйте, Sorc17, Вы писали:

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


S>Можете придумать две как можно более простые программы в одной из которых было бы целесообразно использовать какой-нибудь самый простой паттерн, например синглтон, а другая была бы похожа на первую но там использование синглтона было бы не нужно?


И не подумаю.

Во-первых, в силу того, что до использования единственного на весь процесс экземпляра класса, который фактически создаётся первым обращением, я додумался ещё задолго до того, как узнал, что та же идея оказалась закодирована под названием "паттерн синглтон". Что-то там было у меня в то время связано с lazy-инициализацией, или lazy-подгрузкой, не помню уже. Собственно, инсайт по этому поводу я помню только такой, который на поверку оказался сродни оторопи: неужели даже такую чепуху можно с таким пафосом продавать? ЧёрдЪ! Сколько же бабла я мог натрясти!

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

И повторюсь, наверное, в десятый раз: паттерны нельзя в прямом смысле использовать. Нельзя даже пытаться это делать. Книги с перечислением паттернов полезно изучать, потому что они подкидывают некоторые комбинаторные (и справедливости ради — терминологические) идеи, которые могут оказаться свежими в данный момент, не более того. При прочих равных (я в этом уверен и никто меня не разубедит) любому мыслящему программисту не составит большого труда додуматься до любого паттерна самостоятельно, но обстоятельства бывают разные — иногда просто нет возможности прерваться и спокойно подумать.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: [C++] о паттернах
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 23.05.11 07:59
Оценка: +1 -1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>И повторюсь, наверное, в десятый раз: паттерны нельзя в прямом смысле использовать.


спорное обобщение совершенно индивидуального опыта

ГВ>Нельзя даже пытаться это делать.


ну а я сначала прочитал про State, и только потом через какое-то время попалась задача, на которую я посмотрел, подумал — "О, так это ж состояния и переходы между ними, а не применить ли мне State" и применил, съэкономив кучу времени на разработке и поддержке
Re[3]: [C++] о паттернах
От: Pavel Dvorkin Россия  
Дата: 23.05.11 08:37
Оценка: +3 :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А во-вторых, чтобы избежать ненужных спекуляций — я вполне понимаю, что какое бы воплощение означенной идеи я ни предложил, всё равно найдётся кто-нибудь, кто начнёт мне доказывать, что я-де "использовал паттерн синглтон". Здесь будет тонкое передёргивание, от которого мне отвертеться не получится. Дело в том, что я не использую паттерны так, как это иной раз себе представляют (сначала посмотрел справочник, потом подобрал паттерн, потом придумал воплощение в соответствии с каноном), а лишь постфактум обозначаю выбранное решение в терминах "паттернов" — так, для краткости дальнейших коммуникаций. Не было бы паттернов, нашлись бы другие способы "сокращения количества слов". Но сугубо внешне, по свои результатам, эти два процесса не отличимы один от другого: в обоих случаях получится, хе-хе, синглтон и его словесное описание. Для выяснения различий останется апеллировать к стилям мышления, и прочей заведомо спекулятивной лабуде.


ИМХО здесь имеет место некоторое отличие между программистской культурой нынешних времени и культурой нашего поколения.

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

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

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

Подход "от паттернов" прямо противоположный. Есть набор рецептов, которые надо попробовать употребить в данной задаче
Иными словами, давайте искать подходящую точку, где решение есть, и всеми силами сводить нашу задачу к этой (этим) точке(ам). Если сведется — хорошо, а иначе... Иначе придется все же искать решение , а к этому не все способны. Все равно как конструктору, умеющему собирать из деталей, имеющихся на рынке, предложить самому спроектировать и разработать новую деталь.
With best regards
Pavel Dvorkin
Re[4]: [C++] о паттернах
От: Abyx Россия  
Дата: 23.05.11 09:04
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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


PD>Подход "от паттернов" прямо противоположный. Есть набор рецептов, которые надо попробовать употребить в данной задаче

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

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

например "глобальная переменная" — замечательно. для проблемы X это решение которое дает простой и выразительный код.
через некоторое время проблемы X превращается в проблемы X+1 и что-то становится не так. Ищем новое решение?

в случае с паттернами всё иначе. применяя паттерн, мы знаем что он сравнительно хорошо подходит для проблемы X, еще лучше подходит для проблемы X+1, полезен для смежной проблемы Y, но вреден для проблемы X + (0 + 1i). Да, это сложное универсальное решение, а усложнение кода плохо. Зато оно обещает что при ожидаемом изменении задачи ситуация не ухудшится.

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

А процесс решения проблемы выглядит не так что мы смотрим решали мы такую задачу или нет, если да- берем предыдущее решение,
а мы должны предвидеть в каком направлении проблема может меняться, и должны выбрать если точку — то находящуюся в направлении изменений проблемы.
In Zen We Trust
Re[5]: [C++] о паттернах
От: Pavel Dvorkin Россия  
Дата: 23.05.11 09:17
Оценка: +1
Здравствуйте, Abyx, Вы писали:

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


Так ведь до появления этого понятия (паттерн) находили же...
А потом — почему одно решение ? Я об этом ничего не говорил. Вполне возможно, что и несколько, и надо выбрать лучшеее в применении к данной задаче. А может быть, ни одно из ранее известных мне решений все же не годится, и несмотря на соблазн его применить (ну очень уж задача похожа), все же лучше их не применять, а искать новое решение.

A>например "глобальная переменная" — замечательно. для проблемы X это решение которое дает простой и выразительный код.

A>через некоторое время проблемы X превращается в проблемы X+1 и что-то становится не так. Ищем новое решение?

Не очень серьезный аргумент.

A>в случае с паттернами всё иначе. применяя паттерн, мы знаем что он сравнительно хорошо подходит для проблемы X, еще лучше подходит для проблемы X+1, полезен для смежной проблемы Y, но вреден для проблемы X + (0 + 1i). Да, это сложное универсальное решение, а усложнение кода плохо. Зато оно обещает что при ожидаемом изменении задачи ситуация не ухудшится.


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


A>А процесс решения проблемы выглядит не так что мы смотрим решали мы такую задачу или нет, если да- берем предыдущее решение,

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

Ты изложил другими словами процесс как я его определяю. Именно искать решение, сообразуясь с задачей и прежними решениями (паттернами). Вот только ты не сказал, что будешь делать, если (в твоей терминологии) не найдем никаких вхождений точки-проблемы в области всех паттернов. А так, все верно, и ничему из того, что я сказал, это не противоречит.
With best regards
Pavel Dvorkin
Re[4]: [C++] о паттернах
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 23.05.11 09:29
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Подход "от паттернов" прямо противоположный. Есть набор рецептов, которые надо попробовать употребить в данной задаче


это кто рекомендует такой подход? кого клеймим?
Re[6]: [C++] о паттернах
От: Abyx Россия  
Дата: 23.05.11 09:29
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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


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

впрочем хорошо бы еще узнать, а вдруг такой паттерн есть, просто я о нем еще не знаю.
In Zen We Trust
Re[5]: [C++] о паттернах
От: Pavel Dvorkin Россия  
Дата: 23.05.11 09:33
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>это кто рекомендует такой подход? кого клеймим?


Да то и дело проскальзывает . "здесь надо употребить паттерн X"
With best regards
Pavel Dvorkin
Re[7]: [C++] о паттернах
От: Pavel Dvorkin Россия  
Дата: 23.05.11 09:38
Оценка:
Здравствуйте, Abyx, Вы писали:

A>грустно вздохнем, предвидя кучу проблем в будущем, и напишем как придумается. как будто могут быть варианты %)


А что, их не может быть ?

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


Гарантии нет, верно. А что делать-то ? Задача ранее неизвестная, решение придумывать все равно придется... Окажется удачным — будет новый "паттерн" (для меня). Окажется неудачным — будет новый "паттерн", но придуманный не мной.

A>впрочем хорошо бы еще узнать, а вдруг такой паттерн есть, просто я о нем еще не знаю.


Серьезно. Согласен. В переводе на мой язык : а вдруг для этой точки есть хорошее решение, а я о нем не знаю. Может быть. Век живи — век учись.
With best regards
Pavel Dvorkin
Re[6]: [C++] о паттернах
От: Abyx Россия  
Дата: 23.05.11 09:45
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Odi$$ey, Вы писали:


OE>>это кто рекомендует такой подход? кого клеймим?


PD>Да то и дело проскальзывает . "здесь надо употребить паттерн X"


так если действительно надо?

конечно бывает что говорят "здесь надо употребить паттерн X", а на самом деле паттерн Х там применять не надо, но паттерн-то чем виноват?
In Zen We Trust
Re[6]: [C++] о паттернах
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 23.05.11 09:50
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Да то и дело проскальзывает . "здесь надо употребить паттерн X"


разве это тоже самое что

PD>Есть набор рецептов, которые надо попробовать употребить в данной задаче


Re[7]: [C++] о паттернах
От: Pavel Dvorkin Россия  
Дата: 23.05.11 11:11
Оценка:
Здравствуйте, Abyx, Вы писали:


PD>>Да то и дело проскальзывает . "здесь надо употребить паттерн X"


A>так если действительно надо?


A>конечно бывает что говорят "здесь надо употребить паттерн X", а на самом деле паттерн Х там применять не надо, но паттерн-то чем виноват?


Да не виноват он ни в чем, прочти еще раз мой первый ответ. Он — вполне корректное решение некоей задачи, вот и все.
With best regards
Pavel Dvorkin
Re[7]: [C++] о паттернах
От: Pavel Dvorkin Россия  
Дата: 23.05.11 11:18
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

PD>>Да то и дело проскальзывает . "здесь надо употребить паттерн X"


OE>разве это тоже самое что


PD>>Есть набор рецептов, которые надо попробовать употребить в данной задаче


OE>


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

Вот надо тебе прибор какой-то сделать. Если ты его спроектируешь, а потом решишь, что вот тут нужно использовать паттерн "шуруп и гайка" — никаких возражений нет. А вот если ты ходишь и ищешь, из каких бы шурупов , болтов, гаек и т.п. его собрать — значит, анализ явно отсутствует
With best regards
Pavel Dvorkin
Re[5]: [C++] о паттернах
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 23.05.11 13:47
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Подход "от паттернов" прямо противоположный. Есть набор рецептов, которые надо попробовать употребить в данной задаче

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

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


Замечательное решение можно найти, имея следующее: максимально возможное знание о своём контексте, знание инструмента, некоторую формальную теоретическую подготовку и определённый опыт, который подскажет, как именно нужно интерпретировать условия своего контекста. Плюс некоторая независимость характера, но это, ИМХО, свойственно любому инженеру. При таких вводных, поверь на слово, можно найти замечательное решение, ничего не зная о паттернах. Собственно, свидетельством тому сама книга GoF: они ведь не выдумывали эти самые паттерны, а только выделяли их в тех решениях, которые им удалось просмотреть. Следовательно, во-первых, кто-то эти самые паттерны придумал, ничего при этом не зная о "паттернах", а во-вторых, эти самые придумщики не были ни гениями, ни какими-то штучными талантами — раз одни и те же паттерны воплощались несколькими разными людьми независимо друг от друга. Как там GoF характеризует авторов паттернов? "Хорошие инженеры", кажется так.

A>например "глобальная переменная" — замечательно. для проблемы X это решение которое дает простой и выразительный код.


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

A>через некоторое время проблемы X превращается в проблемы X+1 и что-то становится не так. Ищем новое решение?


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

A>в случае с паттернами всё иначе. применяя паттерн, мы знаем что он сравнительно хорошо подходит для проблемы X, еще лучше подходит для проблемы X+1, полезен для смежной проблемы Y, но вреден для проблемы X + (0 + 1i). Да, это сложное универсальное решение, а усложнение кода плохо. Зато оно обещает что при ожидаемом изменении задачи ситуация не ухудшится.


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

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


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

A>А процесс решения проблемы выглядит не так что мы смотрим решали мы такую задачу или нет, если да- берем предыдущее решение,

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

Это всё правильно, вопрос только в умении предсказывать изменения контекста.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: [C++] о паттернах
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 23.05.11 14:06
Оценка: 10 (1) +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>ИМХО здесь имеет место некоторое отличие между программистской культурой нынешних времени и культурой нашего поколения.


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


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

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


По сути, насколько я понимаю, с паттернами всё ещё гаже. Несколько разных инженеров занимаясь какими-то проблемами пришли к каким-то похожим решениям. Потом прискакали GoF и свели вместе некоторый общий каркас выработанных решений и некую "суперпозицию" описания проблем, с которыми столкнулись инженеры. То есть паттерны в их литературном воплощении — по определению сильно вторичный продукт. Полезный в определённом смысле, но вторичный. Соответственно, они лучше всего "работают" именно как обзорный материал, непосредственно их использовать подчас труднее, чем синтезировать свои собственные решения — чтобы адекватно "использовать" паттерн нужно знать намного больше, чем написано в книге, но если ты всё это знаешь, то книга по паттернам не нужна. Коллапс однако.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: [C++] о паттернах
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 23.05.11 14:15
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

ГВ>>Нельзя даже пытаться это делать.


OE>ну а я сначала прочитал про State, и только потом через какое-то время попалась задача, на которую я посмотрел, подумал — "О, так это ж состояния и переходы между ними, а не применить ли мне State" и применил, съэкономив кучу времени на разработке и поддержке


Обрати внимание на последовательность, описание State стало для тебя только шпаргалкой, про которую ты вовремя вспомнил. Собственно, это и есть, наверное, самый приемлемый способ "использования" паттернов: ассоциативное сопоставление. Правда, что-то мне подсказывает, что уж до чего-чего, а до State додуматься просто до элементарного.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[5]: [C++] о паттернах (доп.)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 23.05.11 14:44
Оценка:
ГВ>А с алгоритмами всё вообще не так обстоит: с одной стороны у них есть достаточно точные оценки параметров, а с другой — синтез алгоритмов гораздо сложнее синтеза паттернов. Хотя бы потому, что паттерн вовсе не претендует на решение проблемы — это только так, приблизительное направление, зачастую сумбурно и противоречиво описанное.

Собственно, разница между паттернами и алгоритмами — это примерно как разница между советами и предписаниями.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.