Рекомендация книги OOAD: от теории к практике

Я стремлюсь стать хорошим OO-разработчиком. ООП меня интригует, потому что я понимаю закономерности, знаю, почему композиция дает больше гибкости, чем наследование, и больше такой мудрости. Однако я пришел к выводу, что знаю, как реализовать фабрику синглтона, но не знаю, как придумать надежный объектно-ориентированный дизайн.

у меня куча книг

  1. Шаблоны проектирования от GoF
  2. Антипаттерны Браун и др.
  3. Рефакторинг Фаулера
  4. Код завершен 2

Это могут быть очень хорошие книги, но они не учат вас создавать приложения. Меня часто парализуют некоторые очень простые решения (пример). Я ищу книгу, которая учит, когда и почему. Есть много книг о молотках и гвоздях, но я еще не нашел книги, которая рассказала бы вам что-нибудь об их практической взаимосвязи.

Какая книга больше всего помогла вам стать уверенным в себе объектно-ориентированным архитектором/дизайнером?


person Community    schedule 29.01.2010    source источник
comment
Пожалуйста, отметьте вопросы опроса сообщества вики.   -  person danben    schedule 29.01.2010
comment
Сомневаюсь, что это реальный опрос. Некоторые ответы содержат более одной рекомендации. Может быть, лучше пусть это решает система?   -  person Exception e    schedule 29.01.2010
comment
система решает это? Какая? Вы, как владелец, можете пометить вопрос как вики сообщества. Вы редактируете вопрос, щелкаете вики сообщества, и мы можем более легко редактировать ответы, чтобы создать отличный список ответов.   -  person S.Lott    schedule 29.01.2010
comment
Я посмотрел вики сообщества на мета. Там указано, что кроме модераторов или оригинального автора система могла автоматически превращать вопрос в вики по некоторым характеристикам. Тем не менее, я не вижу никакого вреда ни в том, ни в другом, поэтому я превратил его в вики сообщества по вашей просьбе :-)   -  person Exception e    schedule 29.01.2010
comment
просто точность: книги, которые вы перечислили, вовсе не о OOAD, а об ООП. В частности, они позволяют обойти идиосинкразии, связанные с языком, который вы используете, и тот факт, что есть много вещей, которые нелегко сделать на таких языках при переводе из OOAD в OOP из-за их недостатков. Большинство шаблонов проектирования являются обходными дефектами 3GL. Я голосую за +1 человека, рекомендовавшего создание объектно-ориентированного программного обеспечения Мейера: это о OOAD. Не то чтобы это плохая книга, но, как вы заметили, она вовсе не о OOAD.   -  person SyntaxT3rr0r    schedule 18.02.2010
comment
Вы не можете просто ожидать, что прочитаете книгу и не примените ее на практике. На сегодняшний день лучшим ресурсом для обучения и получения практической практики с отличными заданиями является курс под названием Master Object Oriented Design in Java, предлагаемый на Udemy.com. Обычно у них есть рекламные акции, или вы, вероятно, можете найти код купона в Интернете, чтобы записаться на курс. Удачи!   -  person Horse Voice    schedule 20.01.2015


Ответы (10)


Лучшая книга, которую я когда-либо читал об объектно-ориентированном программировании, — это Бертран Мейер Object Oriented Software Construction.

Он огромный, но он был очень полезен для меня. Он охватывает все аспекты объектно-ориентированного проектирования IMVHO.

person Community    schedule 29.01.2010
comment
Не могли бы вы сказать мне, чего ожидать от книги Бертрана Мейера? Я читал, что вы можете рассматривать это как обоснование языка Эйфеля. Я не знаю Эйфеля, но, например, он показывает важность делегатов и то, что они являются гражданами первого класса Эйфеля, или он действительно рассматривает такие темы, как обнаружение классов и обязанностей? - person Exception e; 29.01.2010
comment
Эйфель — очень второстепенная тема в его книге. Несмотря на то, что большинство примеров написано на Eiffel, я думаю, у вас не должно возникнуть затруднений при его чтении. Некоторые функции, конечно, специфичны для Eiffel (в частности, встроенные функции Design-by-Contract), но они прекрасно читаются и будут полезны на любом языке, над которым вы работаете. (Кстати, я тоже не знаю Эйфеля). - person Alexander Poluektov; 29.01.2010

  1. "Создание объектно-ориентированного программного обеспечения", Бертран Мейер

Самая фундаментальная работа по объектной ориентации из когда-либо опубликованных. Это абсолютно необходимая книга для каждого "объектно-ориентированного" программиста.

2. "Объектно-ориентированный анализ и проектирование с помощью приложений " Грэди Буч и др.

