Моделювання на uml

Моделювання на UML. Ф.Новіков, Д. Іванов.

3.2. Суті на діаграмі класів

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

У цьому розділі ми розглядаємо суті, використовувані на діаграмах класів, а в наступному розділі - відносини між цими сутностями.

3.2.1. класи

Клас - один з найбільш "багатих" елементів моделювання UML. Опис класу може включати безліч різних елементів, і щоб вони не плуталися, в мові передбачено групування елементів опису класу по секціях (compartment). Стандартних секцій три:

  • секція імені - поряд з обов'язковим ім'ям може містити також стереотип, кратність і список іменованих значень;
  • секція атрибутів - містить список описів атрибутів класу;
  • секція операцій - містить список описів операцій класу.

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

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

Мал. Типова нотація класу

Вмістом секції є текст ∇. Текст всередині стандартних секцій повинен мати певний синтаксис.

∇ Деякі інструменти дозволяють поміщати в секції класу не тільки тексти, але також фігури і значки.

Секція імені класу в загальному випадку має такий синтаксис.

Деякі інструменти допускають використання кількох альтернативних варіантів синтаксису для текстів в секціях. Наприклад, синтаксис опису атрибутів в стилі, рекомендованому UML, або ж в стилі цільової мови програмування даного інструменту. Такі варіації допускаються стандартом за умови, що варіанти синтаксису семантично еквіваленти і можуть бути перетворені одна в одну без втрати інформації. У даній книзі застосовується стандартний синтаксис.

Імені класу може передувати стереотип. У цій таблиці наведено стандартні стереотипи класів.

Табл. Стандартні стереотипи класів

Обов'язкове ім'я класу може бути виділено курсивом і в цьому випадку даний клас є абстрактним. тобто які не мають безпосередніх примірників.

Якщо ім'я підкреслено, то це вже не ім'я класу, а ім'я об'єкта.

Клас, а також окремі елементи його опису можуть мати довільні задані користувачем обмеження і іменовані значення (див. Параграф 1.8.4).

Кратність класу задається за загальними правилами (див. Параграф 3.1.3).

Розглянемо приклад секції імені класу для нашої інформаційної системи відділу кадрів.

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

Мал. Секція імені служби

3.2.2. атрибути

Атрибут - це іменоване місце (або, як кажуть, слот), в якому може зберігатися значення.

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

Видимість, як зазвичай, позначається знаками +. -. #.

Ще раз підкреслимо, що якщо видимість не вказана, то ніякого значення видимості за замовчуванням не мається на увазі.

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

Підкреслення опису атрибута відповідає описателю static. застосовується в багатьох об'єктно-орієнтованих мовах програмування.

Кратність, якщо вона присутня, визначає даний атрибут як масив (певної або невизначеної довжини).

Тип атрибута - це або примітивний (вбудований) тип, або тип, визначений користувачем (див. Параграф 3.2.4).

Початкове значення має очевидний сенс: при створенні екземпляра даного класу атрибут отримує вказане значення. Зауважимо, що якщо початкове значення не вказано, то ніякого значення за замовчуванням не мається на увазі. Якщо потрібно, щоб атрибут обов'язково мав значення, то про це повинен подбати конструктор класу.

Як і будь-який інший елемент моделі, атрибут може бути наділений додатковими властивостями у формі обмежень і іменованих значень.

У атрибутів є ще одне стандартне властивість: змінюваність (changeability). У наступній таблиці перераховані можливі значення цієї властивості.

Табл. Значення властивості змінності атрибута

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

Всі разом (ім'я операції, параметри і тип результату) зазвичай називають сигнатурою (signature) операції.

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

Операція має кілька важливих властивостей, які вказуються в списку властивостей як іменовані значення.

По перше. це паралелізм (concurrency) - властивість, що визначає семантику одночасного (паралельного) виклику даної операції. У додатках, де є тільки один потік управління, ніяких паралельних викликів бути не може. Дійсно, якщо операція викликана, то виконання програми призупиняється в точці виклику до тих пір, поки не завершиться виконання викликаної операції. У однопоточних додатках в кожен момент часу управління знаходиться в одній певній точці програми і виконується рівно одна певна операція. Рекурсивний виклик (тобто виклик операції з неї самої) не рахується паралельним, оскільки при рекурсивном виклик виконання операції, як зазвичай, припиняється і, таким чином, завжди виконується тільки один екземпляр рекурсивної операції. Не так стоїть справа в додатках, де є кілька потоків управління. В такому випадку операція може бути викликана з одного потоку і в той час, поки її виконання ще не завершилося, викликана з іншого потоку. Значення властивості concurrency визначає, що буде відбуватися в цьому випадку. Можливі варіанти і їх описи дані нижче.

Табл. Значення властивості concurrency

Операція не допускає паралельного виклику (не є повторно-входимость). Якщо паралельний виклик відбувається, то подальша поведінка системи не визначено.

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

Операція допускає довільне число паралельних викликів і гарантує правильність свого виконання. Такі операції називаються повторно-входимость (reenterable).

∇ Така семантика може породити стан взаємного блокування (або глухого кута), в якій два або більше процесів взаємно блокують один одного і жоден з них не може продовжити виконання.

По-друге. операція має властивість. значення якого вказує, чи має операція побічним ефектом. Якщо значення даного властивості true. то виконання операції не змінює стану системи - операція тільки обчислює значення, які повертаються в точку виклику ∇. В іншому випадку, тобто при значення false. операція змінює стан системи: привласнює нові значення атрибутів, створює або знищує об'єкти і т.п. За замовчуванням операція має властивість. Тому, якщо потрібно вказати, що дана операція - це функція без побічних ефектів, то досить написати.

∇ Такі операції традиційно називають функціями, або запитами.

По-третє. якщо реалізація операції не повинна перевизначатися в підкласах, то використовується обмеження. За замовчуванням .

Розглянемо приклади опису можливих операцій класу Person інформаційної системи відділу кадрів.

Табл. Приклади опису операцій

Схожі статті