Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектування інформаційних систем.doc
Скачиваний:
95
Добавлен:
21.09.2019
Размер:
28.77 Mб
Скачать

19.2.5. Відношення узагальнення

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

Стосовно діаграми класів таке відношення описує ієрархічна будова класів і успадкування їх властивостей і поведінки. При цьому передбачається, що клас-нащадок володіє всіма властивостями і поведінкою класу-предка, а також має свої власні властивості і поведінку, які відсутні в класу-предка. На діаграмах відношення узагальнення позначається суцільною лінією з трикутною стрілкою на одному з кінців (рис. 14.12). Стрілка вказує на загальніший клас (клас-предок або суперклас), а її відсутність – на спеціалізований клас (клас-нащадок або підклас).

Рис. 19.12. Графічне зображення відношення узагальнення в мові UML

Як правило, на діаграмі може вказуватися декілька ліній для одного відношення узагальнення, що відображає його таксономічний характер. У цьому випадку загальніший клас розбивається на підкласи одним відношенням Узагальнення. Наприклад, клас Геометрична_фігура_на_площині (курсив позначає абстрактний клас) може виступати як суперклас для підкласів, що відповідають конкретним геометричним фігурам, таким як, Прямокутник, Коло, Еліпс і ін. Даний факт може бути представлений графічно у формі діаграми класів такого вигляду (рис. 19.13).

Рис. 19.13. Приклад графічного зображення відношення узагальнення класів

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

Рис. 19.14. Варіант графічного зображення відношення узагальнення класів для випадку об'єднання окремих ліній

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

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

Як обмеження можуть бути використані наступні ключові слова мови UML:

  • {complete} – означає, що у відношенні узагальнення специфіковані всі класи-нащадки, а інших класів-нащадків у даного класу-предка бути не може. Приклад – клас Клієнт_банку є предком для двох класів: Фізична_особа і Компанія, а інших класів-нащадків він не має. На відповідній діаграмі класів це можна вказати явно, записавши поряд з лінією узагальнення даний рядок-обмеження;

  • {disjoint} – означає, що класи-нащадки не можуть містити об'єктів, що одночасно є екземплярами двох або більше класів. У приведеному вище прикладі ця умова також виконується, оскільки передбачається, що ніяка конкретна фізична особа не може бути одночасно і конкретною компанією. У цьому випадку поряд з лінією узагальнення можна записати даний рядок-обмеження;

  • {incomplete} – означає випадок, протилежний першому. А саме, передбачається, що на діаграмі вказані не всі класи-нащадки. У подальшому можливо заповнити їх перелік не змінюючи вже побудовану діаграму. Приклад – діаграма класу "Автомобіль", вказівка всіх без виключення моделей автомобілів тотожне із створенням відповідного каталогу. З іншої сторони, для окремої задачі, такої як розроблення системи продажу автомобілів конкретних моделей, у цьому немає необхідності. Але вказати неповноту структури класів-нащадків усе ж таки треба;

  • {overlapping} – означає, що окремі екземпляри класів-нащадків можуть належати одночасно декільком класам. Приклад – клас "Багатокутник" є класом-предком для класу "Прямокутник" і класу "Ромб". Проте існує окремий клас "Квадрат", екземпляри якого одночасно є об'єктами перших двох класів. Цілком природно таку ситуацію вказати явно за допомогою даного рядка-обмеження.

З врахуванням можливості використання рядків-обмежень діаграма класів (рис. 19.14) може бути зображена без багатокрапок і без втрати інформації (рис. 19.15).

Рис. 19.15. Варіант графічного зображення відношення узагальнення класів з використанням рядка-обмеження

Щоб проілюструвати особливості використання відношення узагальнення, перетворимо один з розглянутих раніше прикладів зображення класів у графічну нотацію мови UML. В якості такого прикладу розглянемо ієрархію вкладеності класів для абстрактного класу "Автомобіль" (див. рис. 3.2, 4.7). Відношення між окремими класами на цих рисунках є саме відношенням узагальнення, яке в мові UML має спеціальне графічне позначення. З врахуванням цієї графічної нотації, фрагмент семантичної мережі для представлення ієрархії класу "Автомобіль" (див. рис. 4.7) може бути представлений у вигляді діаграми класів, наведеної на рис. 19.16.

Рис. 19.16. Фрагмент діаграми класів з відношенням узагальнення для подання ієрархії класів "Автомобіль" з розглянутого раніше прикладу (див. рис. 4.7)

Відмітимо, що у такому прикладі всі класи верхніх рівнів є абстрактними, тобто не можуть бути представлені своїми екземплярами. Саме тому їх імена записані курсивом. На відміну від них класи нижнього рівня є конкретними, оскільки можуть бути представлені своїми екземплярами, якими виступають виготовлені автомобілі відповідної моделі з унікальним заводським номером.

Примітка

Як вправа для закріплення розглянутого матеріалу можна спробувати побудувати діаграму класів для бібліотек стандартних класів MFC (Microsoft) і VCL (Borland/Inprise) з використанням графічної нотації мови UML.