Разделы презентаций


ЛК.12 – Базові шаблони проектування

Содержание

Адаптер. Декоратор. Замісник. Інформаційний експерт. Компонувальник. Міст. Низька зв’язаність. Пристосуванець. Стійкий до змін.Фасад. Перелік питань

Слайды и текст этой презентации

Слайд 1ЛК.12 – Базові шаблони проектування

ЛК.12 – Базові шаблони проектування

Слайд 2Адаптер.
Декоратор.
Замісник.
Інформаційний експерт.
Компонувальник.
Міст.
Низька зв’язаність.
Пристосуванець.


Стійкий до змін.
Фасад.

Перелік питань

Адаптер. Декоратор. Замісник. Інформаційний експерт. Компонувальник. Міст. Низька зв’язаність. Пристосуванець. Стійкий до змін.Фасад. Перелік питань

Слайд 3Структурні патерни проектування – патерни проектування, у яких розглядається питання про

те, як з класів та об’єктів утворюються більші структури.
Структурні шаблони

рівня класу використовують наслідування для складання композицій з інтерфейсів і реалізацій. Простий приклад – використання множинного спадкоємства для об’єднання декількох класів в один. У результаті виходить клас, що має властивості всіх своїх батьків. Особливо корисний цей патерн, коли потрібно організувати спільну роботу декількох незалежно розроблених бібліотек.

Адаптер (GoF)
Проблема
Необхідно забезпечити взаємодію несумісних інтерфейсів або як створити єдиний стійкий інтерфейс для декількох компонентів з різними інтерфейсами.
Рішення
Конвертувати вихідний інтерфейс компонента до іншого виду за допомогою проміжного об’єкта – адаптера, тобто, додати спеціальний об’єкт із загальним інтерфейсом в рамках даної програми і перенаправити зв’язку від зовнішніх об’єктів до цього об’єкта – адаптера.

1. Адаптер

Структурні патерни проектування – патерни проектування, у яких розглядається питання про те, як з класів та об’єктів утворюються

Слайд 4Object Adapter

Object Adapter

Слайд 5Class Adapter

Class Adapter

Слайд 6Декоратор (Decorator) або Оболонка (Wrapper) – GoF
Проблема
Покласти додаткові обов’язки (прозорі

для клієнтів) на окремий об’єкт, а не на клас в

цілому.
Рекомендації
Застосування кількох «Декоратор» до одного «Компоненту» дозволяє довільним чином поєднувати обов’язки, наприклад, одна властивість можна додати двічі.

2. Декоратор

Декоратор (Decorator) або Оболонка (Wrapper) – GoFПроблемаПокласти додаткові обов’язки (прозорі для клієнтів) на окремий об’єкт, а не

Слайд 7Рішення
Динамічно додати об’єкту нові обов’язки не вдаючись при цьому до

породження підкласів (наслідування). «Компонент» визначає інтерфейс для об’єктів, на які

можуть бути динамічно покладені додаткові обов’язки, «КонкретнийКомпонент» визначає об’єкт, на який покладаються додаткові обов’язки, «Декоратор» – зберігає посилання на об’єкт «Компонент» і визначає інтерфейс, відповідний інтерфейсу «Компонента». «КонкретнийДекоратор» покладає додаткові обов’язки на компонент. «Декоратор» переадресує запити об’єкту «Компонент».
РішенняДинамічно додати об’єкту нові обов’язки не вдаючись при цьому до породження підкласів (наслідування). «Компонент» визначає інтерфейс для

Слайд 8Переваги
Більша гнучкість, ніж у статичного спадкування: можна додавати і видаляти

обов’язки під час виконання програми в той час як при

використанні наслідування треба було б створювати новий клас для кожного додаткового обов’язку. Даний патерн дозволяє уникнути перевантажених методами класів на верхніх рівнях ієрархії – нові обов’язки можна додавати в міру необхідності.
Недоліки
«Декоратор» і його «Компонент» не ідентичні, і, крім того, виходить що система складається з великої кількості дрібних об’єктів, які схожі один на одного і розрізняються тільки способом взаємозв’язку а не класом і не значеннями своїх внутрішніх змінних – така система складна в вивчення та налагодженні.

