Залежності між класами (об’єктами)

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

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

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

Залежності між класами (об'єктами)

Мал. 2.6. Залежності між класами

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

Подальші приклади залежностей між класами наведено на малюнку 2.7. Перший приклад показує залежність між клієнтом банку та його рахунками. Клієнт банку може мати одночасно кілька рахунків у цьому банку або зовсім не мати рахунку (коли він вперше стає клієнтом банку). Таким чином, потрібно зобразити залежність між клієнтом і декількома рахунками, що і зроблено на малюнку 2.7. Другий приклад показує залежність між пересічними кривими (зокрема, прямими) лініями. Можна розглядати 2, 3 і більше таких ліній, причому вони можуть мати кілька точок перетину. Нарешті, третій приклад показує необов'язкову (optional) залежність: комп'ютер може мати, а може і не мати миша.

Мал. 2.7. Подальші приклади залежностей. позначення

Залежностям між класами відповідають залежності між об'єктами цих класів. На малюнку 2.8 показані залежності між об'єктами для першого прикладу малюнка 2.6; на малюнку 2.9 показані залежності між об'єктами для прикладів, зображених на малюнку 2.7.

Мал. 2.8. Залежності між об'єктами

Відзначимо, що при зображенні залежностей між об'єктами ми, як правило, знаємо кількість об'єктів і не потребуємо таких позначеннях, як «кілька», «два і більше», «не обов'язково».

При проектуванні системи зручніше оперувати об'єктами, а класами.

Мал. 2.9. Більш складні залежності між об'єктами

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

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

Мал. 2.10. Приклад атрибута залежності

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

Залежності між класами (об'єктами)

Мал. 2.11. Атрибути двох залежностей між одним і багатьма

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

Залежності між класами (об'єктами)

Мал. 2.12. Подання залежності у вигляді класу

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