Роберт

Backend-разработчик
Категории

Приемы объектно-ориентированного проектирования

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

Я обладаю книгой последнего(2018 г,) издания. Удивительно, что за время с первоначального выхода русскоязычного издания не были исправлены ошибки перевода и выполнено приведение к большей доходчивости.Переводчику пришлось нелегко - язык авторов тяжелый, но как бы то ни было: английский текст доходчивей, когда погружаешься в детали. Что касается содержания. Мир с момента выхода книги изменился, индустриальными стандартами являются Java и С++, в то время как книга содержит очень правильный, но неизвестный в деталях широкой общественности язык Smalltalk(и если основы С++ так или иначе известны всем проф разработчикам - то Smalltalk - нет). Много воды, типа "реализация используется в библиотеке XXX системы OSX 1992 года". Это, конечно, здорово (мы люди разумные и понимаем что оно где то используется) - но вряд ли кто из читателей этой библиотекой не то что пользовался, но и видел. Напоминает стиль диссертации, здесь неуместный. Гораздо нагляднее было сослаться на свой же пример редактора Lexy из начала книги. К примерам на C++ есть вопросы(использование инициализаторов в конструкторах без обьяснений, разделение заголовка и реализации) - все это может быть непривычно. Авторы предлагают 2 варианта чтения книги - как справочника и как средство изучения, для чего нужны шаблоны с последующим переходом к справочнику. На мой субъективный взгляд - читать надо именно как справочник, учиться применению шаблонов по редактору Lexi - новичка запутает, для опытного человека это потеря времени. По самим шаблонам - совершенно ужасное описание singleton'a с не менее неудачным названием. Не акцентируется внимание на приватный конструктор у singleton'a. По наблюдателю - с одной стороны, описано различие вариантов push и pull. Но выводы, о том что push модель способствует увеличения связанности, в то время как pull - нет - спорны. Так же игнорируется тот факт, что все программы ныне так или иначе многопоточны, что накладывает некоторые ограничения на шаблоны(например, наблюдатель с pull моделью в многопоточном мире имеет побочные явления).

Рекомендую читать, имея под рукой английское издание(нетрудно найти в сети). Это позволит не ломать голову над тем, что имел в виду переводчик(см трудности перевода). Несмотря на то, что описание недостатков заняло больше времени, чем достоинств - достоинств у книги гораздо больше, но читать как истину в последней инстанции не стоит.