
- •Лекція 1. Вступ до програмної інженерії
- •Лекція 2. Поняття процесу проектування програмних продуктів
- •Лекція 3.Вдосконалення процесу проектування пз
- •Лекція 4. Життєвий цикл пз
- •Лекція 5. Методології і технології проектування пс
- •Лекція 6. Екстремальне програмування
- •Замовник
- •Розробник
- •Лекція 7. Робочий продукт, дисципліна зобов'язань
- •Лекція 8. Управління вимогами
- •Лекція 9. Структурний підхід до проектування пс
- •Лекція 10. Об’єктно-орієнтований аналіз і проектування програмних систем
- •Приклад діаграми класів
- •Лекція 11. Ооап. Діаграмма станів (statechart diagram)
- •Лекція 12. Диаграма деяльності (activity diagram)
- •Лекція 14. Управління програмним проектом
- •Як добитися консенсусу?
- •Лекція 14. Якість програмного забезпечення та методи його контролю
- •Для кожного процесу потрібно мати плани розвитку процесу, що складаються як мінімум з наступних розділів.
- •Лекція 15. Вимірюваня і оцінка складності програм
- •Лекція 16: Стандарти iso, sw-cmm. Case-технології
- •Лекція 17. Перспективні методи розробки пз. Scrum
Лекція 12. Диаграма деяльності (activity diagram)
Діаграми діяльності на відміну від більшості інших засобів UML, запозичують ідеї з декількох різних методів, зокрема, методу моделювання станів SDL і мереж Петрі. Ці діаграми особливо корисні в описі поведінки, що включає велику кількість паралельних процесів.
Діаграми діяльності можна застосовувати для опису потоків подій у варіантах використання. За допомогою текстового опису можна достатньо детально розповісти про потік подій, але в складних і заплутаних потоках з безліччю альтернативних гілок буде важко зрозуміти логіку подій. Діаграми діяльності надають ту ж інформацію, що і текстовий опис потоку подій, але в наочній графічній формі.
Таким чином, діаграми діяльності можна вважати окремим випадком діаграм станів. Вони дозволяють реалізувати в мові UML особливості процедурного і синхронного управління, обумовленого завершенням внутрішніх деятельностей і дій. Основним напрямом використання діаграм діяльності є візуалізація особливостей реалізації операцій класів, коли необхідно представити алгоритми їх виконання.
Стан дії
Стан дії (action state) є спеціальним випадком стану з деякою вхідною дією і, принаймні, одним переходом, що виходить із стану. Цей перехід неявно припускає, що вхідна дія вже завершилася. Стан дії не може мати внутрішніх переходів, оскільки воно є елементарним. Звичайне використання стану дії полягає в моделюванні одного кроку виконання алгоритму (процедури) або потоку управління.
Кожна діаграма діяльності повинна мати єдине початкове і єдине кінцеве стани. Вони мають такі ж позначення, як і на діаграмі станів. При цьому кожна діяльність починається в початковому стані і закінчується в кінцевому стані. Саму діаграму діяльності прийнято розташовувати так, щоб дії слідували зверху вниз. В цьому випадку початковий стан зображатиметься у верхній частині діаграми, а кінцеве в нижней.
Переходи
Если из состояния действия выходит единственный переход, то он может быть никак не помечен. Если же таких переходов несколько, то выполняться может только один из них. В этом случае для каждого из таких переходов должно быть явно записано сторожевое условие в прямых скобках. Условие же истинности должно выполняться только одного из них. Подобный случай встречается тогда, когда последовательно выполняемая деятельность должна разделиться на альтернативные ветви в зависимости от значения некоторого промежуточного результата. Такая ситуация получила название ветвления, а для ее обозначения применяется специальный символ.
Графічно галуження на діаграмі діяльності позначається невеликим ромбом, усередині якого немає ніякого тексту. У цей ромб може входити тільки одна стрілка від того стану дії, після виконання якого потік управління повинен бути продовжений по одній з гілок, що взаємно виключають. Прийнято вхідну стрілку приєднувати до верхньої або лівої вершини символу галуження. Стрілок, що виходять, може бути дві або більш, але для кожної з них явно указується відповідна сторожова умова у формі булевого виразу.
Один з недоліків звичайних блок-схем алгоритмів пов'язаний з проблемою зображення паралельних гілок окремих обчислень. Оскільки розпаралелювання обчислень істотно підвищує загальну швидкодію програмних систем, необхідні графічні примітиви для представлення паралельних процесів. У мові UML для цієї мети використовується спеціальний символ для розділення і злиття паралельних обчислень або потоків управління. Таким символом є пряма риска. Як правило, така риска зображається відрізком горизонтальної лінії, товщина якої декілька ширше за основні суцільні лінії діаграми діяльності. При цьому розділення (concurrent fork) має один вхідний перехід і декілька що виходять, а злиття (concurrent join) має декілька вхідних переходів і що один виходить.
Доріжки
Діяльність будь-якої організації також є сукупністю окремих дій, направлених на досягнення необхідного результату. Проте, стосовно бізнес процесам, бажане виконання кожної дії асоціювати з конкретним підрозділом компанії. В цьому випадку підрозділ несе відповідальність за реалізацію окремих дій, а сам бізнес процес представляється у вигляді переходів дій з одного підрозділу до іншого.
Для моделювання цих особливостей в мові UML використовується спеціальна конструкція, що отримало назву доріжки (swimlanes). Всі стани дії на діаграмі діяльності діляться на окремі групи, які відділяються один від одного вертикальними лініями. Дві сусідні лінії утворюють доріжку, а група станів між цими лініями виконується окремим підрозділом (відділом, групою, відділенням, філією) організації.
Назви підрозділів явно указуються у верхній частині доріжки. Перетинати лінію доріжки можуть тільки переходи, які, в цьому випадку, позначають вихід або вхід потоку управління у відповідний підрозділ. Порядок проходження доріжок не несе якої-небудь семантичної інформації і визначається міркуваннями зручності.
Об'єкти
В общем случае действия на диаграмме деятельности выполняются над теми или иными объектами. Эти объекты либо инициируют выполнение действий, либо определяют некоторый их результат. Действия специфицируют вызовы, которые передаются от одного объекта графа деятельности к другому.
Для графічного представлення об'єктів використовується прямокутник класу, з тією відмінністю, що ім'я об'єкту підкреслюється. Далі після імені може указуватися характеристика стану об'єкту в прямих дужках. Такі прямокутники об'єктів приєднуються до станів дії відношенням залежності пунктирною лінією із стрілкою. Відповідна залежність визначає стан конкретного об'єкту після виконання попередньої дії.
На діаграмі діяльності з доріжками розташування об'єкту може мати деякий додатковий сенс. А саме, якщо об'єкт розташований на межі двох доріжок, то це може означати, що перехід до наступного полягання дії в сусідній доріжці асоційований з готовністю деякого документа (об'єкт в деякому стані). Якщо ж об'єкт цілком розташований усередині доріжки, то і стан цього об'єкту цілком визначається діями даної доріжки.
Приклади діаграм діяльності
Діаграма послідовності (sequence diagram)
Для моделювання взаємодії об'єктів в часі в мові UML використовуються діаграми послідовності. Взаємодія зображається у вигляді двовимірної схеми. По вертикалі проходить тимчасова вісь, направлена зверху вниз. По горизонталі указуються ролі, які представляють окремі ролі.
Об'єкти
На діаграмі послідовності зображаються тільки ті об'єкти, які безпосередньо беруть участь у взаємодії. Ключовим моментом для діаграм послідовності є динаміка взаємодії об'єктів в часі.
У UML діаграма послідовності має як би два вимірювання. Перше зліва направо у вигляді вертикальних ліній, кожна з яких зображає лінію життя окремого об'єкту, що бере участь у взаємодії. Крайнім зліва на діаграмі зображається об'єкт, який є ініціатором взаємодії. Правіше зображається інший об'єкт, який безпосередньо взаємодіє з першим. Таким чином, всі об'єкти на діаграмі послідовності утворюють деякий порядок, визначуваний черговістю або ступенем активності об'єктів при взаємодії один з одним.
Другим вимірюванням діаграми послідовності є вертикальна тимчасова вісь, направлена зверху вниз. Початковому моменту часу відповідає сама верхня частина діаграми. Взаємодії об'єктів реалізуються за допомогою повідомлень, які посилаються одними об'єктами іншим. Повідомлення зображаються у вигляді горизонтальних стрілок з ім'ям повідомлення, а їх порядок визначається часом виникнення.
Масштаб на осі часу не указується, оскільки діаграма послідовності моделює лише тимчасову впорядкованість взаємодій типу «раніше-пізніше».
Лінія життя об'єкту
Линия жизни объекта (object lifeline) изображается пунктирной вертикальной линией, ассоциированной с единственным объектом на диаграмме последовательности. Линия жизни служит для обозначения периода времени, в течение которого объект существует в системе и, следовательно, может потенциально участвовать во всех ее взаимодействиях. Если объект существует в системе постоянно, то и его линия жизни должна продолжаться по всей плоскости диаграммы последовательности от самой верхней ее части до самой нижней.
Отдельные объекты, выполнив свою роль в системе, могут быть уничтожены, чтобы освободить занимаемые ими ресурсы. Для таких объектов линия жизни обрывается в момент его уничтожения. Для обозначения момента уничтожения объекта в языке UML используется специальный символ в форме латинской буквы «X». Ниже этого символа пунктирная линия не изображается, поскольку соответствующего объекта в системе уже нет, и этот объект должен быть исключен из всех последующих взаимодействий.
Не обязательно создавать все объекты диаграммы в начальный момент времени. Отдельные объекты могут создаваться по мере необходимости, экономя ресурсы системы и повышая ее производительность. В этом случае прямоугольник объекта изображается не в верхней части диаграммы последовательности, а в той части, которая соответствует моменту создания объекта. При этом прямоугольник объекта вертикально располагается в том месте диаграммы, которое по оси времени совпадает с моментом его возникновения в системе. Объект обязательно создается со своей линией жизни и, возможно, с фокусом управления.
Фокус управління
В процесі функціонування об'єктно-орієнтованих систем одні об'єкти можуть знаходитися в активному стані, безпосередньо виконуючи певні дії, або стані пасивного очікування повідомлень від інших об'єктів. Щоб явно виділити подібну активність об'єктів, в мові UML застосовується спеціальне поняття, що отримало назву фокусу управління (focus of control). Фокус управління зображається у формі витягнутого вузького прямокутника, верхня сторона якого позначає початок отримання фокусу управління об'єкту (початок активності), а його нижня сторона - закінчення фокусу управління (закінчення активності). Прямокутник розташовується нижче за позначення відповідного об'єкту і може замінювати його лінію життя, якщо на всьому її протязі він є активним.
Періоди активності об'єкту можуть чергуватися з періодами його пасивності або очікування. В цьому випадку у такого об'єкту є декілька фокусів управління. Важливо усвідомлювати, що отримати фокус управління може тільки існуючий об'єкт, у якого у цей момент є лінія життя. Якщо ж деякий об'єкт був знищений, то знов виникнути в системі він вже не може. Замість нього лише може бути створений інший екземпляр цього ж класу, який, строго кажучи, буде іншим об'єктом.
Повідомлення
У UML кожна взаємодія описується сукупністю повідомлень, якими об'єкти, що беруть участь в нім, обмінюються між собою. Повідомленням (message) є закінчений фрагмент інформації, який відправляється одним об'єктом іншому. Прийом повідомлення ініціює виконання певних дій, направлених на рішення окремої задачі тим об'єктом, якому це повідомлення відправлене.
Передбачається, що час передачі повідомлення достатній мало в порівнянні з процесами виконання дій об'єктами, тобто, за час передачі повідомлення з відповідними об'єктами не може відбутися ніяких змін. Якщо ж це припущення не може бути визнане справедливим, то стрілка повідомлення зображається під деяким нахилом, так щоб кінець стрілки розташовувався нижче за її початок.
В окремих випадках об'єкт може посилати повідомлення самому собі, ініціюючи так звані повідомлення рефлексій. Такі повідомлення зображаються прямокутником із стрілкою, почало і кінець якої співпадають. Подібні ситуації виникають, наприклад, при обробці натиснень на клавіші клавіатури при введенні тексту в редагований документ, при наборі цифр номера телефону абонента.
Таким чином, в мові UML кожне повідомлення асоціюється з деякою дією, яка повинна бути виконане об'єктом, що прийняв його. Дія може мати деякі аргументи або параметри, залежно від конкретних значень яких може бути отриманий різний результат. Відповідні параметри матиме і що викликає це дія повідомлення. Більш того, значення параметрів окремих повідомлень можуть містити умовні вирази, утворюючи галуження або альтернативні шляхи основного потоку управління.
Галуження потоку управління
Для зображення галуження потоку управління малюються дві або більш стрілки, що виходять з однієї точки фокусу управління об'єкту. При цьому відповідні умови повинні бути явно вказані поряд з кожною із стрілок у формі сторожової умови. Сторожові умови повинні взаємно виключати одночасну передачу альтернативних повідомлень.
Стереотипи повідомлень
У мові UML передбачені деякі стандартні дії, що виконуються у відповідь на отримання відповідного повідомлення. Ці дії можуть бути явно вказані на діаграмі послідовності у формі стереотипу поряд з повідомленням, до якого відносяться. В цьому випадку вони записуються в лапках. Використовуються наступні стереотипи повідомлень:
«call» (викликати) - повідомлення, що вимагає виклику операції або процедури приймаючого об'єкту;
«return» (повернути) - повідомлення, що повертає значення виконаної операції або процедури об'єкту, що викликав її;
«create» (створити) - повідомлення, що вимагає створення іншого об'єкту для виконання певних дій;
«destroy» (знищити) - повідомлення з явною вимогою знищити відповідний об'єкт;
«send» (послати) - позначає посилку іншому об'єкту деякого сигналу, який асихронно ініціюється одним об'єктом і приймається іншим.
Окрім стереотипів, повідомлення можуть мати власне позначення операції, виклик якої вони ініціюють у приймаючого об'єкту. В цьому випадку поряд із стрілкою записується ім'я операції з круглими дужками, в яких можуть указуватися параметри або аргументи відповідної операції.
Тимчасові обмеження на діаграмах послідовності
У мові UML для запису тимчасових обмежень використовуються фігурні дужки. Тимчасові обмеження можуть відноситися як до виконання певних дій об'єктами, так і до самих повідомлень, явно специфікуючи умови їх передачі або прийому. На відміну від умов галуження, які повинні виконуватися альтернативно, тимчасові обмеження мають обов'язковий або директивний характер для асоційованих з ними об'єктів.
Тимчасові обмеження можуть записуватися поряд з початком стрілки відповідного повідомлення. Але найчастіше вони записуються зліва від стрілки на одному рівні з нею. Якщо тимчасова характеристика відноситься до конкретного об'єкту, то ім'я цього об'єкту записується перед ім'ям характеристики і відділяється від неї крапкою.
Прикладами таких обмежень на діаграмі послідовності можуть служити ситуації, коли необхідно явно специфікувати час, протягом якого допускається передача повідомлення від клієнта до сервера або обробка запиту клієнта сервером:
{ время_приема_сообщения время_отправки_сообщения < 1 сік.};
{ время_ожидания_ответа < 5 сік.};
{ время_передачи_пакета < 10 сік.};
{ объект_1. время_подачи_сигнала_тревоги > 30 сек.}.
Комбіновані фрагменти
Комбінований фрагмент складається з ключового слова і одного або декількох вкладених фрагментів. Значення вкладених фрагментів залежить від ключового слова:
використання взаємодії(interaction use) – посилання на іншу діаграму послідовності. Наголошується ключовим словом ref;
цикл (loop) – має один вкладений фрагмент, який виконується до тих пір, поки залишається вірною перша сторожова умова фрагмента;
умовний фрагмент (alt) – має два або більш вкладених фрагмента, кожен з яких має початкову сторожову умову. Коли потік управління досягає умовного фрагмента, виконується той з його вкладених фрагментів, сторожова умова якого є істинною. Якщо сторожова умова істинна більш ніж у одного вкладеного фрагмента, вибір один з таких фрагментів здійснюється випадковим чином;
необов'язковий фрагмент (opt) – є окремим випадком умовного фрагмента: є один вкладений фрагмент, який виконується у випадку, якщо його сторожова умова істинна, і не виконується, якщо воно помилкове;
паралельний фрагмент (par) – має два або більш вкладених фрагмента. Коли потік управління досягає паралельного фрагмента, то всі його вкладені фрагменти виконуються паралельно. Коли виконання віх вкладених фрагментів завершується, потік управління наново зливається воєдино.
Приклади діаграм послідовності
Діаграма кооперації (collaboration diagram)
Головна особливість діаграми кооперації полягає в можливості графічно представити не тільки послідовність взаємодії, але і всі структурні відносини між об'єктами, що беруть участь в цій взаємодії.
Перш за все, на діаграмі кооперації у вигляді прямокутників зображаються об'єкти, що беруть участь у взаємодії, містять ім'я об'єкту, його клас і, можливо, значення атрибутів. Далі, як і на діаграмі класів, указуються асоціації між об'єктами у вигляді різних сполучних ліній. При цьому можна явно вказати імена асоціації і ролей, які грають об'єкти в даній асоціації. Додатково можуть бути зображені динамічні зв'язки - потоки повідомлень. Вони представляються також у вигляді сполучних ліній між об'єктами, над якими розташовується стрілка з вказівкою напряму, імені повідомлення і порядкового номера в загальній послідовності ініціалізації повідомлень.
На відміну від діаграми послідовності, на діаграмі кооперації зображаються тільки відносини між об'єктами, що грають певні ролі у взаємодії. На цій діаграмі не указується час у вигляді окремого вимірювання.
Діаграма компонентів (component diagram)
Повним проектом програмної системи є сукупність моделей логічного і фізичного рівнів, які повинні бути узгоджені між собою. У мові UML для фізичного представлення моделей систем використовуються діаграми реалізації (implementation diagrams), які включають діаграму компонентів і діаграму розгортання.
Діаграма компонентів, на відміну від раніше розглянутих діаграм, описує особливості фізичного представлення системи. Вона дозволяє визначити архітектуру системи, що розробляється, встановивши залежності між програмними компонентами, в ролі яких може виступати початковий і виконуваний код. Основними графічними елементами діаграми компонентів є компоненти, інтерфейси і залежності між ними.
Діаграма компонентів розробляється для наступних цілей:
візуалізація загальної структури початкового коду програмної системи;
специфікації виконуваного варіанту програмної системи;
забезпечення багатократного використання окремих фрагментів програмного коду;
представлення концептуальної і фізичної схем баз даних.
Діаграма розгортання (deployment diagram)
Якщо розробляється програма, що виконується локально на комп'ютері користувача і що не використовує периферійних пристроїв і ресурсів, то в розробці додаткових діаграм немає необхідності. При розробці ж корпоративних застосувань наявність таких діаграм може бути украй корисною для вирішення завдань раціонального розміщення компонентів в цілях ефективного використання розподілених обчислювальних і комунікаційних ресурсів мережі, забезпечення безпеки і інших.
Для представлення загальної конфігурації і топології розподіленої програмної системи в UML призначені діаграми розгортання.
Діаграма розгортання призначена для візуалізації елементів і компонентів програми, що існують лише на етапі її виконання (runtime).
Діаграма розгортання містить графічні зображення процесорів, пристроїв, процесів і зв'язків між ними. На відміну від діаграм логічного уявлення, діаграма розгортання є єдиною для системи в цілому, оскільки повинна цілком відображати особливості її реалізації. Розробка діаграми розгортання, як правило, є останнім етапом специфікації моделі програмної системи.
При розробці діаграми розгортання переслідують наступні цілі:
визначити розподіл компонентів системи по її фізичних вузлах;
показати фізичні зв'язки між всіма вузлами реалізації системи на етапі її виконання;
виявити вузькі місця системи і реконфигурировать її топологію для досягнення необхідної продуктивності.
Вузол
Вузлом (node) є деякий фізично існуючий елемент системи, що володіє певним обчислювальним ресурсом. Як обчислювальний ресурс вузла може розглядатися наявність деякого об'єму електронної або магнітооптичної пам'яті або процесора. У останній версії мови UML поняття вузла розширене і може включати не тільки обчислювальні пристрої, але і інші механічні або електронні пристрої, такі як датчики, принтери, модеми, цифрові камери, сканери і маніпулятори.
Графічно на діаграмі розгортання вузол зображається у формі тривимірного куба. Вузол має власне ім'я, яке указується усередині його графічного символу. Самі вузли можуть представлятися як як типи, так і як екземпляри.
З'єднання
Окрім зображень вузлів на діаграмі розгортання указуються відносини між ними. Як відносини виступають фізичні з'єднання між вузлами і залежності між вузлами і компонентами, зображення яких теж можуть бути присутніми на діаграмах розгортання.
Соединения являются разновидностью ассоциации и изображаются отрезками линий без стрелок. Наличие такой линии указывает на необходимость организации физического канала для обмена информацией между соответствующими узлами. Характер соединения может быть дополнительно специфицирован примечанием, помеченным значением или ограничением.
Діаграми розгортання можуть мати складну структуру, що включає вкладені компоненти, інтерфейси і інші апаратні пристрої.