Читати книгу - "Занурення в патерни проектування, Олександр Швець"
Шрифт:
Інтервал:
Додати в закладку:
Композиція в UML-діаграмах. Університет складається з кафедр.
Композиція — це більш суворий варіант агрегації, коли один об’єкт складається з інших. Особливість цього зв’язку полягає в тому, що компонент може існувати лише як частина контейнера. В UML композиція зображується так само як і агрегація, але з зафарбованим ромбом.
Зверніть увагу, у звичайному спілкуванні дуже часто під терміном «композиція» може матися на увазі як сама композиція, так і більш слабка агрегація. Справа в тому, що англійська фраза «object composition» означає буквально складений з об’єктів. Ось чому звичайну колекцію об’єктів часто-густо можуть називати побудованою на принципах композиції.
Загальна картинаТепер, коли ми знаємо про всі типи зв’язків, можна поглянути як вони пов’язані між собою. Це позбавить вас від плутанини та питань на кшталт «чим агрегація відрізняється від композиції» або «чи є спадкування залежністю».
Залежність: Клас А можуть торкнутися зміни в класі B. Асоціація: Об’єкт А знає про об’єкт B. Клас А залежить від B. Агрегація: Об’єкт А знає про об’єкт B і складається з нього. Клас А залежить від B. Композиція: Об’єкт А знає про об’єкт B, складається з нього і керує його життєвим циклом. Клас А залежить від B. Реалізація: Клас А визначає методи оголошені інтерфейсом B. Об’єкти А можна розглядати через інтерфейс B. Клас А залежить від B. Спадкування: Клас А успадковує інтерфейс та реалізацію класу B, але може перевизначити її. Об’єкти А можна розглядати через інтерфейс класу B. Клас А залежить від B.Зв’язки між об’єктами та класами — від найслабших до найсильніших.
Патерн проектування — це типовий спосіб вирішення певної проблеми, що часто зустрічається при проектуванні архітектури програм.
На відміну від готових функцій чи бібліотек, патерн не можна просто взяти й скопіювати в програму. Патерн являє собою не якийсь конкретний код, а загальний принцип вирішення певної проблеми, який майже завжди треба підлаштовувати для потреб тієї чи іншої програми.
Патерни часто плутають з алгоритмами, адже обидва поняття описують типові рішення відомих проблем. Але якщо алгоритм — це чіткий набір дій, то патерн — це високорівневий опис рішення, реалізація якого може відрізнятися у двох різних програмах.
Якщо провести аналогії, то алгоритм — це кулінарний рецепт з чіткими кроками, а патерн — інженерне креслення, на якому намальовано рішення без конкретних кроків його отримання.
З чого складається патерн?Описи патернів зазвичай дуже формальні й найчастіше складаються з таких пунктів:
проблема, яку вирішує патерн; мотивація щодо вирішення проблеми способом, який пропонує патерн; структура класів, складових рішення; приклад однією з мов програмування; особливості реалізації в різних контекстах; зв’язки з іншими патернами.Такий формалізм опису дозволив зібрати великий каталог патернів, додатково перевіривши кожен патерн на дієвість.
Класифікація патернівПатерни відрізняються за рівнем складності, деталізації та охоплення проектованої системи. Проводячи аналогію з будівництвом, ви можете підвищити безпеку на перехресті, встановивши світлофор, а можете замінити перехрестя цілою автомобільною розв’язкою з підземними переходами.
Найбільш низькорівневі та прості патерни — ідіоми. Вони не дуже універсальні, позаяк мають сенс лише в рамках однієї мови програмування.
Найбільш універсальні — архітектурні патерни, які можна реалізувати практично будь-якою мовою. Вони потрібні для проектування всієї програми, а не окремих її елементів.
Крім цього, патерни відрізняються і за призначенням. У цій книзі буде розглянуто три основні групи патернів:
Породжуючі патерни піклуються про гнучке створення об’єктів без внесення в програму зайвих залежностей.
Структурні патерни показують різні способи побудови зв’язків між об’єктами.
Поведінкові патерни піклуються про ефективну комунікацію між об’єктами.
Хто вигадав патерни?За визначенням, патерни не вигадують, а радше «відкривають». Це не якісь супер-оригінальні рішення, а, навпаки, типові способи вирішення однієї і тієї ж проблеми, що часто повторюються з невеликими варіаціями.
Концепцію патернів вперше описав Крістофер Александер у книзі Мова шаблонів. Міста. Будівлі. Будівництво 3. У книзі описано «мову» для проектування навколишнього середовища, одиниці якого — шаблони (або патерни, що ближче до оригінального терміна patterns) — відповідають на архітектурні запитання: якої висоти потрібно зробити вікна, скільки поверхів має бути в будівлі, яку площу в мікрорайоні відвести для дерев та газонів.
Ідея видалася привабливою четвірці авторів: Еріху Гаммі, Річарду Хелму, Ральфу Джонсону, Джону Вліссідесу. У 1994 році вони написали книгу Патерни проектування: повторно використовувані елементи архітектури об’єктно-орієнтованого програмного забезпечення 4, до якої увійшли 23 патерни, що вирішують різні проблеми об’єктно-орієнтованого дизайну. Назва книги була занадто довгою, щоб хтось зміг її запам’ятати. Тому незабаром усі стали називати її “book by the gang of four”, тобто «книга від банди чотирьох», а потім і зовсім “GoF book”.
З того часу було знайдено десятки інших об’єктних патернів. «Патерновий» підхід став популярним і в інших галузях програмування, тому зараз можна зустріти різноманітні патерни також за межами об’єктного проектування.
Увага!
Сайт зберігає кукі вашого браузера. Ви зможете в будь-який момент зробити закладку та продовжити читання книги «Занурення в патерни проектування, Олександр Швець», після закриття браузера.