Передмова: Чому ця книга існує і як її читати
- Біль №1: Знання у вакуумі
- Біль №2: Застаріле лайно мамонта
- Біль №3: Сліпа віра у ШІ
- Для кого ця книга
- Як ми будемо вчитися: Problem-First
- Структура: Куди ми йдемо
- Подяка Early Access читачам
- 🔑 Висновки розділу
Частина I. Фундамент та Філософія
Розділ 1. Еволюція болю: Від GOTO до ООП
- Ера Хаосу: Spaghetti Code та GOTO (1960-ті)
- Ера Структурного програмування та його “Спадщина” (1970-ті)
- Ера Процедурного Пекла: Глобальні дані (1980-ті)
- Народження ООП: Клітини і Повідомлення
- Від цегли до байтів: Історія патернів (1977-1994)
- Протверезіння: GRASP і SOLID
- Велика Картина (The Big Picture)
- А як щодо Функціонального програмування?
- Сучасність: Як виглядають патерни зараз?
- 🔑 Висновки розділу
Розділ 2. За що вам платять гроші? Архітектурні драйвери та мистецтво Trade-offs
- ЩО проти ЯК: Функціональні та Нефункціональні вимоги
- Сучасна шістка драйверів
- Три вершники складності
- Мистецтво компромісу (Trade-offs)
- 🔑 Висновки розділу
Розділ 3. Парадокс ООП: Ви думаєте, що знаєте, — але ні
- Що таке парадигма?
- Швидкий огляд «сусідів» ООП
- Алан Кей та Біологічна метафора
- Messaging: Прохання замість Наказу
- Стан + Поведінка = Нероздільна Єдність
- Велика картина: де ми?
- 🔑 Висновки розділу
Розділ 4. Інкапсуляція: Два обличчя “чорної скриньки”
- Велика ілюзія безпеки
- Дві трактовки: Від Сімули до Вікіпедії
- Інкапсуляція як архітектурний принцип
- Навіщо це треба: Гайка, Жопа та Race Conditions
- Рішення: Справжній ООП-об’єкт
- 🔑 Висновки розділу
Розділ 5. Наслідування: коли світ б’є вас по потилиці
- Чому наслідування взагалі існує?
- Золоте правило: IS-A
- Реальний кейс: Медогляд і Квіти
- Множинне наслідування та Diamond Problem
- Правила виживання: скільки рівнів — норма?
- 🔑 Висновки розділу
Розділ 6. Поліморфізм: вбивця if-else та справжнє серце ООП
- Два типи поліморфізму: справжній і «цукровий»
- Еволюція болю: від «Бібліотеки» до «Дерева смерті»
- Рішення: Плагінна архітектура
- Duck Typing: поліморфізм без ієрархії
- Антипатерн: об’єкт без поведінки вбиває поліморфізм
- 🔑 Висновки розділу
Розділ 7. Абстракція: мистецтво ігнорувати деталі
- Що таке аналіз насправді?
- Абстракція є у всіх парадигмах
- Три принципи — один результат
- Антипатерн: занадто абстрактно
- Реальна історія: коли дизайн занадто точний
- Золоте правило: інтерфейс — завжди, балаган — ніколи
- 🔑 Висновки розділу та підсумок ООП-модуля
Розділ 8. UML: Навіщо малювати, якщо можна кодити?
- Як ми домовилися про мову
- Міф про «Магічну кнопку» та Rational Rose
- «Як роблять джуни» або Кнопка Зла
- Суть підходу: UML як «Детектор Гівнокоду»
- Тонкощі та Trade-offs: Інструменти і Пастка коду
- Чому ми беремо тільки дві діаграми з усіх можливих
- 🔑 Висновки розділу
Розділ 9. Анатомія класу та битва стрілок: Class Diagram
- Анатомія “Квадратика”
- Залежності: Хто кого смикає
- Битва Ромбиків: Агрегація vs Композиція
- Мультиплікатори: Скільки вішати в грамах?
- Генералізація і Чупа-чупси
- Нотатки (стикери) та Dependency Injection
- 🔑 Висновки розділу
Розділ 10. Життя об’єктів у рантаймі: Sequence Diagram
- Коли статика бреше
- Анатомія Sequence Diagram
- «Як роблять джуни»: Антипатерни зайвої деталізації
- Рішення: Хірургічний інструмент, а не малярний валик
- Гранд-фінал: Навіщо взагалі вчити UML у 2026 році?
- 🔑 Висновки розділу
Частина II. GRASP: Мистецтво розподілу відповідальності
Розділ 11. Вступ до GRASP та патерн Information Expert
- Що таке GRASP загалом?
- Анатомія об’єкта: Стан та Поведінка
- Шлях Експерта на прикладі чека
- Коли Експерт стає Монстром: Анемічна модель і кейс DirecTV
- Модерн-процедуралізм та Smart Data
- 🔑 Висновки розділу
Розділ 12. Creator (Творець): Хто дає життя об’єктам?
- Процедурна помилка початківців
- Правила Лармана: Хто має “ліцензію” на
new? - Велика битва: Creator проти Dependency Injection
- Конфлікт GRASP та SOLID: Жорстока реальність
- Еволюція складності: “Гітарний ефект”
- 🔑 Висновки розділу
Розділ 13. Controller (Контролер): Перша лінія оборони
- Що таке System Event (Системна подія)?
- Ізоляція багатопоточності: “Хвилеріз”
- Антипатерн: Роздутий контролер (Bloated Controller)
- Два різновиди контролерів (Facade vs Use-Case)
- 🔑 Висновки розділу
Розділ 14. Low Coupling та High Cohesion: Інь і Янь архітектури
- Low Coupling: Ефект Метелика та “Монолітність”
- High Cohesion: Смітник чи Інструмент?
- Доводимо ідеал до абсурду
- Кейс YouTube: Коли реальність б’є теорію
- Місток до майбутнього: GRASP проти SOLID
- 🔑 Висновки розділу
Розділ 15. Polymorphism: Вбивця IF/ELSE
- Вступна проблема: Життя на сходинках
- “Як роблять джуни”: Жах видалення
- Рішення: Полі морфізм як архітектурний патерн
- Коли “паттернізм головного мозку” вбиває проєкти
- 🔑 Висновки розділу
Розділ 16. Pure Fabrication: Чиста Вигадка (або чому в реальному світі немає Менеджерів і Хелперів)
- Конфлікт ООП та Реальності
- Компроміс заради метрик: Суть патерну
- “Як роблять джуни”: Темний бік вигадок (Utils та Helpers)
- Лікування хелперів
- Резюме
- 🔑 Висновки розділу
Розділ 17. Indirection: Посередник, що Розв’язує Руки (або чому один інтерфейс дорівнює нулю копіпасту)
- Вступна проблема: Вася, Маша і Вічний Баг
- Рішення: Посередник між двома класами
- Термінологічне Пекло: Indirection, DIP, IoC та DI
- Суперсила: Interception (Перехоплення)
- Тонкощі та Trade-offs: Коли вводити інтерфейси?
- Резюме
- 🔑 Висновки розділу
Розділ 18. Protected Variations: Як Локалізувати Вибух (або стратегія виживання у світі, де ТЗ змінюється щодня)
- Неминучість Змін та Одна Неприємна Правда
- Механіка: Два Кроки до Виживання
- Axis of Change — Поняття, Яке Буде Переслідувати Вас до Кінця Книги
- Protected Variations і OCP — Батько і Син
- Антипатерн: Не Будьте Вангою
- Резюме та Прощання з GRASP
- 🔑 Висновки розділу
Частина III. SOLID: Принципи гнучкості
Розділ 19. Вступ до SOLID та Принцип SRP (Або чому програми гниють і як знайти Вісь Змін)
- «Як роблять джуни»: Міф про «одну дію»
- Рішення: Осі змін та Актори
- Прагматизм: Коли ми свідомо порушуємо SRP
- 🔑 Висновки розділу
Розділ 20. OCP: Відкриті для розширення, закриті для змін (або як додавати фічі, не ламаючи старий код)
- «Як роблять джуни»: Антипатерн Хардкодингу
- Рішення: Два шляхи OCP
- Тонкощі та Trade-offs: Пастка Soft-coding
- Прагматизм: Коли правила ламаються
- 🔑 Висновки розділу
Розділ 21. LSP: Принцип підстановки Лісков (або чому компілятор вас не врятує)
- Синдром Миколи: Коли формальність вбиває логіку
- Design by Contract (Проєктування за контрактом)
- Математика проти ООП: Проблема Квадрата і Прямокутника
- Як виявити архітектурний «бруд» (порушення LSP)
- LSP і Duck Typing: «Якщо це качка — то і плавати теж зобов’язана»
- 🔑 Висновки розділу
Розділ 22. ISP: Інтерфейс належить клієнту (або чому оператору не можна давати «червону кнопку»)
- Чому нас вчили зводити все в один «універсальний» інтерфейс
- «Дедлайн на вчора» і кнопка Extract Interface
- Різати, не чекаючи перитоніту: рольові інтерфейси
- Коли ISP виходить за межі коду: REST і мобільна розробка
- ISP і качина типізація: навіть качці не завжди потрібні всі її функції
- ISP головного мозку (коли доводять до абсурду)
- ISP і SRP: два брати-акробати
- Місток до DIP
- 🔑 Висновки розділу
Розділ 23. DIP: Бізнес не повинен знати про MySQL
- Коли бізнес-логіка напряму залежить від MySQL
- Що реально означає Dependency Inversion Principle
- Бізнес визначає контракт, а не інфраструктура
- Адаптери інфраструктури: деталі, які можна міняти
- Чому з DIP тести стають коротшими і дешевшими
- Де не треба вигадувати зайві інтерфейси
- Коротко про шари, щоб ми говорили однією мовою
- Як DIP зв’язується з GRASP-принципами
- 🔑 Висновки розділу
Частина IV. Патерни GoF (Банда Чотирьох) у сучасному світі
Розділ 24. Вступ до GoF: Патерни як інструменти, а не релігія
- Чому ми прийшли до GoF лише тепер
- Патерни 1994 року у реаліях 2026
- Як пройти всі 23 патерни без втрати практичності
- Де DI-контейнер закриває питання, а де — ні
- Rule of Three: коли патерн справді потрібен
- Класифікація GoF без фанатизму
- Що далі: Singleton
- 🔑 Висновки розділу
Розділ 25. Singleton (Одинак): Чому глобальний стан вбиває ваші тести
- Класична реалізація та багатопотоковий жах
- Ілюзія безпеки: пастка Double-Checked Locking
- Чому класичний Singleton — це Антипатерн?
- Сучасне рішення: DI-контейнер як «Великий Сінглтон»
- Специфіка PHP: Сінглтон живе одне життя (запит)
- Специфіка Node.js та Python: безкоштовні сінглтони
- Мовні «чіт-коди»: Kotlin, Go, Ruby та Rust
- Патерн Monostate (коли об’єктів багато, а стан один)
- Патерн Multiton (к оли одного об’єкта замало)
- Singleton і Функціональне програмування (FP)
- А якщо у мене немає DI-контейнера? (Pure DI)
- Що далі: перехід до фабрик
- 🔑 Висновки розділу
Розділ 26. Factory Method та Abstract Factory: Як створювати об’єкти без архітектурного самогубства
- Проблема, яку вирішують фабрики
- Класичний GoF Factory Method: учбова схема, яку в продакшені фактично не пишуть
- Робочий варіант №1: Simple Factory
- Робочий варіант №2: Static Factory Method у самому класі
- 2026 рік: DI-контейнери вже працюють фабрикою для Injectables
- Лямбди як фабрики: менше бойлерплейту
- Коли який варіант брати
- Динамічна типізація: фабрики без класів
- Як не влетіти в overengineering
- Музейна хвилинка: Abstract Factory
- Що далі: Prototype та Object Pool
- 🔑 Висновки розділу
Розділ 27. Prototype та Object Pool: Клони атакують і коро бка з інструментами
- Як роблять джуни: Антипатерн “Кілометри сеттерів”
- Патерн Prototype: Клонування замість конструювання
- Диявол у деталях: Поверхневе vs Глибоке копіювання
- Патерн Object Pool: Коробка з інструментами
- 🔑 Висновки розділу
Розділ 28. Builder: Порятунок від конструкторів-монстрів
- Як це описано в GoF (і чому це мертво)
- Як це роблять нормальні люди (Fluent Builder)
- Мовні реалії 2026 року
- Коли все ж виносити Builder в окремий клас?
- Builder + Factory Method: Ідеальний симбіоз
- 🔑 Висновки розділу