КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лекція № 6
Тема: UML-діаграми класів План 1. Принципи побудови UML-діаграм класів
Ключові поняття: Клас, екземпляр класу, атрибут, відношення
Короткий виклад теоретичного матеріалу 1. Принципи побудови UML-діаграм класів Класи та їхні екземпляри (об'єкти) утворюють фундамент, на який опирається об'єктно-орієнтований підхід до проектування та розробки програмного забезпечення. Класи - головні сутності при моделюванні програмних систем за допомогою UML. Моделювання класів дає змогу побудувати та представити систему в термінах об'єктно-орієнтованої концепції. Таке представлення системи має важливі переваги порівняно з іншими моделями. По-перше, модель класів відображає предметну область задачі, а, отже, є зрозумілою спеціалісту в цій предметній області, що дає змогу залучати до проектування системи вузькопрофесійних спеціалістів. По-друге, модель класів тривіально перетворюється в реалізацію на об'єктно-орієнтованих мовах з повним збереженням семантики моделі. Моделі класів в UML можуть зображатися різними типами діаграм, кожен з яких відображає ті чи інші аспекти моделі і, відповідно, організації системи. Найчастіше моделі класів зображають за допомогою діаграм класів (Class Diagram). Клас - головний елемент на діаграмах класів, що відображає сукупність однотипних об'єктів зі спільними атрибутами, операціями та семантикою. Зображення класу - прямокутник. У зображенні класу виокремлюють три секції, в яких послідовно записують назву, атрибути та операції. Кожну секцію, крім першої, можна опустити. Назва класу має бути унікальною в межах пакета, в якому розташовано клас. Назви абстрактних класів в UML позначають курсивом. Зазвичай, клас може налічувати довільну кількість екземплярів. Однак виникають ситуації, за яких число екземплярів класу необхідно обмежити. Найчастіше треба задавати клас, у якого: - немає жодного екземпляра - службовий клас (Utility); - рівно один екземпляр - синглетний клас (Singleton); - строго визначена кількість екземплярів; - довільна кількість екземплярів - варіант за домовленістю. Кількість екземплярів класу називають кратністю класу (multiplicity), яку задають у специфікації класу. Кратність класу, залежно від інструментального засобу, може відображатися за допомогою спеціальної позначки (малий пунктирний квадратик) або числа у правому верхньому куті прямокутника, який зображає клас. Атрибут - це позначене місце (слот), в якому може/можуть зберігатися значення. Загальний формат атрибутів такий: [<видимість>] <назва> [<кратність>] [:<тип>] [=<початкове значення>][<властивості>] Видимість атрибута визначає рівень доступу до атрибута і найчастіше набуває таких значень1: - відкритий (public) - передбачає необмежений доступ до атрибута з боку інших класів і позначається символом "+"; - захищений (protected) - передбачає доступ до атрибута лише класам, які його наслідують, і позначається символом "#"; - закритий (private) - забороняє доступ до атрибута всім іншим класам і позначається символом "-". Назва атрибута має бути унікальною для певного класу. Тип атрибута бажано задавати відповідно до типів даних у мові програмування, на якій реалізовуватимуть модель. Кратність визначає атрибут-масив для зберігання множини значень (здебільшого, кратність обмежується квадратними дужками). Для атрибута також може бути вказано його початкове значення. Можна задавати такі властивості атрибута: - changeable (змінюваний) - за домовленістю; - addOnly (тільки долучення) - можна долучати нові значення для атрибута-масиву, без можливості наступних змін; - frozen (заморожений) - після ініціалізації значення атрибута не змінюється (відповідає слову const у С++). Статичні атрибути (або атрибути класу) на відміну від звичайних атрибутів належать не окремим об'єктам, а класу загалом, і позначаються на діаграмах класів підкресленням. На рис. 1.1 зображено клас Customer, який має чотири атрибути: два загальні атрибути name і birthDate, закритий атрибут password і статичний захищений атрибут count з початковим значенням 1.
Рис. 1.1 – Приклад класу Customer Операції дають змогу закласти в клас та його об'єкти деяку поведінку. Загальний формат запису операцій наступний: [<видимість>]<назва>([список параметрів])[:<тип результату>] Видимість операції визначає рівень доступу до операції і позначається аналогічно до видимості атрибутів. Назва операції має бути унікальною для певного класу. Тип результату визначає тип значення, яке повертає операція, і повинен відповідати типам даних у мові програмування, яку обрано для реалізації моделі. Список параметрів дає змогу специфікувати інтерфейс операції. Кількість параметрів у списку може бути довільною. Кожен параметр у загальному випадку записують так: [<напрям>] <назва> [:<тип>][= <значення за домовленістю>] Напрям визначає характер використання параметра в операції і найчастіше набуває таких значень: - in - параметр використовується як вхідний; - out - параметр використовується як вихідний; - inout - параметр використовується як вхідний і вихідний одночасно. Назва параметра має бути унікальною для певної операції. Тип параметра варто визначати з огляду на типи даних в обраній мові програмування. Значення за домовленістю відображає значення параметра, яке буде прийняте в операції, якщо цей параметр буде опущено. Приклади різних форм запису операцій наведено на рис. 1.2. Рис. 1.2 – Операції класу CreditCard Відповідальності класу визначають його функції та роль в системі і формуються на початкових стадіях моделювання. Зазвичай відповідальності класів зазначають на загальних діаграмах, які містять лише концептуальні класи системи, і слугують для створення початкового уявлення про розподіл функціональності за класами. Кожен клас може мати одну або більше відповідальностей. Абстрактні операції позначають на діаграмах класів курсивом. Якщо клас має хоча б одну абстрактну операцію, то його вважають абстрактним. Статичні операції (або операції класу) належать цілому класу, працюють зі статичними атрибутами класу і позначаються на діаграмах підкресленням. На рис. 1.3 зображено клас Document, який налічує чотири секції: назви, атрибути, операції та відповідальності класу.
Рис. 1.3 – Приклад класу Document На діаграмі кожна відповідальність представляється одним або кількома чітко сформульованими реченнями. Існує практика виносити відповідальності класу за межі класу і зазначати їх у примітках, асоційованих з класом. Відношення асоціації на діаграмах класів трапляються найчастіше. Асоціацію позначають суцільною лінією (може завершуватися однією чи двома стрілками), що з'єднує класи. Асоціація означає, що екземпляри одного класу взаємодіють з екземплярами іншого класу під час виконання програми. Оскільки екземплярів класу може бути багато і кожен може взаємодіяти з декількома екземплярами іншого класу, то асоціація є дескриптором, що описує множину зв'язаних об'єктів (екземплярів асоціації). Зв'язок між об'єктами у програмі може бути організований довільними способами. Можливість зв'язку означає, що об'єкт одного класу може надіслати повідомлення об'єкту іншого класу, зокрема, активізувати операцію або прочитати/змінити значення відкритого атрибута. Оскільки в об'єктно-орієнтованій програмі такі дії складають суть виконання програми, то виявлення асоціацій є однією з ключових задач під час її складання. Базова нотація асоціації (суцільна лінія) засвідчує, що об'єкти асоційованих класів (полюси асоціації) взаємодіють між собою під час виконання програми. Для асоціацій в UML передбачено чимало доповнень. Доповнення не є обов'язковими: їх використовують за необхідності, у різних ситуаціях по-різному. Якщо використовувати усі доповнення одразу, то діаграма класів стає перевантаженою настільки, що її важко читати і розуміти. Розглянемо найважливіші доповнення: - Назва асоціації (зазначається посередині над/під лінією) - ідентифікатор, який позначає асоціацію у моделі. Додаткового семантичного навантаження ця назва не несе, отож, зазвичай, не використовується (за винятком випадку, коли два класи зв'язані декількома асоціаціями). - Роль полюса асоціації (або специфікатор інтерфейсу) - конкретизує асоціацію щодо певного класу. Роль зазначається поблизу лінії неподалік класу, набуває вигляду: [<видимість>] <назва ролі> [: <тип>] Використовується для ідентифікації полюсів у випадку самоасоціації (клас зв'язується сам з собою) або у випадку, коли два класи зв'язані декількома різними асоціаціями. - Кратність полюса асоціації - визначає кількість об'єктів певного класу (з боку полюса), що беруть участь у зв'язку під час виконання програми. Кратність може задаватися конкретним числом, і тоді у кожному зв'язку з боку цього полюса беруть участь рівно стільки об'єктів, скільки задано. Найчастіше кратність задано у вигляді діапазону можливих значень: <нижня межа>.. <верхня межа> Кратність полюса або верхню межу може зображати символ "*", який позначає довільну кількість екземплярів класу. Приклади допустимих діапазонів: 1..5, 1..*, *, 0..4. - Сортування на полюсі асоціації - визначає тип упорядкування об'єктів на полюсі з кратністю понад 1. Можливі значення: упорядковано (ordered або sorted), неупорядковано (unordered або unsorted). За домовленістю - неупорядковано. - Змінюваність на полюсі асоціації (Is changeable) - визначає можливість/неможливість зміни кількості екземплярів класу з боку полюса під час роботи програми (у межах специфікованої кратності). - Напрям навігації на полюсі асоціації (Is navigable) - визначає можливість/неможливість доступу до екземплярів класу з боку полюса за допомогою певної асоціації. Ті полюси, через які навігація можлива, на діаграмах позначають стрілками. У деяких CASE-засобах відсутність стрілок означає можливість навігації у будь-якому напрямку. Найчастіше використовують бінарні асоціації (Binary Association) - відношення між двома класами або рефлексивне відношення класу із самим собою. На рис. 1.4 зображено бінарну асоціацію з назвою Містить типу "один до багатьох" між класами Авіарейс і Місце (у літаку).
Рис. 1.4 – Приклад бінарної асоціації між класами Можлива ситуація, коли один екземпляр класу асоціюється з декількома екземплярами того ж самого класу. Нехай один екземпляр класу ЧлениКафедри представляє завідувача кафедри, а інші екземпляри цього класу - викладачів. Завідувач кафедри керує викладачами. Зв'язок, який виникає між екземплярами одного і того ж класу, називають самоасоціацією (рис. 1.5).
Рис. 1.5 – Приклад самоасоціації Здебільшого асоціація між класами А і В - це множина пар (а; b), де а - об'єкт класу А, а b - об'єкт класу В. Ці пари є екземплярами асоціації (зв'язками). Отже, асоціація є класом, який ще може володіти іншими додатковими властивостями, які залежать від асоціації. Для визначення цих властивостей асоціації використовують асоційований клас (associaton class), який зображається, зазвичай, прямокутником і зв'язується з відповідною асоціацією штриховою лінією. Назви асоціації та асоційованого класу мають збігатися. Розглянемо, наприклад, постачання деталей для виготовлення деякого виробу (рис. 1.6). Рис. 1.6 – Приклад асоційованого класу
Багатополюсна асоціація (N-ary Association) - це зв'язок між трьома та більше класами. Такий зв'язок графічно зображають ромбом, до якого підходять лінії, що з' єднують ромб із класами. Клас, що описує зв'язок, приєднується до ромба за допомогою штрихової лінії. Приклад такої асоціації зображено на рис. 1.7. Рис. 1.7 – Приклад багатополюсної асоціації У мові UML використовують два часткові й дуже важливі випадки відношення асоціації - агрегацію та композицію. В обох випадках йдеться про моделювання відношення типу "частина - ціле". Відношення такого типу є відношеннями асоціації, оскільки частини і ціле, зазвичай, взаємодіють між собою. Агрегація (Aggregation) від класу А до класу В означає, що об'єкти (один чи декілька) класу А входять до складу об'єкта класу В. На діаграмі класу це відзначається за допомогою спеціального графічного доповнення: на полюсі асоціації з боку "цілого" (у нашому випадку клас В) зображається порожній ромбик. При агрегації жодних додаткових обмежень не накладають: об'єкт класу А ("частина") може бути зв'язаний відношеннями агрегації з іншими об'єктами (тобто брати участь у декількох агрегаціях), може створюватися і знищуватися незалежно від об'єкта класу В ("цілого"). На рис. 1.8 зображено агрегацію між класом Рисунок ("ціле") і класом Фігури ("частина").
"Ціле" у композиції слугує класом-власником, а "частина" - підпорядкованим класом. Підпорядковані класи, що належать до композиції, не можуть водночас налічувати декілька класів-власників. Об'єкт-власник і його складові частини (підпорядковані об'єкти) не можуть існувати окремо. Усі підпорядковані об'єкти змінюються разом із об'єктом-власником. Графічно, композицію зображають як "дерево", коренем якого є клас-власник, а листками - підпорядковані класи. На рис. 1.9 зображено частину композиції класу Автомобіль. Рис. 1.9 – Приклад композиції Узагальнення (generahzation) - це відношення між двома сутностями, одна з яких є частковим (або спеціалізованим) випадком іншої. Відношення узагальнення передбачає виконання принципу підстановки: якщо сутність А - загальне (або батько - parent, предок) є узагальненням сутності В - часткове (або дитина - child, нащадок), то В може бути підставлене замість А. Графічно відношення узагальнення зображають лінією з незафарбованою стрілкою, яка вказує на предка (рис. 1.10). Відношення успадкування між класами в об'єктно-орієнтованому програмуванні є типовим прикладом узагальнення, за якого об'єкт спеціалізованого класу (нащадок) може бути підставлений замість об'єкта узагальненого класу (батька, предка). Відношення узагальнення часто застосовують на діаграмі класів. Дійсно, важко уявити ситуацію, коли між об'єктами в одній системі немає нічого загального. Зазвичай, загальне є - і це загальне доцільно виокремити у деякий клас (суперклас). У цьому випадку загальні складові (атрибути та операції), зібрані в суперкласі, автоматично успадковуються підкласами. Суперклас може бути конкретним (тобто мати власні екземпляри), або абстрактним, введеним саме для побудови відношення узагальнення. Узагальнення в моделі класів вводять довільно (за винятком вимоги відсутності циклів у ланцюжках узагальнень), зокрема, клас може бути підкласом декількох суперкласів (множинне успадкування); не потрібно, щоб у базових класів був загальний суперклас. На рис. 1.10 зображено узагальнення геометричної фігури.
На рис. 1.11 зображено залежність Області малювання від Геометричної фігури. Подібний зв'язок ніяк не регламентує тип відношення між об'єктами, а вказує лише на те, що залежний клас Геометрична фігура використовує якісь особливості реалізації іншого класу Область малювання. Рис. 1.11 – Приклад залежності між класами Під час моделювання класів залежності найчастіше використовують, щоб відобразити у сигнатурі операції той факт, що один клас використовує інший клас (незалежну сутність) як аргумент (рис. 1.12). У цьому випадку зміна одного класу знайде своє відображення при роботі іншого, оскільки незалежний клас може представити новий інтерфейс і/або поведінку. Рис. 1.12 – Виклик класу залежним класом Залежності можуть мати назви, хоча їх рідко використовують - у випадках, коли модель має чимало залежностей і доводиться на них посилатися. Здебільшого, для ідентифікації залежностей використовують стереотипи (див. вбудовану довідку засобу). Побудова діаграми класів займає центральне місце у проектуванні складних систем. Зазвичай, програміст при розробці нових проектів прагне використовувати попередній досвід, накопичений ним і/або іншими програмістами (стереотипний підхід). Це зумовлено бажанням використовувати тільки перевірені фрагменти програмного коду з метою істотного скорочення термінів реалізації проекту. До стереотипного підходу можна зачислити і механізми розширення UML, які дають змогу вводити додаткові графічні позначення, орієнтовані на розв'язування задач з певної предметної області. Важливе значення мають два спеціальні розширення: профіль розробки програмного забезпечення (The UML Profile for Software Development Processes) і профіль бізнес-моделювання (The UML Profile for Busіness ModeUng). У рамках профілю розробки програмного забезпечення запропоновано три спеціальні графічні позначення: для класу керування, класу-сутності та межового класу. Ці позначення використовують з метою уточнення семантики класів під час побудови різних діаграм. На рис. 1.13 наведені відповідні позначення: у формі піктограми (верхній рядок) і у формі класу зі стереотипом (нижній рядок). Рис. 1.13 – Позначення профілю розробки програмного забезпечення Клас керування (control class) відповідає за координацію поведінки об'єктів системи. У кожного прецеденту, зазвичай, є хоча б один клас керування, який контролює послідовність виконання дій цього прецеденту. Зазвичай, цей клас є активним та ініціює розсилання множини повідомлень іншим класам моделі. Клас керування може бути відсутнім у прецедентах, які здійснюють прості маніпуляції зі збереженими даними. Клас-сутність (entity) містить інформацію, яка повинна зберігатися постійно і не знищуватися зі знищенням об'єктів певного класу чи припиненням роботи системи (вимиканням системи чи завершенням програми). Цей клас може відповідати окремій таблиці бази даних; у цьому випадку його атрибути є полями таблиці, а операції - збереженими процедурами. Зазвичай, цей клас є пасивним і лише приймає повідомлення від інших класів моделі. Класи-сутності є ключовими абстракціями (поняттями) ПО системи. Межовий клас (boundary) розташовується на межі системи з зовнішнім середовищем, однак є складовою частиною системи. Цей клас слугує посередником під час взаємодії зовнішніх об'єктів із системою. Зазвичай, для кожної пари актор - прецедент визначається один межовий клас. Типи межових класів: інтерфейс користувача (обмін інформацією з користувачем), системний інтерфейс і апаратний інтерфейс (протоколи використання, без деталей їхньої реалізації). Інтерфейс (interface) у контексті мови UML є спеціальним випадком класу, який має тільки операції. Для позначення інтерфейсу використовують спеціальний графічний символ - коло чи прямокутник класу зі стереотипом "interface". Інтерфейси на діаграмах відображають ті елементи моделі, які є видимими ззовні, проте їхня структура є прихованою від користувачів. Використання профілю розробки програмного забезпечення та інтерфейсу наведено на рис. 1.14 на прикладі побудови діаграми класів системи керування банкоматом. Зображена діаграма класів на рис. 1.14 є попередньою статичною моделлю системи керування банкоматом і може уточнюватися на наступних етапах роботи над проектом. Зокрема, може знадобитися змінити склад операцій окремих класів або їхню видимість, ввести додаткові атрибути або дещо детальніше розписати сигнатуру операцій. У рамках профілю бізнес-моделювання також запропоновано три спеціальні графічні позначення: - співробітник (worker) - клас опису співробітника, який є елементом бізнес-системи і взаємодіє з іншими співробітниками під час реалізації бізнес-процесу; - співробітник для зв'язків з оточенням (caseworker) - клас опису співробітника, який є елементом бізнес-системи і взаємодіє з акторами під час реалізації бізнесу-процесу; - бізнес-сутність (business entity) - спеціальний випадок класу-сутності, що також не ініціює жодних повідомлень.
Рис. 1.14 – Діаграма класів системи керування банкоматом
Питання для самоконтролю:
1. Дайте визначення класу? 2. Як зображується клас на діаграмі класів? 3. Опишіть формат запису атрибутів? 4. Опишіть формат запису операцій? 5. Опишіть формат запису параметрів? 6. Як записується відношення асоціації на діаграмі класів? 7. Як записується відношення узагальнення на діаграмі класів? 8. Як записується відношення агрегації на діаграмі класів? 9. Як записується відношення композиції на діаграмі класів?
Література:
1. Дудзяний І.М. Об’єктно-орієнтоване моделювання програмних систем: Навчальний посібник. – Львів: Видавничий центр ЛНУ імені Івана Франка, 2007. – 108 с. 2. Киммел Пол. UML. Универсальный язык программирования. НТ Пресс - 2008 3. Рамбо Д., Буч Г., Якобсон А. Язык UML изд.2. Пер. с англ. ДМК - 2007
Дата добавления: 2014-01-04; Просмотров: 1920; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |