сті.
У загальному випадку патерн складається з чотирьох основних елементів:
) Ім'я
Пославшись на нього, ми можемо відразу описати проблему проектування; її рішення та їх наслідки. Присвоєння паттернам імен дозволяє проектувати на більш високому рівні абстракції. За допомогою словника патернів можна вести обговорення з колегами, згадувати патерни в документації, в тонкощах представляти дизайн системи. Знаходження хороших імен було однією з найважчих завдань при складанні каталогу.
) Завдання
Опис того, коли слід застосовувати патерн. Необхідно сформулювати завдання і її контекст. Може описуватися конкретна проблема проектування, наприклад спосіб представлення алгоритмів у вигляді об'єктів. Іноді відзначається, які структури класів або об'єктів свідчать про негнучке дизайні. Також може включатися перелік умов, при виконанні яких має сенс застосовувати даний патерн.
) Рішення
Опис елементів дизайну, відносин між ними, функцій кожного елемента. Конкретний дизайн або реалізація не маються на увазі, оскільки патерн - це шаблон, який можна застосовувати в самих різних ситуаціях. Просто дається абстрактне опис задачі проектування і того, як вона може бути вирішена за допомогою якогось вельми узагальненого поєднання елементів (у нашому випадку класів і об'єктів).
) Результати
Це наслідки застосування патерну і різного роду компромісси. Хоча при описі проектних рішень про наслідки часто не згадують, знати про них необхідно, щоб можна було вибрати між різними варіантами і оцінити переваги та недоліки даного патерну. Тут мова йде і про вибір мови та реалізації. Оскільки в об'єктно-орієнтованому проектуванні повторне використання найчастіше є важливим чинником, то до результатів слід відносити і вплив на ступінь гнучкості, розширюваності і переносимості системи. Перерахування всіх наслідків допоможе вам зрозуміти і оцінити їх роль.
Те, що один сприймає як патерн, для іншого просто будівельний блок.
Паттерни проектування - це не те ж саме, що зв'язані списки або хеш-таблиці, які можна реалізувати у вигляді класу і повторно використовувати без яких би то не було модифікацій. Але це й не складні, предметно-орієнтовані рішення для цілого додатка або підсистеми. Тут під патернами проектування розуміється опис взаємодії об'єктів і класів, адаптованих для вирішення загальної задачі проектування в конкретному контексті.
Паттерн проектування іменує, абстрагує і ідентифікує ключові аспекти структури спільного рішення, які й дозволяють застосувати його для створення повторно використовуваного дизайну. Він виокремлює беруть участь класи і екземпляри, їх роль і відносини, а також функції. При описі кожного патерну увага акцентується на конкретному завданні об'єктно-орієнтованого проектування. Аналізується, - коли слід застосовувати патерн, чи можна його використовувати з урахуванням інших проектних обмежень, які будуть наслідки застосування методу. Оскільки будь-який проект в кінцевому підсумку доведеться реалізовувати, до складу патерну включається приклад коду на мові C ++ (іноді на Smalltalk), що ілюструє реалізацію.
Хоча, строго кажучи, патерни використовуються в проектуванні, вони засновані на практичних рішеннях, реалізованих на основних мовах об'єктно-орієнтованого програмування типу Smalltalk і C ++, C #, Java, а не на процедурних (Pascal, С, Ada тощо) або об'єктно-орієнтованих мовах з динамічною типізацією (CLOS, Dylan, Self).
Вибір мови програмування, безумовно, важливий, оскільки в паттернах найчастіше мається на увазі використання можливостей вибраної мови, і від цього залежить, що реалізувати легко, а що - важко.
Як описуються патерни проектування?
Графічних позначень недостатньо. Вони просто символізують кінцевий продукт процесу проектування у вигляді відносин між класами і об'єктами. Щоб повторно скористатися дизайном, нам необхідно документувати рішення, альтернативні варіанти і компроміси, які привели до нього. Важливі також конкретні приклади, оскільки вони дозволяють побачити застосування патерну.
При описі патернів проектуванні дотримуються єдиного принципу. Опис кожного патерну розбито на розділи, перераховані нижче.
Такий підхід дозволяє одноманітно представити інформацію, полегшує вивчення, порівняння і застосування патернів.
Назва та класифікація патерну
Назва патерну повинно чітко відображати його призначення.
Класифікуються патерни за призначенням та рівнем застосування:
за рівнем застосування патерни діляться на застосовув...