5.2 Діаграми класів
Така діаграма відображає онтологію домену і за змістом еквівалентна інформаційній моделі за методом С. Шлеєр та С. Меллора (див. п. 3.4.1): визначається склад класів об’єктів як базових абстракцій та їхні взаємовідносини. Причому нотація для опису класів забезпечує відокремлення опису функцій від опису даних, застосування принципів інкапсуляції і наслідування даних.
Діаграма має вигляд символів класів — так званих іконок та зв’язків між ними. Терміном іконка позначають стандартизоване, фіксованої форми, візуальне зображення (так би мовити, ієрогліф) певного поняття, яке легко розпізнається. Іконка класу має форму прямокутника, який може поділятися на дві або три частини. Верхня його частина обов’язкова, вона містить ім’я класу. Друга й третя частини прямокутника можуть наводитися або пропускатися і містять: друга - список атрибутів класу, третя - список операцій класу (див. рис. 5.2).
Рисунок 5.2 - Приклади подання класу
Інакше кажучи, діаграма класу може відображати лише імена класів або імена та відповідні атрибути класів, або імена, атрибути та операції (методи) класів.
Атрибути можуть бути такими, типи значень яких вважаються наперед визначеними в UML, як-от: розмір, площа, кут, видимість. Останній атрибут може мати такі значення:
- спільна (public) означає, що операцію класу можна викликати з будь-якої частини програми будь-яким об’єктом системи;
- захищена (protected) означає, що операцію можна викликати тільки об’єктом того класу, в якому її визначено, або його спадкоємцями;
- приватна (private) означає, що операцію можна викликати тільки об’єктом того класу, в якому її визначено.
Воднораз користувач може визначати специфічні для нього атрибути.
Операція - це сервіс, який може надавати екземпляр класу, якщо буде відповідний виклик. Операція має назву і список аргументів.
На діаграмі може бути показано не лише класи, а й окремі їхні екземпляри. Може бути побудовано діаграму екземплярів класів. З метою відрізнити класи від їхніх екземплярів назви других у зображенні іконки класу підкреслюються. Наприклад, на рис. 5.3, а зображено клас, а на рис. 5.3,б - його екземпляр.
Рисунок 5.3 - Зображення класу (а) і екземпляру (б)
Класи можуть перебувати у певних відношеннях або зв’язках. Розглядаються бінарні асоціації, в яких об’єкт з кожної сторони відіграє свою роль (див. рис. 5.4).
Рисунок 5.4 - Ролі об’єктів в асоціаціях
Для окремих типових зв’язків семантика вважається встановленою.
Це такі.
Асоціація - взаємна залежність між об’єктами різних класів, кожен з яких є рівноправним членом залежності. Для асоціації може позначатися кількість екземплярів об’єктів кожного класу, які беруть участь у зв’язку (0 - якщо жодного, 1 - якщо один, * - якщо багато). Можуть вказуватися мінімальна й максимальна кількість, наприклад, 0,1...* означає, що на відповідному кінці асоціації може не бути жодного екземпляра, бути один або багато. Приклад асоціації наведений на рисунку 5.5.
Рисунок 5.5 -Асоціація
Агрегація або відношення частина-до-цілого. Особливість цього відношення полягає в тому, що час існування об’єкта-частини збігається з часом існування об’єкта-цілого. Стрілка з ромбом на кінці, яка позначає відношення агрегації, спрямована від об’єкта-частини до об’єкта-цілого, як це подано на рис. 5.6.
Рисунок 5.6 - Відношення агрегації
Наслідування підкласом властивостей суперкласу може мати позначку "один до багатьох". Різновидами наслідування можуть бути відношення узагальнення й спеціалізації. Приклади наведені на рис. 5.7.
Рисунок 5.7 - Відношення узагальнення
Альтернативна асоціація. Деякий клас одночасно може перебувати у зв’язку тільки з одним елементом певної множини класів. Можливі альтернативи позначаються тим, що відповідні їм дуги перетинаються пунктирною лінією з позначкою {or} (або), як це показано на рис. 5.8.
Рисунок 5.8 - Альтернативна асоціація
Залежність класів (class relation). Є багато видів залежностей між класами: деякий клас-клієнт може використовувати певний сервіс (операцію) іншого класу; класи можуть бути пов’язані відношенням трасування, коли один трансформується в другий унаслідок певного процесу життєвого циклу, наприклад, клас аналізу перетворюється в клас проекту, а потім у клас реалізації. Один клас може бути уточненням другого, як на рис. 5.9.
Рисунок 5.9 - Асоціація залежностей
Екземпляризація (specimenation). Це залежність між параметризованим абстрактним класом-шаблоном (template) і реальним класом, який ініційовано шляхом визначення параметрів шаблону. Прикладом параметризованих класів є контейнерні класи для мови програмування C++. На діаграмі класів параметризований клас позначається так: на рамці іконки класу зверху праворуч зображається штрихами маленький прямокутник, всередині якого подаються назви формальних параметрів шаблона, як на рис. 5.10, де Т є параметр, що визначає тип елементу множини. На ім’я класу, який створюється внаслідок визначення параметрів шаблону, посилаються в кутових дужках після імені параметризованого класу-шаблону як префікса. Детальніше параметризовані абстрактні класи розглядаються в п. 12.3.3.
Діаграма класів може належати до екземплярів класу, суперкласів (абстрактних класів) або підкласів (конкретних класів). У кожному з конкретних прикладів на іконці класу перед його назвою зазначається його стереотип («підклас», «суперклас» тощо), при цьому за замовчуванням вважається клас.
Рисунок 5.10 - Параметризований клас
Для стереотипів, які позначають відношення, фіксованими є такі: «асоціація», «наслідування», «екземпляризація», «узагальнення», «розширення>> та інші. Крім того, користувач може вводити стереотипи, властиві специфіці його проблемної галузі, як-от: «успадковує», «контролює», «є наслідком» тощо.
Вінницький національний технічний університет