Передмова: Чому ця книга існує і як її читати
- Біль №1: знання у вакуумі
- Біль №2: застаріле лайно мамонта
- Біль №3: сліпа віра в ШІ
- Для кого ця книга
- Як ми будемо вчитися: Problem-First
- Структура: куди ми йдемо
- Подяки
- 🔑 Висновки розділу
Частина I. Фундамент та Філософія
Розділ 1. Еволюція болю: від GOTO до ООП
- Ера хаосу: Spaghetti Code та GOTO (1960-ті)
- Ера структурного програмування та його «спадщина» (1970-ті)
- Ера процедурного пекла: глобальні дані (1980-ті)
- Народження ООП: клітини й повідомлення
- Від цегли до байтів: історія патернів (1977-1994)
- Протверезіння: GRASP і SOLID
- The Big Picture (Велика картина)
- А як щодо функціонального програмування?
- Сучасність: як виглядають патерни зараз?
- 🔑 Висновки розділу
Розділ 2. За що вам платять гроші? Архітектурні драйвери та мистецтво Trade-offs
- ЩО проти ЯК: функціональні та нефункціональні вимоги
- Сучасна шістка драйверів
- Три вершники складності
- Мистецтво компромісу (Trade-offs)
- 🔑 Висновки розділу
Розділ 3. Парадокс ООП: ви думаєте, що знаєте, — але ні
- Що таке парадигма?
- Швидкий огляд «сусідів» ООП
- Біологічна метафора та її наслідки
- Messaging: прохання замість наказу
- Стан + Поведінка = Нероздільна Єдність
- Велика картина: де ми?
- 🔑 Висновки розділу
Розділ 4. Інкапсуляція: два виміри «чорної скриньки»
- Велика ілюзія безпеки
- Два трактування: від Simula до наших днів
- Інкапсуляція як архітектурний принцип
- Навіщо взагалі все це потрібно: race conditions та ефект «відваленого заду»
- Рішення: справжній ООП-об’єкт
- 🔑 Висновки розділу
Розділ 5. Наслідування: як мислити ієрархіями та не отримати ляпаса від реального світу
- Чому наслідування взагалі існує?
- Базовий детектор: IS-A
- Реальний кейс: медогляд і корпоративний мерч
- Множинне наслідування та Diamond Problem
- Правила виживання: скільки рівнів — норма?
- 🔑 Висновки розділу
Розділ 6. Поліморфізм: вбивця if-else та справжнє серце ООП
- Три механізми поліморфізму: від синтаксичного цукру до підтипів та дженериків
- Еволюція болю: від «Бібліотеки» 96-го року до «Дерева смерті»
- Рішення: Плагінна архітектура та «Бритва Поліморфізму»
- Duck Typing: поліморфізм без явних контрактів
- Параметричний поліморфізм: Дженерики проти копіпасту та «кастингової рулетки»
- Пастка оверінжинірингу: Soft-coding та YAGNI
- Антипатерн: об’єкт без поведінки вбиває поліморфізм
- 🔑 Висновки розділу
Розділ 7. Абстракція: мистецтво ігнорувати деталі
- Що таке аналіз насправді?
- Абстракція є у всіх парадигмах
- Три принципи — один результат
- Антипатерн: занадто абстрактно
- Реальна історія: коли дизайн занадто точний
- Золоте правило: інтерфейс — завжди, балаган — ніколи
- 🔑 Висновки розділу та підсумок блоку про ООП
Розділ 8. UML: Навіщо малювати, якщо можна кодити?
- Як ми домовилися про мову
- Міф про «Магічну кнопку» та Rational Rose
- «Як роблять джуни», або Кнопка Зла
- Суть підходу: UML як детектор лайнокоду
- Тонкощі й trade-offs: інструменти й пастка коду
- Чому ми беремо тільки дві діаграми з усіх можливих
- 🔑 Висновки розділу
Розділ 9. Анатомія класу та битва стрілок: Class Diagram
- Анатомія «Квадратика»
- Залежності: хто кого смикає
- Битва Ромбиків: Агрегація vs Композиція
- Мультиплікатори: скільки вішати в грамах?
- Генералізація і Чупа-чупси
- Нотатки (стікери) та Dependency Injection
- 🔑 Висновки розділу
Розділ 10. Життя об’єктів у рантаймі: Sequence Diagram
- Коли статика вводить в оману
- Анатомія Sequence Diagram
- «Як роблять джуни»: антипатерни зайвої деталізації
- Рішення: хірургічний інструмент, а не малярний валик
- Гранд-фінал: навіщо взагалі вчити UML?
- 🔑 Висновки розділу
Частина II. GRASP: Мистецтво розподілу відповідальності
Розділ 11. Вступ до GRASP та патерн Information Expert
- Що таке GRASP загалом?
- Анатомія об’єкта: стан та поведінка
- Шлях Information Expert на прикладі чека
- Коли Information Expert стає монстром: Анемічна модель і кейс 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: Ідеальний симбіоз
- 🔑 Висновки розділу
Розділ 29. Структурні патерни-посередники: Adapter, Proxy, Decorator, Facade
- Adapter (Не можеш змінити — адаптуй)
- Proxy (Контроль доступу та ліниве завантаження)
- Decorator (Магія в рантаймі та матрьошки)
- Facade (Спрощення макросвіту)
- 🔑 Висновки розділу
Розділ 30. Bridge (Міст): Порятунок від комбінаторного вибуху
- Байка про «Фінуправління» та суть проблеми
- «Як роблять джуни»: Декартовий добуток класів
- Як працює Bridge: дві ієрархії для двох осей змін
- А як щодо мов із качиною типізацією?
- Біль архітектора: нестабільність патерну
- Резюме
- 🔑 Висновки розділу
Розділ 31. Сила та слабкість: Composite та Flyweight
- 1. Composite: Магічне знищення рекурсії
- 2. Flyweight: Пожежне гасіння Out of Memory
- 🔑 Висновки розділу
Розділ 32. Strategy (Король патернів): Заміна if/else на вибір в рантаймі
- Біль: Тисячорядковий if-else та розрахунок ціни
- Рішення: патерн Strategy
- Хто вирішує, яку стратегію використовувати?
- Тонкощі, сучасні реалії та Trade-offs
- Важливий урок: Чистота Git та антипатерн «Човновий якір»
- 🔑 Висновки розділу
Розділ 33. Mediator та Observer: Централізація проти реактивності
- Біль: спагеті-залежності в GUI та біда чекбокса
- Рішення 1: Mediator (Посередник) — Централізація влади
- Рішення 2: Observer (Спостерігач) — Повна децентралізація
- Темна сторона Observer
- Еволюція Observer у сучасному світі
- Duck Typing: як це працює в мовах із качиною типізацією
- Битва концепцій: Mediator проти Observer
- 🔑 Висновки розділу
Розділ 34. Chain of Responsibility: Конвеєри обробки та Middleware
- Біль: стіна перевірок HTTP-запиту
- Академічний тупик: GoF Chain of Responsibility
- Сучасне рішення: FilterChain / Pipeline (ланцюжок фільтрів та конвеєр)
- Тонкощі, підводні камені та архітектурні граблі
- Duck Typing та першокласні функції: як це працює в динамічних мовах
- 🔑 Висновки розділу
Розділ 35. Memento, Command та Interpreter: Тріада інтерактивних систем
- Memento: Збережись перед босом
- Command: Інкапсуляція дії
- Interpreter: Створення власної мови для бізнесу
- Як вони уживаються разом (і чи треба?)
- 🔑 Висновки розділу
Розділ 36. Iterator: Ховаємо кишки колекцій
- 🔑 Висновки розділу
Розділ 37. State: Кінець епохи нескінченних switch
- State у фронтенді: не плутайте реактивність із патерном
- 🔑 Висновки розділу
Розділ 38. Template Method: Скелет алгоритму та пастки наслідування
- 🔑 Висновки розділу
Розділ 39. Visitor: Подвійна диспетчеризація та операції над закритими класами
- 🔑 Висновки розділу
Розділ 40. Епілог: Design Patterns у сучасному світі. Як ШІ змінює розробку. Життя після GoF
- 🔑 Висновки розділу