Comments 15
Хм… С чего вы взяли, что автором книги является Боб Мартин? У меня перед глазами стоит книга «Принципы, паттерны и методики гибкой разработки на языка C#», Роберт С. Мартин, Мика Мартин. Да и по ссылке на озоне, которую вы привели, никаких Бобов там нету
Вариантом этого имени может также быть Руперт и уменьшительная английская форма Боб, а также Робин
via Wikipedia: Роберт
UFO just landed and posted this here
Конкретно в этой книге действительно много бердовых примеров. Особенно раздражает калька с 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.
Но проблема остается: многие ведь читают книгу, рассматривая ее как современный источник информации и не знают о том, что ее автор уже не столь категоричен в своих суждениях;)
Ну собственно по этой причине шарписты хуже плюсатых, потому что книги им пишут плюсатые. Но читать все же стоит!
UFO just landed and posted this here
LSP по своему определению говорит лишь о динамическом полиморфизме (вы сами пишите об иерархии классов), но это не единственный вид полиморфизма. Есть же еще и статический полиморфизм.
По вашему, нарушает ли этот код OCP:
Очевидно, что нет, но и принцип замещения Лисков здесь тоже не применим, поскольку T может быть чем угодно и не связан отношениями подтип/надтип. Вот и получается, что именно на основе полиморфизма (как более общего понятия) реализуется принцип OCP, а не на основе LSP.
По вашему, нарушает ли этот код OCP:
template<typename T> void draw(const T& t) {
// и много чего другого, для обеспечения рисования фигуры
t.Draw();
}
Очевидно, что нет, но и принцип замещения Лисков здесь тоже не применим, поскольку T может быть чем угодно и не связан отношениями подтип/надтип. Вот и получается, что именно на основе полиморфизма (как более общего понятия) реализуется принцип OCP, а не на основе LSP.
UFO just landed and posted this here
Мне кажется, что вы черезчур узко смотрите на понятие полиморфизма. Этот пример — это самый настоящий полиморфизм, но скорее основанный на статической утиной типизации, нежели на общности типов некоторой иерархии.
Да, и еще: это не метапрограммирование, это обобщенное программирование. Это несколько разные вещи.
… программисты .NET обычно хуже разбираются в методах разработки ПО, паттернах и принципах проектирования и т.п
Почему же это вброс на вентилятор? Это горькая правда.
Книга направлена на программистов на языке C#, но даже по меркам 2006-го года код в ней никуда не годится.
Критика интересная, конструктивная. Однако вполне очевидно, что книга не про C#, поэтому я бы не цеплялся так сильно к этому аспекту. Корни ее тянутся еще к «Designing Object-Oriented C++ Applications using the Booch Method». Отсюда, собственно, и фраза про начало 90-х, и перекочевавший пример про кофеварку. У Мартина, если присмотреться, вообще целые куски иногда из книги в книгу кочуют. Соглашусь, что многие примеры спорны с точки зрения языка, но, в общем-то, согласитесь, они читабельны и, что самое главное, доносят мысль автора. Зачем нужно было приплетать сюда шарп? На мой взгляд, ход исключительно маркетинговый — с одной стороны сына попиарить, с другой — охватить дополнительную аудиторию. По моим наблюдениям дотнетеры куда лояльнее относятся к книгам, у которых на обложке есть заветный «до-диез».
Если же рассуждать о культе карго, то, на мой взгляд, уж лучше пусть неопытный разработчик подражает Мартину, чем случайным сниппетам в интернете. С чего-то ведь надо начинать.
Sign up to leave a comment.
Критика книги Боба Мартина «Принципы, паттерны и методики гибкой разработки на языке C#»