ПеревагиБільша гнучкість, ніж у статичного спадкування: можна додавати і видаляти обов’язки під час виконання програми в той

Слайд 9Проксі (Proxy) або Сурогат (Surrogate) – GoF
Проблема
Необхідно контролювати доступ до

об’єкта, так щоб створювати громіздкі об’єкти «на вимогу».
Рішення
Створити сурогат громіздкого

об’єкта. «Проксі» зберігає посилання, яке дозволяє проксі звернутися до реального суб’єкту (об’єкт класу «Проксі» може звертатися до об’єкта класу «Суб’єкт», якщо інтерфейси «РеальногоСуб’екта» і «Суб’єкта» однакові). Оскільки інтерфейс «РеальногоСуб’екта» ідентичний інтерфейсу «Суб’єкта», так, що «Проксі» можна підставити замість «РеальногоСуб’єкта», контролює доступ до «РеальномуСуб’єкту», може відповідати за створення або видалення «РеальногоСуб’єкта». «Суб’єкт» визначає загальний для «РеальногоСуб’єкта» і «Проксі» інтерфейс, так, що «Проксі» може бути використаний скрізь, де очікується «РеальнийСуб’єкт». При необхідності запити можуть бути переадресовані «Проксі» «РеальномуСуб’екту».

3. Замісник

Проксі (Proxy) або Сурогат (Surrogate) – GoFПроблемаНеобхідно контролювати доступ до об’єкта, так щоб створювати громіздкі об’єкти «на

Слайд 10«Замісник» може мати і інші обов’язки, а саме:
віддалений «Проксі» може

відповідати за кодування запиту та його аргументів і відправку закодованого

запиту реальному «Суб’єкту»,
віртуальний «Проксі» може кешувати додаткову інформацію про реальний «суб’єкта», щоб відкласти його створення,
захищаючий «Проксі» може перевіряти, чи має викликаючий об’єкт необхідні для виконання запиту права.

«Замісник» може мати і інші обов’язки, а саме:віддалений «Проксі» може відповідати за кодування запиту та його аргументів

Слайд 11Інформаційний експерт (Information Expert) – GRASP

Проблема
У системі повинна акумулюватися, розраховуватися

і т.п. необхідна інформація.
Рішення
Призначити обов’язок акумуляції інформації, розрахунку і т.п.

якомусь класу (інформаційному експерту), що володіє необхідною інформацією.
Рекомендації
Інформаційним експертом може бути не один клас, а декілька.

4. Інформаційний експерт

Інформаційний експерт (Information Expert) – GRASPПроблемаУ системі повинна акумулюватися, розраховуватися і т.п. необхідна інформація.РішенняПризначити обов’язок акумуляції інформації,

Слайд 12Приклад
Необхідно розрахувати загальну суму продажу. Є класи проектування «Продаж», «ТоварПродаж»

(продаж окремого виду товару в рамках продажу в цілому), «ТоварСпеціфікація»

(опис конкретного виду товару). Необхідно розподілити обов’язки з надання інформації і розрахунку між цими класами. Об’єкт «Продаж» повинен передати повідомлення «Розрахувати проміжну суму» кожному екземпляру класу «ТоварПродаж» (які, в свою чергу, передають повідомлення «ПовідомитиЦіну» об’єктам «ТоварСпеціфікація», з метою отримання інформації про ціну примірника товару), і, потім, підсумувати отримані результати. Проміжну суму розраховує об’єкт «ТоварПродаж». Таким чином, всі три об’єкти є інформаційними експертами.

