Главная

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

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

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

Я обладаю книгой последнего (2018 г.) издания. Удивительно, что за время с первоначального выхода русскоязычного издания не были исправлены ошибки перевода и выполнено приведение к большей доходчивости. Переводчику пришлось нелегко - язык авторов тяжелый, но как бы то ни было: английский текст доходчивей, когда погружаешься в детали. Что касается содержания. Мир с момента выхода книги изменился, индустриальными стандартами являются Java и С++, в то время как книга содержит очень правильный, но неизвестный в деталях широкой общественности язык Smalltalk (и если основы С++ так или иначе известны всем проффессиональным разработчикам, то Smalltalk нет). Много воды, типа "реализация используется в библиотеке XXX системы OSX 1992 года". Это, конечно, здорово (мы люди разумные и понимаем что оно где-то используется), но вряд ли кто из читателей, не то что пользовался, но и видел, данную библиотеку.

Напоминает стиль диссертации, который здесь неуместен. Гораздо нагляднее было сослаться на свой же пример редактора Lexy из начала книги. К примерам на C++ есть вопросы (использование инициализаторов в конструкторах без обьяснений, разделение заголовка и реализации), все это может быть непривычно. Авторы предлагают 2 варианта чтения книги, как справочника и как средство изучения, для чего нужны шаблоны с последующим переходом к справочнику. На мой субъективный взгляд, читать надо именно как справочник, учиться применению шаблонов по редактору Lexi, новичка запутает, для опытного человека это потеря времени.

По самим шаблонам. Совершенно ужасное описание singleton'a с не менее неудачным названием. Не акцентируется внимание на приватный конструктор у singleton'a. По наблюдателю, с одной стороны, описано различие вариантов push и pull. Но выводы, о том что push модель способствует увеличения связанности, в то время как pull, нет, спорны. Так же игнорируется тот факт, что все программы ныне так или иначе многопоточны, что накладывает некоторые ограничения на шаблоны (например, наблюдатель с pull моделью в многопоточном мире имеет побочные явления).

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

Роберт Фатхуллин

Статья Роберт Фатхуллин

Backend Developer