Comments 15
Хм… С чего вы взяли, что автором книги является Боб Мартин? У меня перед глазами стоит книга «Принципы, паттерны и методики гибкой разработки на языка C#», Роберт С. Мартин, Мика Мартин. Да и по ссылке на озоне, которую вы привели, никаких Бобов там нету
Вариантом этого имени может также быть Руперт и уменьшительная английская форма Боб, а также Робин
via Wikipedia: Роберт
Конкретно в этой книге действительно много бердовых примеров. Особенно раздражает калька с java.События и делегаты в книге просто игнорируются.
> Книжка то толковая, никто не обещал каноничных трактовок SOLID и паттернов, какой был бы в ней толк?
А каких еще трактовок ожидать от *автора* этих принципов? В том-то и проблема книги, что описание принципов не слишком-то детальнее, описания из википедии. Так вопрос: зачем мне покупать книгу, если я могу с тем же успехом получить всю ту же информацию на вики;)
Я, например, от книги хочу большего контекста, при этом не вижу смысла описывать принципы в книге столь категоричным образом, чтобы потом писать еще две книги о их применимости.
Ведь с тем же open-closed принципом вообще беда. У того же Джона Скита есть заметка под названием The Open-Closed Principle, in review, в результате чего Роберт Мартин написал ответ «An Open and Closed Case», в котором английским по белому соглашается с тем, что былпьян молод и через чур категоричен в формулировке этого принципа:
Но проблема остается: многие ведь читают книгу, рассматривая ее как современный источник информации и не знают о том, что ее автор уже не столь категоричен в своих суждениях;)
А каких еще трактовок ожидать от *автора* этих принципов? В том-то и проблема книги, что описание принципов не слишком-то детальнее, описания из википедии. Так вопрос: зачем мне покупать книгу, если я могу с тем же успехом получить всю ту же информацию на вики;)
Я, например, от книги хочу большего контекста, при этом не вижу смысла описывать принципы в книге столь категоричным образом, чтобы потом писать еще две книги о их применимости.
Ведь с тем же open-closed принципом вообще беда. У того же Джона Скита есть заметка под названием The Open-Closed Principle, in review, в результате чего Роберт Мартин написал ответ «An Open and Closed Case», в котором английским по белому соглашается с тем, что был
2.They are “Closed for Modification”. The source code of such a module is inviolate. No one is allowed to make source code changes to it.
OK, as an isolated sound-bite, point two is a bit overstated. I mean: «no one is allowed...»? I'm not sure why I phrased it that way 17 years ago. I was young and impressionable back then, a mere 43 years old. So I can only chalk the stridence of that phrase up to my immaturity.
Но проблема остается: многие ведь читают книгу, рассматривая ее как современный источник информации и не знают о том, что ее автор уже не столь категоричен в своих суждениях;)
Ну собственно по этой причине шарписты хуже плюсатых, потому что книги им пишут плюсатые. Но читать все же стоит!
LSP по своему определению говорит лишь о динамическом полиморфизме (вы сами пишите об иерархии классов), но это не единственный вид полиморфизма. Есть же еще и статический полиморфизм.
По вашему, нарушает ли этот код OCP:
Очевидно, что нет, но и принцип замещения Лисков здесь тоже не применим, поскольку T может быть чем угодно и не связан отношениями подтип/надтип. Вот и получается, что именно на основе полиморфизма (как более общего понятия) реализуется принцип OCP, а не на основе LSP.
По вашему, нарушает ли этот код OCP:
template<typename T> void draw(const T& t) {
// и много чего другого, для обеспечения рисования фигуры
t.Draw();
}
Очевидно, что нет, но и принцип замещения Лисков здесь тоже не применим, поскольку T может быть чем угодно и не связан отношениями подтип/надтип. Вот и получается, что именно на основе полиморфизма (как более общего понятия) реализуется принцип OCP, а не на основе LSP.
Мне кажется, что вы черезчур узко смотрите на понятие полиморфизма. Этот пример — это самый настоящий полиморфизм, но скорее основанный на статической утиной типизации, нежели на общности типов некоторой иерархии.
Да, и еще: это не метапрограммирование, это обобщенное программирование. Это несколько разные вещи.
… программисты .NET обычно хуже разбираются в методах разработки ПО, паттернах и принципах проектирования и т.п
Почему же это вброс на вентилятор? Это горькая правда.
Книга направлена на программистов на языке C#, но даже по меркам 2006-го года код в ней никуда не годится.
Критика интересная, конструктивная. Однако вполне очевидно, что книга не про C#, поэтому я бы не цеплялся так сильно к этому аспекту. Корни ее тянутся еще к «Designing Object-Oriented C++ Applications using the Booch Method». Отсюда, собственно, и фраза про начало 90-х, и перекочевавший пример про кофеварку. У Мартина, если присмотреться, вообще целые куски иногда из книги в книгу кочуют. Соглашусь, что многие примеры спорны с точки зрения языка, но, в общем-то, согласитесь, они читабельны и, что самое главное, доносят мысль автора. Зачем нужно было приплетать сюда шарп? На мой взгляд, ход исключительно маркетинговый — с одной стороны сына попиарить, с другой — охватить дополнительную аудиторию. По моим наблюдениям дотнетеры куда лояльнее относятся к книгам, у которых на обложке есть заветный «до-диез».
Если же рассуждать о культе карго, то, на мой взгляд, уж лучше пусть неопытный разработчик подражает Мартину, чем случайным сниппетам в интернете. С чего-то ведь надо начинать.
Sign up to leave a comment.
Критика книги Боба Мартина «Принципы, паттерны и методики гибкой разработки на языке C#»