Программистское
Под катом много мата. Накипело.
Лектор по психологии труда - эдакий старичок-профессор толкует (цитирую по памяти): "концепция индивидуального стиля деятельности заключается в том, что каждый индивид достигает максимальной производительности, если имеет свободу варьировать трудовую деятельность под свой темперамент и индивидуальные черты характера. Например, ткачиха-холерик быстро бегает от станка к станку, ткачиха-флегматик двигается медленнее, но более рассчетливо, в результате обе достигают высокой произволительности. Чего бы не было, если бы они пытались подражать друг другу."
Я это к чему. У нас, в программировании, в последние годы, куда ни плюнь - в очередной пиздоблядский злоебучий стандарт попадешь. Жопу почесать нельзя без того, чтобы не вляпаться в очередной RPC, блядь. И как же они заебали этой модой на тотальную стандартизацию, чтобы пизду им только во сне видеть.
Паттерны, блядь, придумали. Напишут два слва, придумают название по-красивше и, сидят довольные, как кусок говна на люстре, вовсю свою писульку рекламируют, хуем помахивая. И ведь, в чем пиздопроебина ниже ватерлинии: особливо любят на паттерны дрочить всякие гандоны, которые какой-нить двоичный поиск за неделю не напишут. Даже у нас на работе на что публика сурьезная - и то нет-нет да про это дело упомянет... А уж в инете жЫвотных от прораммирования - как блядей в кутузке после рейда озабоченных ментов...
Лектор по психологии труда - эдакий старичок-профессор толкует (цитирую по памяти): "концепция индивидуального стиля деятельности заключается в том, что каждый индивид достигает максимальной производительности, если имеет свободу варьировать трудовую деятельность под свой темперамент и индивидуальные черты характера. Например, ткачиха-холерик быстро бегает от станка к станку, ткачиха-флегматик двигается медленнее, но более рассчетливо, в результате обе достигают высокой произволительности. Чего бы не было, если бы они пытались подражать друг другу."
Я это к чему. У нас, в программировании, в последние годы, куда ни плюнь - в очередной пиздоблядский злоебучий стандарт попадешь. Жопу почесать нельзя без того, чтобы не вляпаться в очередной RPC, блядь. И как же они заебали этой модой на тотальную стандартизацию, чтобы пизду им только во сне видеть.
Паттерны, блядь, придумали. Напишут два слва, придумают название по-красивше и, сидят довольные, как кусок говна на люстре, вовсю свою писульку рекламируют, хуем помахивая. И ведь, в чем пиздопроебина ниже ватерлинии: особливо любят на паттерны дрочить всякие гандоны, которые какой-нить двоичный поиск за неделю не напишут. Даже у нас на работе на что публика сурьезная - и то нет-нет да про это дело упомянет... А уж в инете жЫвотных от прораммирования - как блядей в кутузке после рейда озабоченных ментов...
no subject
no subject
no subject
ааа... понял - для ПРАВИЛЬНОЙ... а там небось наворотили говна... а?
[ наследованием и так далее было вполне себе паттерном. Просто слова тогда ещё не придумали. ]
Так ведь придумали же: "виртуальные функции", "наследование". А это называется плагиат чистой воды: переименовать и выдать за открытие
no subject
> ааа... понял - для ПРАВИЛЬНОЙ... а там небось наворотили говна... а?
Ну если брать в качестве примера ту реализацию, которую вы привели в стёртом комменте -- то до правильной ей очень далеко. Во-1ых не закрыты конструктор копирования, деструктор и оператор присваивания. Во-2ых никак не определён порядок уничтожения синглтона. В-3их - оно вообще не заработает, потому что вы забыли выполнить присваивание в getInstance().В-4ых - а почему именно так? Ведь можно вместо проверки указателя на null использовать статические переменные -- или класса, или функции.
А что начинает твориться, когда есть несколько зависимых синглтонов...
> Так ведь придумали же: "виртуальные функции", "наследование". А это
> называется плагиат чистой воды: переименовать и выдать за открытие
не помню, что кто-то выдавал эти приёмы за своё открытие. Да и в книге GOF нигде не говориться, что описанные там паттерны -- изобретение авторов. Наоборот, во вступлении прямым текстом пишут, что это не так.
no subject
[ Во-1ых не закрыты конструктор копирования, деструктор и оператор присваивания. ]
Конструктор закрыт
[ Во-2ых никак не определён порядок уничтожения синглтона. ]
Вот потому то деструктор вообще не написан - его реализация зависит от конкретного случая. Если надо, чтобы уничтожался он овнером, то одно, если по счетчику ссылок - другое и т.п. Аналогично с конструктором присваивания.
[ потому что вы забыли выполнить присваивание в getInstance().]
А что в коде, составленному после чтения болтовни по паттернам, я бы ни в коем случае не опачатался бы? :) Так же точно опечатался бы - уж такая работа, что опечатки считаются в порядке вещей.
[ В-4ых - а почему именно так? ]
А почему не так? Работает - и ладно.
[ Ведь можно вместо проверки указателя на null использовать статические переменные -- или класса, или функции. ]
Можно. Можно вообще написать еще 10 вспомогательных классов и красивенькую иерархию в розе нарисовать :) Но это если платят за строки, а не за сроки :)
[ А что начинает твориться, когда есть несколько зависимых синглтонов... ]
А что начинает твориться? :)
Вы так и не ответили на мой вопрос. Вот ввели понятие "синглтон", описали. КАК это помогает производственному процессу? Вы сказали про грабли - на КАКИЕ грабли мешает наступать и почему?
[ Наоборот, во вступлении прямым текстом пишут, что это не так. ]
Ну и зачем новые названия для старых понятий? Что дают новые слова??
no subject
Только обычный, а не копирования.
> Вот потому то деструктор вообще не написан - его реализация зависит от
> конкретного случая. Если надо, чтобы уничтожался он овнером, то одно,
> если по счетчику ссылок - другое и т.п. Аналогично с конструктором
> присваивания.
Конкретных случаев не так уж и много. И вполне полезно их рассмотреть в одном месте во избежание различных граблей. У тех же Влислидеса и Александреску примеров таких граблей именно для синглетона приведено немало.
> А что в коде, составленному после чтения болтовни по паттернам, я бы ни
> в коем случае не опачатался бы? :)
Да стебусь я слегка :)
> А почему не так? Работает - и ладно.
Именно, что работает. А остальные варианты работают далеко не всегда. И если бы я в своё время не прочитал подробного разбора синглетона как шаблона, то непременно бы реализовал бы его на статическом члене класса. Тем более, что строк там меньше.
> А что начинает твориться? :)
Начинает играть неопределённый порядок уничтожения объектов. Сам на такое натыкался, очень неприятный баг.
> Вы так и не ответили на мой вопрос. Вот ввели понятие "синглтон",
> описали. КАК это помогает производственному процессу? Вы сказали про
> грабли - на КАКИЕ грабли мешает наступать и почему?
1. Словарная функция.
2. Грабли у Александреску и Влислидеса, делать конспект у меня охоты нет, уж извините :)
3. Опыт накапливается. Не нравится вам какой-то шаблон -- не используйте. Мне вон Visitor не нравится, так я без него и обхожусь.
> Ну и зачем новые названия для старых понятий? Что дают новые слова??
А зачем математики определения вводят? Вон Ньютон уже вполне спокойно оперировал пределами и производными. Хотя определения появились сильно позже. По вашей логике надо было просто тщательно курить "Флюкции и флюенты", а не страдать чепухой с формальными определениями.
no subject
А зачем? Защита - не самоцель, при остром желании в одном месте можно ведь и memcpy поюзать.
[ У тех же Влислидеса и Александреску примеров таких граблей именно для синглетона приведено немало. ]
И как ПАТТЕРН позволяет грабли обойти? Пример?
[ И если бы я в своё время не прочитал подробного разбора синглетона как шаблона, то непременно бы реализовал бы его на статическом члене класса. Тем более, что строк там меньше. ]
Объясняй, давай, в чем бонус.
[ Начинает играть неопределённый порядок уничтожения объектов. Сам на такое натыкался, очень неприятный баг. ]
При чем тут паттерн?
[ 1. Словарная функция. ]
И только :)
[ 2. Грабли у Александреску и Влислидеса, делать конспект у меня охоты нет, уж извините :) ]
Хоть 1 пример граблей с пояснениями, почему именно ПАТТЕРН от именно этих граблей спасает.
Ошибки разные можно годами описывать - было бы желание :)
[ А зачем математики определения вводят? ]
Затем же, зачем программеры вводят функции - чтобы диповать информацию, обозначить часто встерчающуюся комбинацию слов одним словом.
no subject
no subject
no subject
Не паттерн, а книжка про паттерны. В ней есть комментарии: вот здесь такие-то грабли, не наступите, типовые способы их обхода такие:...
> Объясняй, давай, в чем бонус.
А может, ты сам Александреску почитаешь?
no subject
may be там про те грабли, которые давно знакомы...
no subject
Так вот, для многих из этих задач синглтон как глобальная статическая переменная непригоден. Это и есть грабли.
no subject
[ Высший пилотаж - это задавать отношения между синглтонами ]
Ну если это высший пилотаж, старое поколение программистов может спать спокойно, не изучая паттерны :)
no subject
no subject
no subject
no subject
no subject
(no subject)
no subject
no subject
no subject
no subject
no subject
(no subject)
no subject
«Синглтон» произносится быстрее, чем «глобальный статический объект!» :Р
no subject