Не такая формальная, как книга Мейера, но эта книга может открыть вам глаза на многие вопросы объектно-ориентированного мира и разработки программного обеспечения в целом.

3. "Шаблоны проектирования: элементы повторно используемого объектно-ориентированного программного обеспечения» Эриха Гаммы и др.

Это знаменитая книга "Банда четырех" о шаблонах проектирования.

4. "Рефакторинг: улучшение дизайна существующего кода "Мартин Фаулер и др.

Это еще одна классическая книга. Первая часть прекрасно описывает многие проблемы, с которыми может столкнуться современный разработчик программного обеспечения в своей работе: запахи кода, читабельность и производительность, недостатки преждевременной оптимизации и многие другие темы.

5. "Мышление на языке Java" Брюса Экеля

Эта книга может помочь многим новичкам не только в языке Java, но и в объектно-ориентированном мышлении.

6. "Прикосновение к классу: научиться хорошо программировать с помощью объектов и контрактов" Бертрана Мейера

Отличный учебник известного автора.

person Sergey Teplyakov    schedule 29.01.2010
comment
Предупреждение о Буче. Книга написана в манере высокомерной (в этой книге он склонен писать с использованием грамматики и лексики, предназначенных для того, чтобы произвести впечатление на интеллигенцию), что делает ее очень трудной для чтения. Содержание больше связано с изложением проблем с дизайном, а не с демонстрацией реальных методов их решения. Так что у него не так много эвристик. - person HandyGandy; 29.01.2010
comment
@HandyGandy: именно поэтому вы рекомендовали разработку объектно-ориентированных приложений C ++ с использованием метода Буча, поскольку он заполнит этот пробел? - person Exception e; 29.01.2010

Я полностью понимаю вашу ситуацию. Также владейте тремя из этих книг ;) Я бы посоветовал издание Head First. Объектно-ориентированный анализ и проектирование. Это направит вас на верный путь. Книга GoF великолепна, но бесполезна, пока вы не усвоите основы, а книга Head First позаботится об этом. Ваше здоровье :)

person Peter Perháč    schedule 29.01.2010
comment
Thnx, это заставляет меня чувствовать, что я не одинок. Я всегда думал, что серия Head First должна была дать слишком простое, хотя и мягкое введение. Я рассмотрю это предложение! - person Exception e; 29.01.2010
comment
Да, сначала пройдите через Head First OOAD. Какую книгу вы в итоге купили? - person Kumar Vaibhav; 13.05.2016

На самом деле программирование — это большая помощь, чем чтение о программировании.

«парализован некоторыми очень простыми решениями» — это симптом более глубокой проблемы — чрезмерной инженерии. Пока вы не создадите много вещей, вы действительно не знаете, какие решения важны, а какие нет.

Лучший способ получить необходимый опыт — построить много вещей.

Код Ката очень и очень важен. http://slott-softwarearchitect.blogspot.com/search/label/code-kata

Кроме того, я собрал кучу кода, который использовал, в один большой проект. http://homepage.mac.com/s_lott/books/oodesign.html

