Объекты. Стильное ООП
Автор Маттиас Нобак
()
Об этой электронной книге
Книга «Объекты. Стильное ООП» познакомит вас с профессиональными техниками написания ОО-кода. Маттиас Нобак раскрывает правила создания объектов, определения методов, изменения и извлечения состояний и многое другое. Все примеры написаны на простом псевдокоде, который легко перевести в любой язык программирования. Кейс за кейсом вы изучите ключевые сценарии и задачи проектирования объектов, а затем шаг за шагом создадите простое веб-приложение, которое покажет, как должны взаимодействовать объекты разных типов.
Связано с Объекты. Стильное ООП
Похожие электронные книги
Пять строк кода. Роберт Мартин рекомендует: Рефакторинг с нуля Рейтинг: 0 из 5 звезд0 оценокИдеальная работа. Программирование без прикрас Рейтинг: 0 из 5 звезд0 оценокВеб-дизайн для недизайнеров Рейтинг: 0 из 5 звезд0 оценокАлгоритмы на практике Рейтинг: 0 из 5 звезд0 оценокЗдесь должен быть текст. Профессиональный UX-райтинг Рейтинг: 0 из 5 звезд0 оценокУправление проектами от А до Я Рейтинг: 0 из 5 звезд0 оценокКодер с улицы. Правила нарушать рекомендуется Рейтинг: 0 из 5 звезд0 оценокОт джуна до сеньора: Как стать востребованным разработчиком Рейтинг: 0 из 5 звезд0 оценокКарьера Software Engineering Manager. Эффективное управление командой разработчиков ПО Рейтинг: 0 из 5 звезд0 оценокТеория ограничений в действии: Системный подход к повышению эффективности компании Рейтинг: 0 из 5 звезд0 оценокJavaScript. Рецепты для разработчиков Рейтинг: 0 из 5 звезд0 оценокГибкое управление IT-проектами. Руководство для настоящих самураев: Как Мастера Agile делают выдающееся ПО Рейтинг: 0 из 5 звезд0 оценокТестирование JavaScript Рейтинг: 0 из 5 звезд0 оценокСправочник для тренера технических, бизнес-семинаров и менеджера по развитию Рейтинг: 0 из 5 звезд0 оценокМасштабированный скрам: Как организовать гибкую разработку в крупной компании Рейтинг: 0 из 5 звезд0 оценокСовременный подход к программной архитектуре: сложные компромиссы Рейтинг: 0 из 5 звезд0 оценокКак создать настоящую команду: Алгоритмы, повышающие эффективность совместной работы Рейтинг: 0 из 5 звезд0 оценокКреативный программист Рейтинг: 0 из 5 звезд0 оценокМашинное обучение. Портфолио реальных проектов Рейтинг: 0 из 5 звезд0 оценокСтильный Java. Код, который работает всегда и везде Рейтинг: 0 из 5 звезд0 оценокКанбан Метод. Базовая практика Рейтинг: 0 из 5 звезд0 оценокАлгоритмы с нуля Рейтинг: 0 из 5 звезд0 оценокПрограммируй & типизируй Рейтинг: 0 из 5 звезд0 оценокТренинг для тренеров на 100%: Секреты интенсивного обучения Рейтинг: 0 из 5 звезд0 оценокСервис-дизайн на практике: Проектирование лучшего клиентского опыта Рейтинг: 0 из 5 звезд0 оценокДавай сейчас! Практические советы: как начать, закончить или продолжить любое дело Рейтинг: 0 из 5 звезд0 оценокГрокаем алгоритмы: 2-е издание Рейтинг: 0 из 5 звезд0 оценокЗнакомство с Python Рейтинг: 0 из 5 звезд0 оценокПродвинутые алгоритмы и структуры данных Рейтинг: 0 из 5 звезд0 оценок
«Разработка и проектирование программного обеспечения» для вас
Распределенные системы. Паттерны проектирования Рейтинг: 0 из 5 звезд0 оценокЧистый код: создание, анализ и рефакторинг Рейтинг: 0 из 5 звезд0 оценокЧистая архитектура. Искусство разработки программного обеспечения Рейтинг: 0 из 5 звезд0 оценокUNIX. Профессиональное программирование. 3-е изд. Рейтинг: 0 из 5 звезд0 оценокСоздание микросервисов. 2-е издание Рейтинг: 0 из 5 звезд0 оценокОбъектно-ориентированный подход: 5-е международное издание Рейтинг: 0 из 5 звезд0 оценок
Отзывы о Объекты. Стильное ООП
0 оценок0 отзывов
Предварительный просмотр книги
Объекты. Стильное ООП - Маттиас Нобак
Предисловие
Все программисты способны оценить значимость хорошего названия. Название может рассказать, чего стоит и не стоит ожидать. Оно помогает принимать дальнейшие решения.
Но Хорошее Название (с большой буквы) — это нечто большее. Хорошее Название раскрывает душу того, что оно описывает. Оно позволяет представить общую картину, возникшую в голове у создателя, ее суть и смысл. Название Walkie-Talkie отвечает и на вопрос что это, и на вопрос для чего это. Название не обязано быть предельно точным: если муравьи огненные, это не значит, что они действительно пылают. Хорошее Название раскрывает предмет.
Я с удовольствием отмечаю, что у книги, которую вы держите в руках, исключительно Хорошее Название¹.
Вы, возможно, знакомы с руководствами по стилю, которые часто используют журналисты, такими как AP Stylebook или The Chicago Manual of Style. Подобно им эта книга раскрывает правила и методы, необходимые большим командам, чтобы писать код в понятной и последовательной манере.
Цель Матиаса Нобака, следующая этой модели, понятна и проста. Он не внедряет никаких новых концепций или мудреных инструментов, не рекламирует никаких прорывных подходов. Матиас просто документирует то, чем уже занимается. Он структурирует свой подход к проектированию систем и выделяет из него элементы стиля.
Эти элементы описываются в рамках существующих паттернов, о ряде которых вы наверняка уже слышали. Открытием для меня в этой книге стало то, что эти паттерны редко существуют по отдельности. Примеры, выглядящие в коде рационально, могут не работать в IDE, если не использовать в дополнение другие практики. Например, вспомните, как тяжело проводить модульные тесты без внедрения зависимостей.
Таким образом, «Объекты. Стильное ООП» следует воспринимать как единое целое, а не как сумму его частей. Взятые вместе, описанные паттерны переплетаются и усиливают друг друга. Глубокое погружение в каждую из тем можно найти и в других источниках, а здесь собрана коллекция лучших практик, преобразованная в связный и понятный стиль.
Описание собственного стиля кажется чем-то странным и даже нахальным. В конце концов, почему стоит пользоваться этим стилем, а не вашим или моим? Вспомните, например, стандарты, указывающие, где ставить скобки и пробелы: неважно, какого стиля придерживаться, — главное, чтобы он был единым. Что же касается стиля Матиаса — его достоинство в том, что он уже задокументирован.
Но я убежден, что цель книги — не ограничить пользователя рекомендациями, а послужить отправной точкой. Говорят, что инновации внедряются там, где есть ограничения. Практикуйте этот стиль, улучшайте его, начните с него и продолжите создавать собственную версию, исходя из своей ситуации. В конце концов, хуже газетной статьи, написанной в стиле признания в любви, может быть только признание в любви, написанное в стиле газетной статьи.
Если я вас еще не убедил, эта книга по крайней мере позволит понаблюдать за работой профессионала высокого уровня. Вы встретитесь с подкупающей честностью и уязвимостью. Здесь нет секретного ингредиента или особой техники. Все, что вы видите, — это то, как Матиас делает свою ежедневную работу — не больше, но и не меньше.
В самом деле, в процессе чтения я иногда вспоминал, как читал его код, стоя у него за спиной, и слушал, как он взвешивал концепции и выбирал инструменты. Я указывал на некоторые вещи, которые выбивались из его стиля, а Матиас просто улыбался и говорил: «Ах да, это интересно».
Желаю вам такого же впечатления от прочтения книги, какое получил я.
Росс Так
1 Оригинальное название книги — «Object Design Style Guide».
Вступительное слово
Среди материалов по обучению программированию, с одной стороны, и продвинутым паттернам и принципам проектирования, с другой стороны, не так много посвящено объектно-ориентированным инструментам. Известные рекомендованные книги на эту тему тяжело читать, и зачастую их теорию сложно применить при решении каждодневных задач. К тому же у программистов редко бывает достаточно времени на чтение. В итоге в обучающих материалах зияет брешь.
Расти как программист можно и без чтения книг, по мере получения опыта. Вы научитесь делать правильный выбор. Вы соберете ряд базовых правил, подходящих практически для любой ситуации, что поможет освободить внимание для интересных мест в коде, которые нужно улучшить. Так что все, что невозможно узнать из книг по программированию, на самом деле можно узнать после долгих лет работы с кодом.
Я написал эту книгу, чтобы отчасти устранить эту брешь и предложить читателям нечто, что поможет начать писать более качественный объектно-ориентированный код. Мои предложения довольно компактные и простые. Технически здесь не очень много нового. Но я считаю, что следование этим идеям (или правилам) позволит переключиться с тривиальных на более интересные фрагменты кода, заслуживающие большего внимания. Если все в команде будут работать таким образом, то код во всем проекте станет более единообразным.
Я смело заявляю, что правила проектирования объектов, изложенные в этой книге, улучшат качество объектов и проект в целом. Ее также можно использовать в качестве материала для новичков команды. После того как вы расскажете им о стандартах, применяемых на проекте, и покажете им стили, которыми руководствуется команда, вы можете дать им эту книгу и объяснить, как команда стремится соблюдать грамотный дизайн объектов на всем проекте.
Я желаю вам и всей вашей команде успехов на пути обучения проектированию объектов и, в свою очередь, постараюсь сделать все, чтобы достичь поставленных в этой книге целей.
Благодарности
Прежде чем начать, мне хотелось бы высказать слова благодарности. В первую очередь я благодарю 125 человек, которые приобрели книгу еще до того, как она была закончена. Это вдохновляло! Спасибо также за ваши отзывы, особенно Сергею Лукьяненко, Иосифу Чирилуте (Iosif Chiriluta), Николе Поновицу (Nikola Paunovic), Нико Муку (Niko Mouk), Дэймону Джонсу (Damon Jones) и Мо Халеди (Mo Khaledi). Отдельное спасибо Ремону ван де Кампу (Remon van de Kamp) за ряд полезнейших комментариев.
Большое спасибо Россу Таку и Лоре Коди (Laura Cody) за тщательный разбор книги. Благодаря вашим предложениям аргументы стали убедительнее, структура — четче, а риски недопонимания — ниже.
Все описанное выше случилось еще до того, как издательство Manning Publications поставило эту книгу в план и начало работать над ее выходом. Майк Стивенс (Mike Stephens), спасибо, что приняли мое предложение. Для меня это был незабываемый опыт. Каждая из консультаций с сотрудниками была весьма полезной: Дедра Хайем (Deirdre Hiam), выпускающий редактор; Энди Кэрол (Andy Carroll), литературный редактор; Кери Хэйлз (Keri Hales), корректор; Александр Драгосавлевич (Aleksandar Dragosavljevic), ревьюер; Таня Вильке (Tanya Wilke), научный редактор; Джастин Колстон (Justin Coulston), корректор. Искренне благодарю всех вас за труд над этим проектом!
Также хотелось бы поблагодарить всех рецензентов: Энджела Р. Родригеса, Бруно Соннино, Карлоса Эзекеля Куротто, Чарльза Сетана, Гаральда Куна, Джозефа Тимоти Лайенса, Джастина Колтона, Марию Джемини, Патрика Рейгана, Пола Гребенка, Саманту Берк, Скотта Штайнмана, Шейна Корнуэла и Стива Уэствуда (Angel R. Rodriguez, Bruno Sonnino, Carlos Ezequiel Curotto, Charles Soetan, Harald Kuhn, Joseph Timothy Lyons, Justin Coulston, Maria Gemini, Patrick Regan, Paul Grebenc, Samantha Berk, Scott Steinman, Shayn Cornwell, Steve Westwood).
Отдельное спасибо Элеше Хайд (Elesha Hyde), ведущему редактору. Она великолепно управляла процессом подготовки проекта, а также внесла значительный вклад в повышение обучающей ценности этой книги.
О книге
Для кого эта книга
Эта книга предназначена для программистов, владеющих хотя бы базовыми знаниями объектно-ориентированных языков программирования. Вам нужно понимать возможности языка в области классов. Это подразумевает, что вы имеете представление о том, как создать класс, инстанцировать его, расширить, обозначить как abstract, задать метод, вызвать его, задать параметры и их типы, задать возвращаемые типы, задать свойства и их типы и т.д.
Я также рассчитываю, что у вас есть опыт работы со всем этим, пусть даже небольшой. Вы наверняка сможете освоить эту книгу, если прошли базовый курс программирования или давно работаете с классами.
Структура книги
Написание книги подразумевает переработку больших объемов материала в нечто более сжатое, с чем проще иметь дело. Поэтому креативность без ограничений и правил способна породить хаос. Если добавить правила, то шансы на успешное усвоение материала будут намного выше. Правила помогут легко и не задумываясь принимать локальные решения.
Вот правила, которыми я руководствуюсь в этой книге:
• Не включать в заголовки глав названия принципов или паттернов. Идея главы должна быть понятна без попыток запомнить, что весь этот жаргон значит.
• Короткие разделы. Я не хочу, чтобы книгу тяжело и нудно читали месяцами. Я хочу, чтобы рекомендации по программированию были готовы к использованию и не были похожи на философские бормотания оракулов. Рекомендация должна быть понятной, и ей легко следовать.
• Полезное заключение в конце главы. Если вам нужно быстро перечитать какие-то рекомендации или вы что-то ищете, вам не придется перечитывать всю главу заново. В заключении вы найдете краткое содержание всей главы.
• Примеры кода сопровождаются советами по его тестированию. Хорошее проектирование объектов облегчает их тестирование, в то же время объект можно улучшить посредством тестирования. Поэтому имеет смысл оставлять предложения по (модульному) тестированию рядом с рекомендациями по проектированию объектов.
Также обратите внимание на следующие соглашения:
• Словом «клиент» я обозначаю место, откуда класс или метод вызывается. Иногда я называю его «место вызова» или «точка вызова».
• Словом «пользователь» я обозначаю программиста, который использует класс, инстанцируя его и вызывая его методы. Заметьте, что это не пользователь приложения в целом.
• В примерах кода я сокращаю выражения при помощи // … и /* … */. Иногда я использую // или /* … */, чтобы указать контекст.
Книга начинается с главы о программировании объектов (глава 1). Эта глава также кратко знакомит с модульным тестированием. В ней объясняется некоторая терминология и рассматриваются концепции объектно-ориентированного программирования.
Само руководство по стилям проектирования начинается со 2-й главы. Сначала мы разграничиваем объекты на сервисы и другие типы. Затем рассматриваем, как создавать объекты-сервисы, а также говорим о том, что после инстанцирования с ними нельзя проводить никакие действия. В главе 3 мы обсудим, как создавать другие объекты, а в главе 4 — какие действия с ними можно осуществлять после инстанцирования.
В главе 5 приводятся некоторые общие рекомендации по написанию методов, которые позволят наделять объекты поведением. Мы рассмотрим два типа действий клиентов над объектами: получение информации из них (глава 6) и запрос выполнения задачи (глава 7). Эти две ситуации применения объектов подразумевают различные правила реализации. В главе 8 объясняется, как разделять модели для записи и для чтения, что поможет разграничивать ответственность за внесение изменений и предоставление информации между множеством объектов.
В главе 9 даются рекомендации для случаев, когда нужно изменить поведение объектов-сервисов. В ней показано, как изменять или улучшать поведение сервисов, объединяя существующие объекты в новые или делая поведение настраиваемым.
Глава 10 — это справочник объектов. В ней показаны различные области (слои) приложения и различные типы объектов, которые встречаются в этих областях.
Книга завершается главой 11, где я составил краткий обзор тем, на которые стоит обратить внимание, если вы захотите узнать больше о проектировании объектов, а также рекомендации для дальнейшего чтения.
И хотя эта книга написана в виде руководства с постепенным изучением всех тем от начала до конца, она может успешно служить и справочником. Поэтому, если вам нужны конкретные рекомендации, смело пропускайте главы, пока не найдете необходимое.
О коде в книге
Примеры кода написаны на обобщенном объектно-ориентированном языке, оптимизированном для чтения широким кругом объектно-ориентированных программистов. Этого языка не существует в реальности, так что код, представленный в книге, нельзя запустить в какой-либо среде исполнения. Но я уверен, что примеры будет легко понять, если у вас есть опыт работы с такими языками программирования, как PHP, Java или C#. Если вы хотите узнать больше об особенностях этого фиктивного языка, загляните в приложение в конце книги.
Некоторые из примеров будут сопровождаться кодом для модульного тестирования. Я опираюсь на тестовый фреймворк xUnit (PHPUnit, JUnit, NUnit и т.п.). Я использую ограниченный набор функций для проверок, обработки исключений или создания тестовых дублеров. Это должно облегчить перенос кода в ваши любимые тестовые фреймворки и библиотеки.
Форум liveBook
Приобретая книгу «Объекты. Стильное ООП», вы получаете бесплатный доступ к закрытому веб-форуму издательства Manning (на английском языке), на котором можно оставлять комментарии о книге, задавать технические вопросы и получать помощь от автора и других пользователей. Чтобы получить доступ к форуму, откройте страницу https://livebook.manning.com/book/object-design-style-guide/discussion. Информацию о форумах Manning и правилах поведения на них см. на https://livebook.manning.com/#!/discussion.
В рамках своих обязательств перед читателями издательство Manning предоставляет ресурс для содержательного общения читателей и авторов. Эти обязательства не подразумевают конкретную степень участия автора, которое остается добровольным (и неоплачиваемым). Задавайте автору хорошие вопросы, чтобы он не терял интереса к происходящему! Форум и архивы обсуждений доступны на веб-сайте издательства, пока книга продолжает издаваться.
Об авторе
Маттиас Нобак — профессиональный веб-разработчик (с 2003 года). Он живет в городе Зейст в Нидерландах со своей второй половинкой и детьми: сыном и дочерью.
Маттиас — основатель собственной компании в области веб-разработки, обучения и консультирования под названием Noback’s Office. Он вплотную занимается бэкенд-разработкой и программной архитектурой и всегда ищет возможности для улучшения методов проектирования ПО.
С 2011 года ведет блог о программировании на matthiasnoback.nl. Маттиас — автор и других книг: «A Year with Symfony» (Leanpub, 2013), «Microservices for Everyone» (Leanpub, 2017) и «Principles of Package Design»² (Apress, 2018). Связаться с Маттиасом можно по электронной почте ([email protected]) или в Twitter (@matthiasnoback).
2 Нобак М. «Принципы разработки программных пакетов».
Иллюстрация на обложке
На обложке книги «Объекты. Стильное ООП» изображена женщина с острова Углян рядом с побережьем Хорватии. Иллюстрация взята из французской книги о национальных нарядах «Encyclopedie des Voyages» автора Жака Гассе де сен Савьера (Jacques Grasset de Saint-Sauveur) (1757–1810), опубликованной в 1796 году. Ранее мало кто имел возможность путешествовать ради удовольствия, и такие иллюстрированные руководства пользовались большим спросом и знакомили туристов и исследователей с жителями отдаленных регионов мира, а также с более привычными местными костюмами Франции и Европы.
Разнообразие рисунков в «Encyclopedie des Voyages» наглядно доказывает уникальность и аутентичность разных стран мира и людей, живших около 200 лет назад. Это было время, когда костюмы из двух регионов, разделенных всего несколькими десятками миль, говорили, в каком из этих регионов живет их обладатель, а представителей одного класса, гильдии или племени можно было распознать по тому, какую одежду они носят.
Манера одеваться с тех пор сильно изменилась, и богатое местное разнообразие постепенно ушло в небытие. Сегодня довольно сложно отличить жителей одного континента от другого. Но различия по национальному, этническому и географическому признакам в современном мире все еще существуют и должны признаваться и цениться в обществе. Это то, что стремится культивировать Manning, используя обложки с историческими изображениями, которые привлекают внимание к манере одежды двухсотлетней давности.
От издательства
Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.
1. Программирование объектов: введение
В этой главе
• Работа с объектами
• Модульное тестирование
• Динамические массивы
Прежде чем приступить к изучению стилей проектирования, давайте обсудим некоторые фундаментальные вопросы программирования с применением объектов. Мы кратко пройдемся по самым важным понятиям и поясним распространенную терминологию, с которой продолжим знакомиться и в последующих главах.
Мы рассмотрим:
• Классы и объекты — создание объектов на основе классов, использование конструктора, статические и объектные методы, статические методы фабрик для создания новых экземпляров и выдача исключений в конструкторе (раздел 1.1).
• Состояние — объявление свойств private и public, задание им значений, константы, а также изменяемые и неизменяемые состояния (раздел 1.2).
• Поведение — private- и public-методы, передача значений в качестве аргументов и исключения NullPointerException (раздел 1.3).
• Зависимости — их инициализация, обнаружение и передача в конструктор в качестве аргумента (раздел 1.4).
• Наследование — интерфейсы, абстрактные классы, переопределение и финальные классы (раздел 1.5).
• Полиморфизм — один интерфейс, разное поведение (раздел 1.6).
• Композиция — присвоение объектов свойствам и создание более сложных объектов (раздел 1.7).
• Организация классов