ПрикладНеобхідно розрахувати загальну суму продажу. Є класи проектування «Продаж», «ТоварПродаж» (продаж окремого виду товару в рамках продажу

Слайд 13Компонувальник (Composite) – GoF
Проблема
Як обробляти групу або композицію структур об’єктів

одночасно?
Рішення
Визначити класи для композитних і атомарних об’єктів таким чином, щоб

вони реалізовували один і той же інтерфейс.
Приклад
Див паттерн «Стратегія», необхідно врахувати декілька знижок різних видів (залежать від часу, типу покупця, типом обраного продукту). Як застосовувати політику ціноутворення? Виробляється стратегія пріоритету знижок, об’єкт «Продаж» не повинен володіти інформацією про застосовувані знижки, але можна було б застосувати стратегію розрахунку знижок. Створюється новий клас «РозрахунокЗнижкиАлгоритмКомпозит».

5. Компонувальник

Компонувальник (Composite) – GoFПроблемаЯк обробляти групу або композицію структур об’єктів одночасно?РішенняВизначити класи для композитних і атомарних об’єктів

Слайд 14Міст (Bridge), Handle (описувач) або Тіло (Body) – GoF
Проблема
Потрібно відділити

абстракцію від реалізації так, щоб і те і інше можна

було змінювати незалежно. При використанні успадкування реалізація жорстко прив’язується до абстракції, що ускладнює незалежну модифікацію.
Рішення
Помістити абстракцію і реалізацію в окремі ієрархії класів.
Рекомендації
Можна використовувати якщо, наприклад, реалізацію необхідно виконувати під час реалізації програми.

6. Міст

Міст (Bridge), Handle (описувач) або Тіло (Body) – GoFПроблемаПотрібно відділити абстракцію від реалізації так, щоб і те

Слайд 15«Абстракція» визначає інтерфейс «Абстракції» і зберігає посилання на об’єкт «Реалізація»,

«УточненнаАбстракція» розширює інтерфейс, визначений «абстракціє». «Реалізація» визначає інтерфейс для класів

реалізації, він не зобов’язаний точно відповідати інтерфейсу класу «Абстракція» – обидва інтерфейси можуть бути абсолютно різні. Зазвичай інтерфейс класу «Реалізація» надає тільки примітивні операції, а клас «Абстракція» визначає операції більш високого рівня, що базуються на цих примітивних. «КонкретнаРеалізація» містить конкретну реалізацію класу «Реалізація». Об’єкт «Абстракція» перенаправляє своєму об’єкту «Реалізація» запити «Клієнта».
«Абстракція» визначає інтерфейс «Абстракції» і зберігає посилання на об’єкт «Реалізація», «УточненнаАбстракція» розширює інтерфейс, визначений «абстракціє». «Реалізація» визначає

Слайд 16Переваги
Відділення реалізації від інтерфейсу, тобто, «Реалізацію» «Абстракції» можна конфігурувати під

час виконання. Крім того, слід згадати, що поділ класів «Абстракція»

і «Реалізація» усуває залежності від реалізації, що встановлюються на етапі компіляції: щоб змінити клас «Реалізація» зовсім не обов’язково перекомпілювати клас «Абстракція».

ПеревагиВідділення реалізації від інтерфейсу, тобто, «Реалізацію» «Абстракції» можна конфігурувати під час виконання. Крім того, слід згадати, що

Слайд 17Низька зв’язаність (Low Coupling) – GRASP
Проблема
Забезпечити низьку зв’язаність при створенні

екземпляра класу і зв’язуванні його з іншим класом.
Рішення
Розподілити обов’язки між

об’єктами так, щоб ступінь пов’язаності залишалася низькою.

7. Низька зв’язаність

Низька зв’язаність (Low Coupling) – GRASPПроблемаЗабезпечити низьку зв’язаність при створенні екземпляра класу і зв’язуванні його з іншим

Слайд 18Приклад
Необхідно створити екземпляр класу «Платіж». У предметної області реєстрація об’єкта

«Платіж» виконується об’єктом «Реєстрація» (ведеться рестир). Нижче наводяться 2 способи

створення екземпляра класу «Платіж». Верхній малюнок – з використанням патерну «Творець», нижній – з використанням «Низька зв’язаність». Останній спосіб забезпечує більш низький ступінь зв’язування.

ПрикладНеобхідно створити екземпляр класу «Платіж». У предметної області реєстрація об’єкта «Платіж» виконується об’єктом «Реєстрація» (ведеться рестир). Нижче

Слайд 19Пристосуванець (Flyweight) – GoF
Проблема
Необхідно забезпечити підтримку безлічі дрібних об’єктів.
Рекомендації
Пристосуванці моделюють

суті, число яких дуже велика для подання об’єктами. Має сенс

використовувати даний патерн якщо одночасно виконуються наступні умови:
у додатку використовується велика кількість об’єктів, через це витрати на зберігання високі;
більшу частину станів об’єктів можна винести назовні;
багато груп об’єктів можна замінити відносно невеликою кількістю об’єктів, оскільки стани об’єктів винесені назовні.

8. Пристосуванець

Пристосуванець (Flyweight) – GoFПроблемаНеобхідно забезпечити підтримку безлічі дрібних об’єктів.РекомендаціїПристосуванці моделюють суті, число яких дуже велика для подання

Слайд 20Рішення
Створити об’єкт, який можна використовувати одночасно в кількох контекстах, причому,

в кожному контексті він виглядає як незалежний об’єкт (відрізняється від

екземпляра, який не розділяється). «Пристосуванець» оголошує інтерфейс, за допомогою якого пристосуванці можуть отримати зовнішній стан або якось впливати на нього, «КонкретнийПристосуванець» реалізує інтерфейс класу «Пристосуванець» і додає при необхідності внутрішній стан. Внутрішній стан зберігається в об’єкті «КонкретнийПристосуванець», в той час як зовнішній стан зберігається або обчислюється «Клієнтами» («Клієнт» передає його «пристосуванцю» при виклику операцій). Об’єкт класу «КонкретнийПристосуванець» повинен бути поділюваним. Будь-яке зберігається ним стану повинно бути внутрішнім, тобто незалежним від контексту, «ПристосуванецьФабрика» – створює об’єкти – «пристосуванців» (або надає існуючий примірник) і керує ними. «НеродільнийКонкретнийПристосуванець» – не всі підкласи «пристосуванця» обов’язково повинні бути поділюваними. «Клієнт» – зберігає посилання на одного або кількох «пристосуванців», обчислює і зберігає зовнішній стан «пристосуванців».

РішенняСтворити об’єкт, який можна використовувати одночасно в кількох контекстах, причому, в кожному контексті він виглядає як незалежний

Слайд 21Стійкий до змін (Protected Variations) – GRASP
Проблема
Як спроектувати систему так,

щоб зміна одних її елементів не впливало на інші?
Рішення
Ідентифікувати точки

можливих змін або нестійкості і розподілити обов’язки таким чином, щоб забезпечити стійку роботу системи.
Приклад
Паттерн проектування «Поліморфізм» є гарною ілюстрацією цього методу. В даному випадку точкою варіації або нестійкості є інтерфейси зовнішніх систем. При додаванні інтерфейсу «ПодатковаСистемаАдаптер» на основі принципу поліморфізму виходить, що внутрішні об’єкти зможуть взаємодіяти зі стійким інтерфейсом, а деталі взаємодії із зовнішніми системами будуть приховані в конкретних реалізаціях адаптерів.

9. Стійкий до змін

Стійкий до змін (Protected Variations) – GRASPПроблемаЯк спроектувати систему так, щоб зміна одних її елементів не впливало

Слайд 22Фасад (Facade) – GoF
Проблема
Як забезпечити уніфікований інтерфейс з набором розрізнених

реалізацій або інтерфейсів, наприклад, з підсистемою, якщо небажано високе зв’язування

з цією підсистемою або реалізація підсистеми може змінитися?
Рішення
Визначити одну точку взаємодії з підсистемою – фасадний об’єкт, що забезпечує загальний інтерфейс з підсистемою і покласти на нього обов’язок по взаємодії з її компонентами. Фасад – це зовнішній об’єкт, що забезпечує єдину точку входу для служб підсистеми. Реалізація інших компонентів підсистеми закрита і не видно зовнішніх компонентів. Фасадний об’єкт забезпечує реалізацію патерну «Стійкий до змін» з точки зору захисту від змін у реалізації підсистеми.

10. Фасад

Фасад (Facade) – GoFПроблемаЯк забезпечити уніфікований інтерфейс з набором розрізнених реалізацій або інтерфейсів, наприклад, з підсистемою, якщо

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика