Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Моделювання ПЗ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.04 Mб
Скачать
  1. Конкретні і абстрактні класи

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

Розглянуті вище позначення відносяться до конкретних класах. Від них слід відрізняти абстрактні класи.

Абстрактний клас (абстрактний клас) - клас, який не має екземплярів або об'єктів.

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

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

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

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

В UML прийнята певна стандартизація запису атрибутів класу, яка підпорядковується деяким синтаксичним правилам:

<Квантор видимості> <ім'я атрибута> [кратність]:

<Тип атрибута> = <початкове значення> {рядок-властивість}.

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

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

  • Символ "+" - позначає атрибут з областю видимості типу загальнодоступний (публічний). Атрибут з цією областю видимості доступний або видний з будь-якого іншого класу пакету, в якому визначена діаграма.

  • Символ "#" - позначає атрибут з областю видимості типу захищений (захищені). Атрибут з цією областю видимості недоступний або не видно для всіх класів, за винятком підкласів даного класу.

  • Символ "-" - позначає атрибут з областю видимості типу закритий (приватний). Атрибут з цією областю видимості недоступний або не видно для всіх класів без виключення.

  • І, нарешті, символ "~" - позначає атрибут з областю видимості типу пакетний (пакет). Атрибут з цією областю видимості недоступний або не видно для всіх класів за межами пакету, в якому визначено клас-власник даного атрибуту.

Квантор видимості може бути опущений. Його відсутність означає, що видимість атрибута не вказується. Ця ситуація відрізняється від прийнятих за умовчанням угод в традиційних мовах програмування, коли відсутність квантора видимості трактується як public чи private. Однак замість умовних графічних позначень можна записувати відповідне ключове слово: public, protected, private, package.

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

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

Кратність атрибута характеризує загальну кількість конкретних атрибутів даного типу, що входять до складу окремого класу. У загальному випадку кратність записується у формі рядка тексту з цифр у квадратних дужках після імені відповідного атрибута, при цьому цифри розділяються двома точками: [нижня межа .. верхня межа], де нижня і верхня межі позитивні цілі числа. Кожна така пара служить для позначення окремого замкнутого інтервалу цілих чисел, у якого нижня (верхня) межа дорівнює значенню нижньої межі (верхній). В якості верхньої межі може використовуватися спеціальний символ «*» (зірочка), який означає довільне позитивне ціле число, тобто необмежену зверху значення кратності відповідного атрибута.

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

Якщо в якості кратності вказується єдине число, то кратність атрибута приймається рівній даному числу. Якщо ж вказується єдиний знак "*", то це означає, що кратність атрибута може бути довільним позитивним цілим числом або нулем. В UML кратність широко використовується також для завдання ролей асоціацій, складових об'єктів і значень атрибутів. Якщо кратність атрибута не вказана, то за умовчанням в мові UML приймається її значення рівне [1 .. 1], тобто в точності 1.Тип атрибута являє собою вираз, семантика якого визначається деяким типом даних, визначених у пакеті Типи даних мови UML або самим розробником. У нотації UML тип атрибута іноді визначається залежно від мови програмування, який передбачається використовувати для реалізації даної моделі. У найпростішому випадку тип атрибута вказується рядком тексту, що має осмислене значення в межах пакету або моделі, до яких відноситься розглянутий клас.

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

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

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

Знак "/" перед ім'ям атрибута вказує на те, що даний атрибут є похідним від деякого іншого атрибуту цього ж класу.

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

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

Операції класу записуються в третій зверху секції прямокутника класу, яку часто називають секцією операцій. Кожній операції класу відповідає окремий рядок, яка складається з квантора видимості операції, імені операції, виразу типу, що повертається операцією значення і, можливо, рядку-властивості даної операції. Загальний формат запису окремої операції класу наступний:

<Квантор видимості> <ім'я операції>

(список параметрів):

<Вираз типу значення, що повертається>

{Рядок-властивість}

Квантор видимості, як і у випадку атрибутів класу, може приймати одне з чотирьох можливих значень public, protected, private, package і позначатися як словом так і відповідним символом (+#-~). Квантор видимості для операції може бути опущений. У цьому випадку його відсутність просто означає, що видимість операції не вказується.

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

Список параметрів є переліком розділених комою формальних параметрів, кожен з яких, у свою чергу, може бути представлений в наступному вигляді:

<Напрямок параметра> <ім'я параметра>:

<Вираз типу> =<Значення параметра за замовчуванням>.

Параметр (parameter) - специфікація змінної операції, яка може бути змінена, передана або повернута.

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

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

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

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

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

Розширення мови UML для побудови моделей програмного забезпечення та бізнес-систем

Одним з безперечних достоїнств мови UML є наявність механізмів розширення, які дозволяють ввести в розгляд додаткові графічні позначення, орієнтовані для вирішення завдань з певної предметної області. Мова UML містить два спеціальних розширення: профіль для процесу розробки програмного забезпечення (The UML Profile for Software Development Processes) і профіль для бізнес-моделювання (The UML Profile for Business Modeling).

У рамках першого з них запропоновано три спеціальних графічних примітиву, які можуть бути використані для уточнення семантики окремих класів при побудові різних діаграм:

  • Керуючий клас (control class) - клас, що відповідає за координацію дій інших класів. На кожній діаграмі класів повинен бути хоча б один керуючий клас, причому кількість посилаються об'єктам керуючого класу повідомлень мало, в порівнянні з числом розсилаємих ними. Керуючий клас відповідає за координацію дій інших класів. У кожної діаграми класів повинен бути хоча б один керуючий клас, контролюючий послідовність виконання дій цього варіанту використання. Як правило, даний клас є активним і ініціює розсилку безлічі повідомлень інших класів моделі. Крім спеціального позначення керуючий клас може бути зображений у формі прямокутника класу із стереотипом << control >> (рис. 5.3, а).

  • Клас-сутність (entity class) - пасивний клас, інформація про який повинна зберігатися постійно і не знищуватися з виключенням системи. Клас-сутність містить інформацію, яка повинна зберігатися постійно і не знищується із знищенням об'єктів даного класу або припиненням роботи модельованої системи, пов'язані з виключенням системи або завершенням програми. Як правило, цей клас відповідає окремій таблиці бази даних. У цьому випадку його атрибути є полями таблиці, а операції - приєднаними або збереженими процедурами. Цей клас пасивний і лише приймає повідомлення від інших класів моделі. Клас-сутність може бути зображений також стандартним чином у формі прямокутника класу із стереотипом << entity >> (рис. 5.3, б).

  • Граничний клас (boundary class) - клас, який розташовується на кордоні системи із зовнішнім середовищем і безпосередньо взаємодіє з акторами, але є складовою частиною системи. Граничний клас може бути зображений також стандартним чином у формі прямокутника класу із стереотипом << boundary >> (рис. 5.3, в).

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

Інтерфейс (interface) - іменоване безліч операцій, які характеризують поведінку окремого елемента моделі.

Інтерфейс в контексті мови UML є спеціальним випадком класу, у якого є операції, але відсутні атрибути. Для позначення інтерфейсу використовується спеціальний графічний символ окружність або стандартний спосіб - прямокутник класу зі стереотипом << interface >> (рис. 5.5).

На діаграмі варіантів використання інтерфейс зображується у вигляді маленького кола, поряд з яким записується його ім'я (рис. 5.5, а). В якості імені може використовуватися іменник, яке характеризує відповідну інформацію або сервіс, наприклад, "Датчик температури", "Форма введення", "Сирена", "Відеокамера" (рис. 5.5, б). З урахуванням мови реалізації моделі ім'я інтерфейсу, як і імена інших класів, рекомендується записувати на англійській і починати з великої літери I, наприклад, ITemperatureSensor, IsecureInformation (рис. 5.5, в).

Рис. 5.5. Приклади графічного зображення інтерфейсів на діаграмах класів

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