Базовая книга по приёмам объектно-ориентированного программирования (ООП) с примерами на языке C++. Разобраны основные принципы и техники разработки объектно-ориентированных программ, объяснены шаблоны проектирования (паттерны), особое внимание уделено принципам SOLID, архитектуре MVC (модель-представление-контроллер) и особенностям работы с ООП в С++.
Для начинающих разработчиков, специалистов по C++, студентов вузов
MVC и SOLID для уверенного понимания паттернов проектирования
Вот уже более 30 лет объектно-ориентированное программирование (ООП) остаётся основной парадигмой разработки программного обеспечения, доминирующей в академической информатике и в прикладном программировании на C++, Java, C#, Python и других языках, лидирующих в рейтинге TIOBE. При этом многие современные книги по ООП представляют собой огромные фолианты и не подходят для базового изучения этой темы.
Данная книга, написанная на основе многолетних наработок автора в преподавании и индустрии программного обеспечения, раскрывает тему ООП максимально доступно и просто. Кроме базовых основ ООП, книга описывает паттерны проектирования, принципы SOLID, архитектуру MVC (модель-представление-контроллер), а также затрагивает особенности ООП в языке С++.
Материал подходит в качестве вводной книги по ООП. Книга будет интересна студентам, осваивающим C++ и ООП, но и опытные специалисты тоже найдут в ней интересные детали об использовании паттернов проектирования.
Вы узнаете, как:
– инкапсулировать данные и код в объекты,
– работать с объектами в С++ и других востребованных языках,
– управлять композицией и взаимодействием объектов,
– управлять временем жизни объектов,
– использовать паттерны проектирования,
– применять принципы SOLID,
– создавать событийно-ориентированные приложения,
– решать задачи с помощью архитектуры MVC.
Книгу “Объектно-ориентированное программирование: с нуля к SOLID и MVC” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Посвящения и благодарности……………………………………………………………… 5
Введение……………………………………………………………………………………………… 7
Некоторые обозначения и сокращения………………………………………………………………………………… 7
Что это и для кого…………………………………………………………………………………………………………………… 7
Зачем это всё…………………………………………………………………………………………………………………………… 8
Методическая проблема……………………………………………………………………………………………………….. 9
Глава 1. Основы ООП……………………………………………………………………….. 11
1.1. Основные понятия…………………………………………………………………………………………………………. 11
1.2. Хватит бла-бла-бла, давайте уже код!………………………………………………………………………… 16
1.3. Определение классов и создание объектов…………………………………………………………………. 17
1.4. Работа с объектами……………………………………………………………………………………………………….. 20
1.5. Методы…………………………………………………………………………………………………………………………… 23
1.6. Сокрытие свойств и методов………………………………………………………………………………………… 26
1.7. Конструкторы и деструкторы, жизненный цикл объектов………………………………………… 29
1.8. Наследование………………………………………………………………………………………………………………… 38
1.9. Расширение и изменение объектов при наследовании………………………………………………. 45
1.10. Композиция………………………………………………………………………………………………………………….. 46
1.11. Глубокое и поверхностное копирование, value- и reference-семантика…………………. 51
1.12. Наследование, композиция, агрегация, ассоциация, зависимость…………………………. 52
1.13. Диаграммы классов, последовательностей, состояний и прочий UML…………………. 55
1.14. Композиция или наследование?………………………………………………………………………………… 60
1.15. Помещение объектов в переменные различных типов…………………………………………….. 63
1.16. Полиморфизм……………………………………………………………………………………………………………….. 66
1.17. Приведение типов………………………………………………………………………………………………………… 74
1.18. Передача и возврат объектов из функций в C++………………………………………………………. 83
1.19. Проблемы работы с памятью и не только, в C++ и не только…………………………………. 87
1.20. Технологии и практики управления долгоживущими объектами в C++………………… 90
Глава 2. Приемы ООП……………………………………………………………………….. 99
2.1. Демистификация паттернов ООП…………………………………………………………………………………. 99
2.2. Обычные приемы и антиприемы ООП, паттерны и антипаттерны…………………………. 100
2.3. Template Method………………………………………………………………………………………………………….. 103
2.4. Prototype……………………………………………………………………………………………………………………….. 106
2.5. Бесклассовое (прототипно-ориентированное) ООП………………………………………………… 109
2.6. Интерфейсы………………………………………………………………………………………………………………….. 110
2.7. Множественное наследование…………………………………………………………………………………… 113
2.8. Примеси (миксины, mixins)…………………………………………………………………………………………. 115
2.9. Singleton………………………………………………………………………………………………………………………… 116
2.10. Chain of Responsibility……………………………………………………………………………………………….. 119
2.11. Делегирование, объектная шизофрения………………………………………………………………….. 126
2.12. Strategy……………………………………………………………………………………………………………………….. 130
2.13. Adapter……………………………………………………………………………………………………………………….. 135
2.14. Iterator………………………………………………………………………………………………………………………… 142
2.15. Шаблоны C++. Осторожно по минному полю………………………………………………………… 150
2.16. Стандартные контейнеры STL…………………………………………………………………………………. 152
2.17. Decorator…………………………………………………………………………………………………………………….. 154
2.18. Proxy…………………………………………………………………………………………………………………………… 160
2.19. Composite…………………………………………………………………………………………………………………… 163
2.20. Observer сам по себе и как пример mixin…………………………………………………………………. 167
2.21. Command…………………………………………………………………………………………………………………… 171
2.22. Factory Method, Abstract Factory……………………………………………………………………………… 179
2.23. Abstract Factory еще раз……………………………………………………………………………………………. 187
2.24. Memento…………………………………………………………………………………………………………………….. 190
2.25. Bridge………………………………………………………………………………………………………………………….. 193
2.26. Visitor………………………………………………………………………………………………………………………….. 201
2.27. Одинарная и двойная диспетчеризация………………………………………………………………….. 209
2.28. SOLID-принципы……………………………………………………………………………………………………….. 211
2.29. Объектная интроспекция и рефлексия…………………………………………………………………….. 221
2.30. Событийно-управляемое приложение: событие, типы событий, сообщение, обработчик, механизм обмена сообщениями, очередь сообщений…………………………………………………………………………………………………… 225
2.31. Архитектура Model-View-Controller (MVC) и ее варианты.
Самый простой способ ее нарушить и исправить………………………………………………….. 237
Приложение. Ликбез по переменным и указателям в C++………………… 249
П.1. Обозначения………………………………………………………………………………………………………………… 249
П.2. Краткое описание объявления и примеры использования……………………………………… 249
П.3. Полное описание………………………………………………………………………………………………………… 250
П.3.1. Переменная………………………………………………………………………………………………………. 250
П.3.2. Память………………………………………………………………………………………………………………. 251
П.3.3. Адрес переменной……………………………………………………………………………………………. 252
П.3.4. Переменные-указатели……………………………………………………………………………………. 253
П.3.5. Операции с указателями…………………………………………………………………………………. 256
П.3.6. Массивы……………………………………………………………………………………………………………. 257
П.3.7. Ссылки………………………………………………………………………………………………………………. 259
П.4. Вопросы для самоконтроля……………………………………………………………………………………….. 262
Список литературы………………………………………………………………………….. 265
Предметный указатель…………………………………………………………………….. 267
Макеев Григорий Анатольевич, кандидат технических наук, практикующий инженер-программист, руководитель группы разработчиков, занимающейся разработкой наукоёмкого инженерного ПО, преподаватель Уфимского университета науки и технологий. Обладает почти 20-летним профессиональным стажем. На протяжении преподавательской карьеры вел дисциплины, связанные с объектно-ориентированным и функциональным программированием, а также с базами данных.