Книга посвящена проектированию объектно-ориентированных программ. Это не учебник, а рассказ программиста о том, как следует создавать программный код. Книга научит вас, как скомпоновать программное обеспечение, чтобы его высокая продуктивность не снижалась ни через месяц, ни через год. В ней показано, как создаются приложения, которые могут пользоваться успехом сегодня и адаптироваться к требованиям будущего.
Внимательно изучив это руководство, вы сможете: • Понять, как писать на Ruby качественный код в духе ООП • Решать, что должно входить в состав класса Ruby • Не допускать тесной связи между объектами в тех случаях, когда требуется разграничить функциональность • Определять гибкие интерфейсы между объектами • Освоить утиную типизацию • Эффективно задействовать наследование, композицию и полиморфизм • Разрабатывать экономные тесты • Доводить до совершенства любой legacy-код Ruby.
Кому эта книга будет полезна
Предполагается, что читатели имеют хотя бы начальный опыт создания объектно-ориентированных программ. При этом неважно, считаете ли вы свой опыт успешным, главное, чтобы у вас была практика работы с каким-либо объектно-ориентированным языком. В главе 1 дается краткий обзор объектно-ориентированного программирования и приводятся общие понятия.
Если вы еще не занимались объектно-ориентированным проектированием, но хотите научиться, то перед тем, как приступить к чтению, нужно пройти хотя бы начальный курс программирования. Примеры, приведенные в книге, предполагают, что вам уже приходилось сталкиваться с чем-то подобным. Опытные программисты могут пропустить этот этап, но большинству читателей мы рекомендуем получить начальный опыт написания объектно-ориентированного кода.
Для обучения объектно-ориентированному проектированию в этой книге используется язык Ruby, но для усвоения изложенных концепций знать Ruby совсем не обязательно. В издании приводятся примеры кода, и они предельно просты. При наличии опыта программирования на любом объектно-ориентированном языке разобраться с Ruby будет нетрудно.
Если вы привыкли работать с объектно-ориентированными языками со статической типизацией, например с Java или C++, значит, у вас уже есть необходимый багаж знаний, чтобы извлечь пользу из чтения данной книги. Ruby является языком с динамической типизацией, что упрощает синтаксис примеров и позволяет отразить самую суть проектирования. Каждое понятие из книги может быть напрямую переведено в код объектно-ориентированного языка со статической типизацией.
Как следует читать книгу
В главе 1 описываются общие задачи объектно-ориентированного проектирования и обстоятельства, требующие его применения, дается краткий обзор объектно-ориентированного программирования (ООП). Эта глава как бы стоит особняком. Ее можно прочитать первой, последней или пропустить, но если вы в настоящий момент столкнулись с плохо спроектированным приложением, то обязательно прочитайте эту главу.
Если у вас есть опыт написания объектно-ориентированных приложений и вы не хотите терять время на повторение той информации, которая вам уже и так известна, можете смело начинать с главы 2. Если столкнетесь с непонятным термином, вернитесь назад и бегло просмотрите раздел «Краткое введение в объектно-ориентированное программирование» главы 1, где приводятся общие понятия ООП, используемые в данной книге.
В главах 2–9 объясняются премудрости объектно-ориентированного проектирования.
В главе 2 «Проектирование классов с единственной обязанностью» описывается, как решить, что должно принадлежать отдельно взятому классу.
В главе 3 «Управление зависимостями» показано, как объекты сотрудничают друг с другом. В главах 2 и 3 основное внимание уделяется объектам, а не сообщениям.
В главе 4 «Создание гибких интерфейсов» акценты смещаются с проектирования, где все построено на базе объектов, к проектированию, основанному на обмене сообщениями. Эта глава посвящена определению интерфейсов; основное внимание в ней уделяется тому, как объекты общаются друг с другом.
Глава 5 «Снижение затрат за счет неявной типизации» посвящена неявной («утиной») типизации. В главе рассматривается идея о том, что объекты различных классов могут играть общие роли.
Глава 6 «Получение поведения через наследование» учит применять технологии классического наследования.
В главе 7 «Разделение ролевого поведения с помощью модулей» технологии классического наследования применяются для создания ролей с неявной типизацией.
Глава 8 «Объединение объектов путем составления композиции» раскрывает приемы создания объектов посредством композиций и предоставляет руководство по выбору между композицией, наследованием и совместным использованием ролей с применением неявной типизации.
Глава 9 «Проектирование экономически эффективных тестов» посвящена в основном проектированию тестов; при этом в качестве иллюстраций используется код из предыдущих глав книги.
Каждая из глав основана на понятиях, раскрываемых в предыдущих главах, поэтому читать их лучше по порядку.
В чем польза этого издания
Читателям с разными уровнями подготовки книга окажется по-разному полезна. Тем, кто уже знаком с объектно-ориентированным проектированием, будет о чем поразмышлять; возможно, они по-новому посмотрят на уже привычные вещи и, вполне вероятно, с чем-то будут не согласны. Поскольку в объектно-ориентированном проектировании нет истины в последней инстанции, оспаривание принципов (и спор с автором данной книги) только улучшит общее понимание предмета. В конце концов, именно вы должны оценивать собственные конструкции кода, проводить эксперименты и делать правильный выбор.
Хотя издание должно представлять интерес для читателей с различными уровнями подготовки, оно выпускалось с прицелом на новичков. Если вы новичок, то эта часть введения — именно для вас. Усвойте простую истину: объектно-ориентированное проектирование не магия. Это всего лишь еще не освоенная вами сфера. И раз вы читаете эти строки, это говорит о вашей заинтересованности, а тяга к знаниям — единственное условие получения пользы от прочтения данной книги.
В главах 2–9 объясняются принципы объектно-ориентированного проектирования и приводятся четкие правила программирования, значение которых для новичка будет отличаться от значения для опытных программистов. Новичкам нужно следовать этим правилам, не сомневаясь в их важности. Безоговорочное выполнение правил поможет избежать крупных неприятностей, пока не будет накоплен опыт, позволяющий принимать собственные решения. К тому времени, когда правила станут вас раздражать, у вас уже будет достаточно опыта для составления своих правил, и вы начнете двигаться по карьерной лестнице в качестве проектировщика.
Об авторе
Сэнди Метц 30 лет работает над такими проектами, качество которых позволяет им расширяться и совершенствоваться. Она разработчик структур программного обеспечения в Университете Дьюка, где ее команда решает реальные задачи для клиентов, имеющих крупные объектно-ориентированные приложения, сопровождение и развитие которых ведется на протяжении 15 и более лет. Сэнди стремится создавать полезные, нетривиальные программы исключительно практичными способами. Книга «Ruby. Объектно-ориентированное проектирование» — продукт обобщения множества разработок и итог многолетних дебатов на тему объектно-ориентированного проектирования.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Ruby
Комментарии (15)
dimarikpro
13.12.2016 14:37Спасибо, заказал — наличными курьеру.
GrigoryPerepechko
13.12.2016 15:36+3А в какое время доставка? Вы на дом заказывали или на офис? Планируете читать по вечерам или по дороге на работу?
dimarikpro
13.12.2016 16:53Оч смешно! написал так — потому-что ожидал ответа, что столь малый заказ не повезут, ан нет — сразу же перезвонили из питера и все подтвердили, прекрасно работают!
dimarikpro
22.12.2016 00:13Гриша, специально для тебя: докладываю, прочитал пока только 3 главы по дороге из офиса на работу, 80+ страниц одной воды, ничего нового не узнал, да и то что есть — свободно можно разместить на 1-ой — 2-ух страницах. Очень надеюсь что дальше будет хоть что-то стоящее, за что ее все так хвалят.
Спрашивай что еще интересует.
PNSpasskiy
13.12.2016 15:48Пытаюсь освоить скорочтение и работу с информацией, не сочтите за оскорбление, попробовал слить воду из вашей статьи. Если что-то важное упустил, пожалуйста поправьте:
Книга посвящена проектированию объектно-ориентированных программ. Это не учебник, а рассказ о том, как следует создавать код.
Кому эта книга будет полезна:
Читателям имеющим опыт создания ООП программ.
Как следует читать книгу:
Главу 1 можно пропустить, но если вы столкнулись с плохо спроектированным приложением, то прочитайте эту главу.
Если столкнетесь с непонятным термином, вернитесь и просмотрите раздел «Краткое введение в объектно-ориентированное программирование» главы 1.
В чем польза этого издания:
Кто уже знаком с объектно-ориентированным проектированием по-новому посмотрят на уже привычные вещи, с чем-то будут не согласны. Издание выпускалось с прицелом на новичков.
В главах 2–9 объясняются принципы объектно-ориентированного проектирования и приводятся правила программирования. Новичкам нужно следовать этим правилам. Их выполнение поможет избежать крупных неприятностей.
Об авторе:
Автор крут.
skyksandr
14.12.2016 14:54Спасибо! Хотелось бы, чтобы Вы также обратили внимание на «99 bottles of OOP», книга на данный момент не закончена, но выглядит достаточно интересной. С удовольствием купил бы бумажный вариант.
mastedm
19.12.2016 11:44+1Немного не по теме вопрос. А почему год издания стоит 2017? Часто вижу в книгах год издания +1
dimarikpro
22.12.2016 00:07Наверное это как у перекупщиков на авто.ру — машина была куплена в декабре 2015, значит ставим 2016))
uniqm
Добрый день. Нигде нет, на какой версии Ruby идет повествование в этой книге. Не подскажите?
ph_piter
В оригинале стоит копирайт 2013 года.
Последние пятизвездочные отзывы на Amazon от осени этого года: https://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330/
Книга фундаментальна и критично не устарела. Обновление, естественно, планируем выпускать, как появится
.
SibProgrammer
В оригинале книжка написана в 2012 году. Примеры на Ruby 1.9, но это, действительно, никакой особой роли не играет. Читал приличное время назад английский вариант. Если правильно помню, книжка показалась очень даже ничего.