person S.Lott    schedule 29.01.2010
comment
Хотя это не книга, они выглядят как хорошо задокументированные и хорошо мотивированные варианты использования. спасибо за указатель - person Exception e; 29.01.2010
comment
@S.Lott: Я хотел бы узнать ваше мнение о OOAD (не забывая о вопросе ОП). Как вы думаете, есть ли в ОО жизнь? Я думаю, что все становится функциональным, в конце концов. И у людей до сих пор нет одного хорошего способа написания объектно-ориентированного кода. И это заставляет людей бороться за стиль ООП. Разделение проблем/OCP и т. д., кажется, хорошо подходит для функционального стиля (примечание: у меня вообще нет опыта работы с функциональными прог. теряет свою ценность). Ваше слово поможет :) - person shahkalpeshp; 29.01.2010
comment
Функциональные программные системы также сталкиваются с проблемами крупномасштабного проектирования и сокрытия информации. Книга Design Patterns была охарактеризована некоторыми как способ выполнения FP в OO. Что ж, я все еще жду соответствующую книгу о сокрытии объектно-ориентированной информации и контролируемом повторном использовании в FP... - person Pontus Gagge; 29.01.2010
comment
ОО не заменяется функциональным. Я занимаюсь функциональным объектно-ориентированным программированием. Я активный пользователь объектов без состояния в Python. Не существует одного хорошего способа сделать что-либо, так что это не возражение против ООП. ООП не теряет ценности ни в каком смысле этого слова. Вы изучаете функциональность, но вы все еще знаете об объектах и ​​по-прежнему будете использовать их в функциональном стиле. - person S.Lott; 29.01.2010
comment
@Exception e: книга по коду ката - это глупо. Он устаревает каждые несколько часов. Другая ссылка является книгой. Я не понимаю вашего комментария и не понимаю, почему книга так важна. Книги — это веб-сайты, запечатанные в бумагу, не так ли? - person S.Lott; 29.01.2010
comment
@S.Lott: я не говорю, что OO будет заменен функциональным. Кроме того, что вы подразумеваете под использованием объектов в функциональном стиле (вы говорите здесь о чем-то вроде LINQ?) Любой пример объектно-ориентированного программирования (в смысле классов и подклассов и т. д.) с функциональным стилем поможет мне понять это. Большое спасибо, что написали. - person shahkalpeshp; 29.01.2010
comment
@shahkalpesh: (1) Этот вопрос не входит в задачу. (2) Комментарии не являются простым способом решить эту проблему. Вопрос FP/OO уже задавался на Stack Overflow, сначала найдите и прочитайте эти вопросы. Не стесняйтесь добавлять комментарии, чтобы получить больше информации. При необходимости рассмотрите возможность задать новый вопрос по этой теме FP/OO. - person S.Lott; 29.01.2010
comment
@ S.Lott: вы читали статью Мейера об объектно-ориентированном программном обеспечении, например, несколько человек с большим количеством голосов, чем вы предложили, и думаете ли вы, что это веб-сайты, напечатанные на бумаге? (Я полагаю, вы не хотите обсуждать это в комментарии). Кроме того, считаете ли вы, что ваши работы лучше объясняют OOA/D, чем высоко оцененная книга Мейера "Объектно-ориентированное проектирование программного обеспечения"? - person SyntaxT3rr0r; 18.02.2010
comment
@WizardOfOdds: Да, я читал книгу Мейера. Дважды. Нет, это довольно стабильный, статичный материал о том, как хорошо делать объектно-ориентированный подход, исходя из фундаментальных принципов. Отсюда необходимость изобретать новый язык. В моей книге не делается больших усилий для объяснения OOA/D; это серия упражнений, основанных на некоторых предварительных знаниях ООП, и они просто погружаются и делают это. Это некоторый рассказ о том, какая проблема решается, и некоторые детали дизайна. Соберите кучу вещей. Учитесь, делая. - person S.Lott; 18.02.2010

Роберт С. Мартин «Гибкая разработка программного обеспечения: принципы, шаблоны и практика», в которой объясняются принципы объектно-ориентированного программирования.

Эрик Эванс: «Дизайн, ориентированный на предметную область» посвящен тому, как сделать хороший дизайн, соответствующий вашей бизнес-задаче.

Мартин Фаулер: «Шаблоны архитектуры корпоративных приложений» для основных принципов архитектуры предприятия.

person bertolami    schedule 29.01.2010


Единственный способ узнать, надежен ли дизайн, — это реализовать его. Не существует единой книги, которая научит вас создавать реализуемые проекты, все зависит от опыта и таланта. Тем не менее, я поддерживаю голосование за книгу Бертрана Мейера — просто имейте в виду, что она не превратит вас в бога объектно-ориентированного дизайна.

person Community    schedule 29.01.2010

Крейг Ларман Применение UML и шаблонов резюмировал многое о чему я научился на собственном опыте. Что мне в нем нравится, так это то, что он затрагивает все аспекты проектирования программного обеспечения, включая такие вещи, как итеративный дизайн и разработка. Не обращайте слишком пристального внимания на использование UML: описания проекта — это средство достижения цели, и я нашел подход Лармана довольно прагматичным. Вы не можете просто кодировать: вы должны сообщать о своих намерениях (и понимать, что нужно). UML и хорошо спроектированный, хорошо прокомментированный код являются одними из средств достижения этой цели.

И, конечно же, как отмечают другие: ни одна книга не сделает вас хорошим разработчиком или дизайнером. Но это может помочь ускорить процесс.

person Pontus Gagge    schedule 29.01.2010

Для начала я предлагаю Head First Объектно-ориентированный анализ и проектирование. Он поможет вам создать объектно-ориентированное приложение простым интуитивным пошаговым методом.

person Community    schedule 18.02.2010

Хотя я склоняюсь к Rational UP, я обнаружил, что эти два дают много информации об объектно-ориентированном проектировании.

  • Применение UML и шаблонов - Крейг Ларман
  • UML 2 и унифицированный процесс: практический объектно-ориентированный анализ и проектирование - Джим Арлоу и Ила Нойштадт
person Community    schedule 29.01.2010