«Демистифицирует объектно-ориентированное программирование и объясняет, как его использовать для разработки действительно безопасных и производительных приложений». — Чарльз Соетан, Plum.io
Ключевая особенность
Десятки методов написания объектно-ориентированного кода, который легко читать, повторно использовать и поддерживать.
Пишите код, который сразу поймут другие программисты
Правила проектирования для построения объектов, изменения и отображения состояния и т. д.
Примеры, написанные на мгновенно знакомом псевдокоде, который легко применить к Java, Python, C# и любому объектно-ориентированному языку.
Покупка печатной книги включает в себя бесплатную электронную книгу в форматах PDF, Kindle и ePub от Manning Publications.
О книге
Хорошо написанный объектно-ориентированный код легко читать, модифицировать и отлаживать. Совершенствуйте свой стиль программирования, осваивая универсальные передовые методы объектного проектирования, представленные в этой книге. Эти ясно представленные правила, которые применимы к любому объектно-ориентированному языку, максимизируют ясность и долговечность вашей кодовой базы и повышают производительность для вас и вашей команды.
В Руководстве по стилю проектирования объектов опытный разработчик Матиас Нобак излагает правила проектирования для создания объектов, определения методов и многого другого. Во всех примерах используется сразу знакомый псевдокод, поэтому вы можете следовать ему на том языке, который предпочитаете. Вы разберете каждый случай важные сценарии и проблемы проектирования объектов, а затем пройдётесь по простому веб-приложению, демонстрирующему, как различные типы объектов могут эффективно работать вместе.
Чему вы научитесь
Универсальные правила проектирования для широкого круга объектов
Рекомендации по тестированию объектов
Каталог общих типов объектов
Изменение и раскрытие состояния
Проверьте свои навыки проектирования объектов с помощью упражнений
Эта книга написана для
Для читателей, знакомых с объектно-ориентированным языком и базовой архитектурой приложений.
об авторе
Матиас Нобак — профессиональный веб-разработчик с почти двадцатилетним опытом работы. Он управляет собственной веб-разработкой, обучением и консультационной компанией под названием Noback’s Office.
Оглавление:
1 ¦ Программирование с объектами: введение
2 ¦ Создание сервисов
3 ¦ Создание других объектов
4 ¦ Манипулирование объектами
5 ¦ Использование объектов
6 ¦ Получение информации
7 ¦ Выполнение заданий
8 ¦ Разделение ответственности
9 ¦ Изменение поведения сервисов
10 ¦ Полевое руководство по объектам
11 ¦ Эпилог
Author(s): Нобак М.
Edition: 1
Publisher: Питер
Year: 2023
Language: Russian
City: Санкт-Петербург
Tags: Object Oriented Programming; Software Development; Computer Programming
Предисловие
Вступительное слово
Благодарности
О книге
Для кого эта книга
Структура книги
О коде в книге
Форум liveBook
Об авторе
Иллюстрации на обложке
От издательства
Глава 1. Программирование объектов: введение
1.1. Классы и объекты
1.2. Состояние
1.3. Поведение
1.4. Зависимости
1.5. Наследование
1.6. Полиморфизм
1.7. Композиция
1.8. Организация классов
1.9. Оператор возврата и исключения
1.10. Модульное тестирование
1.11. Динамические массивы
Заключение
Глава 2. Создание сервисов
2.1. Два типа объектов
2.2. Внедрение зависимостей и значений конфигурации в качестве аргументов конструктора
2.2.1. Хранение связанных файлов конфигурации
2.3. Внедряйте необходимые сущности, а не место их расположения
2.4. Все аргументы конструктора должны быть обязательными
2.5. Внедряйте зависимости только в конструкторе
2.6. Не существует необязательных зависимостей
2.7. Делайте все зависимости явными
2.7.1. Преобразуйте статические зависимости в зависимости объектов
2.7.2. Преобразуйте сложные функции в зависимости объектов
2.7.3. Делайте вызовы системных функций явными
2.8. Передавайте данные для выполнения задач как аргументы метода, а не аргументы конструктора
2.9. После инстанцирования сервиса его поведение должно оставаться неизменным
2.10. Не делайте ничего внутри конструктора, кроме инициализации свойств
2.11. Выдавайте исключение при недопустимом аргументе
2.12. Объявляйте сервисы как неизменяемые графы объектов с ограниченным рядом точек входа
Заключение
Ответы к упражнениям
Глава 3. Создание других объектов
3.1. Запрашивайте минимально необходимый для согласованного поведения объекта объем данных
3.2. Запрашивайте только данные, которые имеют смысл
3.3. Не используйте собственные классы исключений при проверке недопустимых аргументов
3.4. Проверяйте специфические исключения для недопустимых аргументов, анализируя сообщения исключений
3.5. Создавайте новые объекты, чтобы избежать многократной проверки инвариантов предметной области
3.6. Создавайте новые объекты для представления составных значений
3.7. Используйте проверки утверждений для аргументов конструктора
3.8. Не внедряйте зависимости, а передавайте их в качестве аргументов методов
3.9. Используйте именованные конструкторы
3.9.1. Создавайте объекты из значений примитивного типа
3.9.2. Не добавляйте без необходимости такие методы, как toString() или toInt()
3.9.3. Продумывайте и внедряйте понятия, специфичные для предметной области
3.9.4. Для введения ограничения можно использовать приватный конструктор
3.10. Не используйте заполнители свойств
3.11. Добавляйте в объект только то, что нужно
3.12. Не тестируйте конструкторы
3.13. Исключение из правила: объекты для передачи данных
3.13.1. Используйте публичный модификатор для свойств
3.13.2. Не выдавайте исключения, а собирайте ошибки при проверках
3.13.3. Если нужно, используйте заполнение свойств
Заключение
Ответы к упражнениям
Глава 4. Изменение объектов
4.1. Сущности: идентифицируемые объекты, которые отслеживают изменения и фиксируют события
4.2. Объекты-значения: заменяемые, анонимные и неизменяемые значения
4.3. Объекты для передачи данных: простые объекты с минимальным набором правил проектирования
4.4. Отдавайте предпочтение неизменяемым объектам
4.4.1. Заменяйте значения новыми, а не изменяйте их
4.5. Модификатор неизменяемого объекта должен возвращать модифицированную копию
4.6. В изменяемых объектах методы-модификаторы должны быть командными
4.7. В неизменяемых объектах методы-модификаторы должны иметь декларативные имена
4.8. Сравнивайте объекты целиком
4.9. При сравнении неизменяемых объектов проверяйте, что объекты равны, а не одинаковы
4.10. Вызов метода-модификатора должен всегда оставлять действительный объект
4.11. Метод-модификатор должен проверять, что запрашиваемое изменение состояния допустимо
4.12. Используйте запись внутренних событий для проверки изменяемых объектов
4.13. Не реализуйте текучие интерфейсы в изменяемых объектах
Заключение
Ответы к упражнениям
Глава 5. Использование объектов
5.1. Шаблон реализации методов
5.1.1. Проверка предусловий
5.1.2. Сценарии появления ошибок
5.1.3. Счастливый путь
5.1.4. Проверки постусловий
5.1.5. Возвращаемое значение
5.2. Некоторые правила для исключений
5.2.1. Используйте собственные классы исключений только при необходимости
5.2.2. Именование недопустимых аргументов или классов логических исключений
5.2.3. Именование классов исключений времени исполнения
5.2.4. Используйте именованные конструкторы для указания причин ошибки
5.2.5. Сопровождайте ошибки подробным описанием
Заключение
Ответы к упражнениям
Глава 6. Извлечение информации
6.1. Используйте методы-запросы для извлечения информации
6.2. Методы-запросы должны иметь возвращаемые значения единого типа
6.3. Избегайте использования методов-запросов, раскрывающих внутренние данные объектов
6.4. Задавайте специфичные методы и возвращаемые типы для необходимых запросов
6.5. Задавайте абстракцию для запросов, которые выходят за границы системы
6.6. Используйте заглушки в тестовых дублерах для методов-запросов
6.7. Методы-запросы должны использовать другие методы-запросы, а не командные методы
Заключение
Ответы к упражнениям
Глава 7. Выполнение задач
7.1. Используйте командные методы с именем в императивной форме
7.2. Ограничивайте область воздействия командного метода и используйте события для выполнения второстепенных задач
7.3. Создавайте сервис неизменяемым изнутри и снаружи
7.4. Когда что-то идет не так, выдавайте исключение
7.5. Используйте запросы для сбора информации, а командные методы — для последующих действий
7.6. Задавайте абстракции для команд, которые выходят за границы системы
7.7. Проверяйте имитацией (mock) только командные методы
Заключение
Ответы к упражнениям
Глава 8. Разделение функций
8.1. Отделяйте модели записи от моделей чтения
8.2. Создавайте модели чтения с учетом сценариев их использования
8.3. Создавайте модели чтения непосредственно из их источника данных
8.4. Построение моделей чтения из событий предметной области
Заключение
Ответы к упражнениям
Глава 9. Изменение поведения сервисов
9.1. Введите аргументы конструктора, чтобы сделать поведение настраиваемым
9.2. Введите аргументы конструктора, чтобы сделать поведение заменяемым
9.3. Создавайте абстракции, чтобы добиться более сложного поведения
9.4. Декорируйте существующее поведение
9.5. Используйте объекты уведомлений или прослушиватели событий для добавления поведения
9.6. Не используйте наследование для изменения поведения объекта
9.6.1. Когда можно использовать наследование?
9.7. Помечайте классы как final по умолчанию
9.8. Помечайте методы и свойства как private по умолчанию
Заключение
Ответы к упражнениям
Глава 10. Справочник объектов
10.1. Контроллеры
10.2. Службы приложений
10.3. Репозитории моделей записи
10.4. Сущности
10.5. Объекты-значения
10.6. Прослушиватели событий
10.7. Модели чтения и репозитории моделей чтения
10.8. Абстракции, конкретика, слои и зависимости
Заключение
Глава 11. Эпилог
11.1. Архитектурные шаблоны
11.2. Тестирование
11.2.1. Тестирование класса в сравнении с тестированием объекта
11.2.2. Разработка функций сверху вниз
11.3. Предметно-ориентированное проектирование
11.4. Заключение
Приложение. Стандарт кодирования для примеров кода