Діаграма послідовностей (sequence diagram)
Тільки що ми познайомилися з діаграмою об'єктів, яка показує відношення між об'єктами в певний момент часу, т. е. надає нам знімок стану системи, будучи статичною. Діаграма ж последовательностейотображает взаємодія об'єктів в динаміці. Що значить "в динаміці"? Якраз з цим нам і належить розібратися.
В UML взаємодія об'єктів розуміється як обмін інформацією між ними. При цьому інформація набуває вигляду повідомлень. Крім того, що повідомлення несе якусь інформацію, воно певним чином також впливає на одержувача. Як бачимо, в цьому плані UML повністю відповідає основним принципам ООП. відповідно до яких інформаційну взаємодію між об'єктами зводиться до відправки і прийому повідомлень.
Діаграма послідовностей відноситься до діаграм взаємодії UML, що описує поведінкові аспекти системи, але розглядає взаємодію об'єктів в часі. Іншими словами, діаграма послідовностей відображає тимчасові особливості передачі і прийому повідомлень об'єктами.
Досвідчений читач, можливо, скаже, що щось подібне робить і діаграма прецедентів. Так, дійсно, діаграми послідовностей можна (і потрібно!) Використовувати для уточнення діаграм прецедентів. більш детального опису логіки сценаріїв використання. Це відмінний засіб документування проекту з точки зору сценаріїв використання! Діаграми послідовностей зазвичай містять об'єкти. які взаємодіють в рамках сценарію, повідомлення. якими вони обмінюються, і які повертаються результати. пов'язані з повідомленнями. Втім, часто повертаються результати позначають лише в тому випадку, якщо це не очевидно з контексту.
Тепер про те, які позначення використовуються на діаграмі послідовностей. Як і раніше, об'єкти позначаються прямокутниками з підкресленими іменами (щоб відрізнити їх від класів), повідомлення (виклики методів) - лініями зі стрілками, які повертаються результати - пунктирними лініями зі стрілками. Прямокутники на вертикальних лініях під кожним з об'єктів показують "час життя" (фокус) об'єктів. Втім, досить часто їх не зображують на діаграмі, все це залежить від індивідуального стилю проектування.
Оскільки текст попереднього абзацу, може бути, не дуже добре сприймається на слух, та й краще, як відомо, "один раз побачити, ніж сто разів почути", наведемо приклад діаграми послідовностей (рис. 2.12):
Думаємо, сенс діаграми цілком зрозумілий: студент хоче записатися на якийсь семінар, пропонований в рамках деякого навчального курсу. З цією метою проводиться перевірка підготовленості студента, для чого запитується список (історія) семінарів курсу, вже пройдених студентом (перейти до наступного семінару можна, лише пропрацювавши матеріал попередніх занять - знайома картина, чи не так?). Після отримання історії семінарів об'єкт класу "Слухач" отримує статус підготовленості, на основі якої студенту повідомляється результат (статус) його спроби записи на семінар. До речі, зверніть увагу на виклик методів. Як бачите, все просто!
А ось що описує наступна діаграма (рис. 2.13), спробуйте здогадатися самостійно. Тільки, цур, що не підглядати в нижченаведений текст лекції!
Ну як, здогадалися? А ми навіть і не сумнівалися! Звичайно, це ж робота звичайного будинкового ліфта, яким ми користуємося щодня! До речі, подивіться на імена об'єктів - видно, що це вже дещо інший стиль проектування, ніж в попередньому прикладі. І нарешті, ще один приклад (рис. 2.14):
Дізнаєтеся свій мобільний?
Діаграма взаємодії (кооперації, collaboration diagram)
Діаграми послідовностей - це відмінний засіб документування поведінки системи, деталізації логіки сценаріїв використання; але є ще один спосіб - використовувати діаграми взаємодії. Діаграма взаємодії показує потік повідомлень між об'єктами системи і основні асоціацію між ними і по суті, як уже було сказано вище, є альтернативою діаграми послідовностей. Уважний читач, можливо, скаже, що діаграма об'єктів робить те ж саме, - і не матиме рації. Діаграма об'єктів показує статику. якийсь знімок системи, зв'язки між об'єктами в даний момент часу, діаграма ж взаємодії, як і діаграма послідовностей, показує взаємодію (вибачте за мимовільний каламбур) об'єктів у часі, т. е. в динаміці.
Слід зазначити, що використання діаграми послідовностей або діаграми взаємодії - особистий вибір кожного проектувальника і залежить від індивідуального стилю проектування. Ми, наприклад, частіше віддаємо перевагу діаграмі послідовностей. На позначеннях, що застосовуються на діаграмі взаємодії, думаємо, не варто зупинятися детально. Тут все стандартно: об'єкти позначаються прямокутниками з підкресленими іменами (щоб відрізнити їх від класів, пам'ятаєте?), Асоціації між об'єктами вказуються у вигляді з'єднують їх ліній, над ними може бути зображена стрілка із зазначенням назви повідомлення і його порядкового номера.
Необхідність номера повідомлення пояснюється дуже просто - на відміну від діаграми послідовностей, час на діаграмі взаємодії не відображається у вигляді окремого виміру. Тому послідовність передачі повідомлень можна вказати тільки за допомогою їх нумерації. В цьому і полягає ймовірна причина нехтування цим видом діаграм багатьма проектувальниками.
Але давайте ж, нарешті, перейдемо до прикладів (рис. 2.15):
Як бачите, ця діаграма описує (дуже грубо) роботу персоналу бібліотеки по обслуговуванню клієнтів: бібліотекар отримує замовлення від клієнта, доручає співробітнику знайти інформацію по потрібній клієнту книзі, а після отримання даних доручає ще одному співробітнику видати книгу клієнту. Розібралися? Тоді ще приклад (рис. 2.16):
Сподіваємося, що і ця діаграма не змогла поставити вас в глухий кут. Швидше за все, вона описує процес управління навчальними курсами (очевидно, шляхом створення їх з готових модулів) для якогось навчального центру. Як бачите, все просто!
І, нарешті, ще один приклад (рис. 2.17), який повинен викликати легке "дежавю" у уважного читача.