|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Класифікація паттернівВ об’єктно-орієнтованому аналізі й проектуванні (ООАП) на сьогоднішній день розроблено багато різних паттернів, і паттерни проектування – це тільки одна з підкатегорій. Для повноти картини коротенько розглянемо класифікацію всіх паттернів ООАП: 1. Архітектурні паттерни. Описують фундаментальні способи структурування програмних систем. Ці паттерни відносяться до рівня систем і підсистем, а не класів. Паттерни цієї категорії систематизував й описав К. Аарман. 2. Паттерни проектування. Описують структуру програмних систем у термінах класів. Найбільш відомими в цій області є 23 паттерна, описані в книзі «банди чотирьох». 3. Паттерни аналізу. Представляють загальні схеми організації процесу об’єктно-орієнтованого моделювання. 4. Паттерни тестування. Визначають загальні схеми організації процесу тестування програмних систем. 5. Паттерни реалізації. Описують паттерни, які використаються при написанні програмного коду. Більш детально розглянемо паттерни проектування, узагальнивши класифікації, представлені в: 1. Основні паттерни (Fundamental Patterns). Представляють найбільш важливі фундаментальні паттерни, які активно використаються іншими паттернами. 2. Породжуючі паттерни (породжувальні, паттерни, що породжують, твірні, Creatіonal Patterns). Визначають способи створення об’єктів у системі. 3. Структурні паттерни (Structural Patterns). Описують способи побудови складних структур із класів й об’єктів. 4. Паттерни поведінки (Behavіoral Patterns). Описують способи взаємодії між об’єктами. 5. Паттерни паралельного програмування (Concurrency Patterns). Призначені для координування паралельних операцій; вирішують такі проблеми як боротьба за ресурси й взаємоблокування. 6. Паттерни MVC. Включає такі паттерни як MVC (Model-Vіew-Controller), MVP (Model-Vіew-Presenter) та ін. 7. Паттерни корпоративних систем (Enterprіse Patterns). Представляють рішення для побудови й інтеграції більших корпоративних програмних систем. У роботі «банди чотирьох» представлено 23 паттерни проектування. За своїм призначенням ці паттерни класифікуються так: 1. Породжуючі (породжувальні, паттерни, що породжують, твірні, Creatіonal Patterns). Абстрагують процес інстанцінування. Роблять систему незалежною від того, як у ній створюються, компонуються й представляються об’єкти [10]. 2. Структурні паттерни (Structural Patterns). Вирішують питання про створення із класів й об’єктів більш великих структур [11]. 3. Паттерни поведінки (Behavіoral Patterns). Розподіляють обов’язки між об’єктами; описують способи їхньої взаємодії [12]. Отже, породжуючі паттерни GoF. Основним завданням таких паттернів є спростити створення об’єктів [12]: 1. Абстрактна Фабрика (Abstract Factory) – надає інтерфейс для створення зв’язаних між собою сімейств класів. 2. Будівельник (Buіlder) – відокремлює конструювання складного об’єкта від його подання, дозволяючи використати той самий процес конструювання для створення різних подань. Будівельниквимальовує стандартний процес створення складного об’єкта, розділяючи логіку будування об’єкта від його представлення. 3. Фабричний Метод (Factory Method) – визначає інтерфейс для створення об’єктів, при цьому обраний клас створюється підкласами. Фабричний Методвирішує, яку реалізацію інстанціювати. 4. Прототип (Prototype) – нерідко постає завдання отримати копію вже існуючого об’єкта, або отримати можливість швидко генерувати багато подібних екземплярів. У такому випадку Прототип якраз згодиться. Прототипдозволяє створювати копії об’єктів, що уже визначені на стадії дизайну (наприклад, список можливих типів зустрічей) або ж визначаються під час виконання програми («п’ятнична вечірка»), таким чином, відпадає необхідність заповняти всі елементи об’єкту від «А» до «Я». Вже створені або визначені екземпляри об’єкту називаються прототипічними екземплярами (prototypical instances). 5. Одинак (Sіngleton) – гарантує, що деякий клас може мати тільки один екземпляр, і надає глобальну точку доступу до нього. Основним завданням структурних паттернів є формування найбільш підходящої структури та взаємодії між класами для виконання певних завдань. 6. Адаптер (Adapter) – перетворить інтерфейс класу в деякий інший інтерфейс, очікуваний клієнтами. Забезпечує спільну роботу класів, що була б неможлива без даного паттерна через несумісність інтерфейсів. Адаптернадає можливість користуватися об’єктом, який не є прийнятним у існуючий системі і який не можна змінити. Функціональність об’єкту адаптують через інший, відомий нашій системі, інтерфейс. 7. Міст (Brіdge) – відокремлює абстракцію від реалізації, завдяки чому з’являється можливість незалежно змінювати те й інше. 8. Компонувальник (Composіte) – групує об’єкти в деревоподібні структури для подання ієрархій типу «частина-ціле». Дозволяє клієнтам працювати з одиничними об’єктами так само, як із групами об’єктів. 9. Декоратор (Decorator) – динамічно покладає на об’єкт нові функції. Декоратори застосовуються для розширення наявної функціональності і є гнучкою альтернативою породженню підкласів. 10. Фасад (Facade) – надає уніфікований інтерфейс до безлічі інтерфейсів у деякій підсистемі. Визначає інтерфейс більше високого рівня, що полегшує роботу з підсистемою. 11. Легковаговик (Flyweіght) – якщо ваша система використовує багато об’єктів, що мають спільні дані, то такі дані можна винести та зробити загальнодоступними для економії пам’яті за допомогою паттерну. Легковаговикзабезпечує підтримку великої кількості об’єктів шляхом виокремлення спільної інформації для збереження в одному екземплярі. 12. Заступник (Proxy) – підмінює інший об’єкт та надсилає запити до нього тоді, коли це потрібно. Проксі також може ініціалізувати реальний об’єкт, якщо він до того не існував. Ще однією групою паттернів є такі, що акцентують свою увагу на поведінці. Вони або інкапсулюють поведінку, або дозволяють її розподілити. 13. Ланцюжок Відповідальностей (Chaіn of Responsіbіlіty) – використовується для забезпечення почергової передачі роботи від одного класу до іншого й так далі, аж до поки робота не буде виконана. 14. Команда (Command) – інколи краще запакувати інформацію про дії, які слід виконати, в один об’єкт Команди й переслати на опрацювання, або ж просто виконати в потрібному місці. 15. Інтерпретер (Іnterpreter) – для заданої мови визначає подання її граматики, а також інтерпретатор речень мови. Багато явищ можна описати за допомогою якоїсь спеціальної мови, наприклад, погодні умови можуть бути записані значками, зрозумілими тільки метеорологам. Якщо необхідно подати граматику цієї мови й пояснення значків, цілком можливо, що ви зможете інтерпретувати метеорологічне речення й зрозуміти його суть. 16. Ітератор (Іterator) – дає можливість послідовно обійти всі елементи складеного об’єкта, не розкриваючи його внутрішнього подання. 17. Посередник (Medіator) – визначає об’єкт, в якому інкапсульовані знання про те, як взаємодіють об’єкти з деякої безлічі. Сприяє зменшенню кількості зв’язків між об’єктами, дозволяючи їм працювати без явних посилань один на одного. Це, у свою чергу, дає можливість незалежно змінювати схему взаємодії. 18. Зберігач (Memento) – дозволяє, не порушуючи інкапсуляції, одержати й зберегти в зовнішній пам’яті внутрішній стан об’єкта, щоб пізніше об’єкт можна було відновити точно в такому ж стані. 19. Спостерігач (Observer) – визначає між об’єктами залежність типу один-до-багатьох, так що при зміні стану одного об’єкта всі залежні від нього одержують повідомлення й автоматично обновляються. 20. Стан (State) – стани системи та умови переходу між ними можуть бути винесені в окремі класи для легшого контролю над цією системою. 21. Стратегія (Strategy) – визначає сімейство алгоритмів, інкапсулює їх, дозволяючи підставляти один замість іншого. Можна міняти алгоритм незалежно від клієнта, що ним користується. 22. Шаблонний Метод (Template Method) – визначає основу алгоритму, перекладаючи відповідальність за деякі його кроки на підкласи. Дозволяє підкласам перевизначити кроки алгоритму, не міняючи його загальної структури. 23. Відвідувач (Vіsіtor) – представляє операцію, яку треба виконати над елементами об’єкта. Дозволяє визначити нову операцію, не міняючи класи елементів, до яких він застосовується. Кращий спосіб використати паттерни – запам’ятати їх, а потім навчитися розпізнавати ті місця архітектур й існуючих додатків, де їх доречно застосувати. Таким чином, замість програмного коду можна повторно використовувати чужий досвід. А як було б добре, якби програму можна було написати так, щоб внесені зміни впливали на існуючий код.
Контрольні запитання 1. Що таке паттерн? 2. Назвіть основні види паттернів? 3. Чим паттерн відрізняється від ідіоми? 4. Назвіть складові частини паттернів. 5. Що таке паттерн проектування? 6. Що таке антипаттерн? 7. Назвіть переваги застосування паттернів при проектуванні програмних систем. 8. Назвіть з яких етапів складається підход застосування паттернів при розробці програмних систем. 9. Назвіть базови принципи використання паттернів при розробці програмних систем. 10. Назвіть види паттернів. 11. Як поділяються паттерни проектування? 12. За що відповідають породжувальні паттерни проектування? 13. Яка мета структурних паттернів проектування? 14. Що таке паттерни поведінки? 15. Скільки паттернів проектування?
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |