Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
9
Добавлен:
19.09.2019
Размер:
4.01 Mб
Скачать

18. Як під час проектування здійснюється розподіл обов’язків між класами? що таке шаблони проектування? Наведіть приклади шаблонів з прикладами їх застосування.

Відносини між класами можуть означати одне з двох. По-перше, у них може бути щось спільне. Наприклад, і Маргаритка, і троянди - це різновиди квітів: і ті, й інші мають яскраво пофарбовані пелюстки і так далі. По-друге, може бути якийсь семантичний зв'язок Також існує симбіотичний зв'язок між квітами і божими корівками: Божі корівки захищають квіти від шкідників, які, в свою чергу, служать їжею божим корівкам.

Відомі три основних типи відносин між класами. По-перше, це відношення "узагальнення / спеціалізація" (загальне і приватне), відоме як "is-a". Троянди суть квіти, що означає: троянди є спеціалізованим приватним випадком, підклас більш загального класу "квіти". По-друге, це відношення "ціле / частина", відоме як "part of". Так, пелюстки є частиною кольорів. По-третє, це семантичні, смислові відносини, асоціації. Наприклад, троянди і свічки - і те, і інше можна використовувати для прикраси столу.

Мови програмування виробили кілька загальних підходів до виразів відносин цих трьох типів. Зокрема, більшість об'єктно-орієнтованих мов безпосередньо підтримують різні комбінації наступних видів відносин:

• асоціація

• успадкування

• агрегація

• використання

• інстанціювання

• метакласс.

Відносини: залежності Асоціації

Агрегації

Узагальнення

Альтернативою успадкування є делегування, при цьому об'єкти розглядаються як прототипи, які делегують свою поведінку споріднених їм об'єктах. Таким чином, класи стають не потрібні .

Успадкування, ймовірно, варто вважати найцікавішим семантично. Воно виражає відношення загального та приватного. Однак, одного спадкування недостатньо, щоб висловити все різноманіття явищ і відносин життя. Корисна також агрегація, що відображає відносини цілого і частини між екземплярами класів. Незайвим додати відношення використання, що означає наявність зв'язку між екземплярами класів.

Шаблон (template) або параметризований клас (parametrized class) призначений для позначення такого класу, який має один (або більше) нефіксованих формальний параметрів. Він визначає ціле сімейство або безліч класів, кожен з яких може бути отриманий зв'язуванням цих параметрів з дійсними значеннями. Зазвичай параметрами шаблонів служать типи атрибутів класів, такі як цілі числа, перерахування, масив рядків та ін. У більш складному випадку формальні параметри можуть представляти і операції класу.

Шаблони являють собою структуровані рекомендації і принципи.

Наприклад:

Ім’я шаблона

Expert

Вирішувана проблема

Який основний принцип розподілу обов’язків між об’єктами?

Розв’язок

Обов’язки назначаються класу, який має інформацію, необхідну для їх виконання.

Тобто, шаблон - це зазначені поіменно пара «проблема / рішення», яку можна застосовувати в різних контекстах, і містить рекомендації для застосування в різних конкретних ситуаціях.

Г рафічно шаблон зображується прямокутником, на верхньому правому куті якого приєднаний маленький прямокутник з пунктирних ліній (рис. 5.19), великий прямокутник може бути розділений на секції, аналогічно позначенню для класу. У верхньому прямокутнику вказується список формальних параметрів для тих класів, які можуть бути отримані на основі даного шаблону. У верхній секції шаблону записується його ім'я за правилами запису імен для класів.

Рис. 5.19. Графічне зображення шаблона на діаграмі класів

Шаблон не може бути безпосередньо використаний як клас, оскільки містить невизначені параметри. Найчастіше в якості шаблону виступає деякий суперклас, параметри якого уточнюються в його класах-нащадках. Очевидно, в цьому випадку між ними існує відношення залежності з ключовим словом "bind", коли клас-клієнт може використовувати певний шаблон для своєї подальшої параметризації. У більш окремому випадку між шаблоном і формуємим від нього класом має місце відношення узагальнення з успадкуванням властивостей шаблону. Концепція шаблонів є досить потужним засобом у ООП, і тому її використання в мові UML дозволяє не тільки скоротити розміри діаграм, але й найбільш коректно керувати успадкування властивостей і поведінки окремих елементів моделі.