Ноу Інти, лекція, діаграма класів крупним планом
Відносини між класами
Жоден з об'єктів навколишнього нас світу не існує сам по собі. Птахи літають тому, що є повітря, на який спираються їхні крила. Кожен з нас пов'язаний з масою інших людей різноманітними родинними, професійними та іншими зв'язками, які передбачають різні типи відносин. Точно так само і класи пов'язані між собою. І щоб в повній мірі оволодіти ООП. нам необхідно зрозуміти суть цих відносин і навчитися їх ідентифікувати.
Варто відзначити, що залежно на діаграмах зображують далеко не завжди, а тільки в тих випадках, коли їх відображення є важливим для розуміння моделі. Часто залежності лише маються на увазі, т. К. Логічно випливають з природи класів.
Інший вид відносин між об'єктами - це асоціація. Це просто зв'язок між об'єктами, по якій можна між ними переміщатися. Асоціація може мати ім'я, яке показує природу відносин між об'єктами, при цьому в імені може вказуватися напрям читання зв'язку за допомогою трикутного маркера. Односпрямована асоціація може зображуватися стрілкою. Проілюструємо сказане прикладами (рис. 3.11):
Крім напрямки асоціації, ми можемо вказати на діаграмі ролі. які кожен клас відіграє в даному відношенні, і кратність. тобто кількість об'єктів, пов'язаних ставленням (рис. 3.12):
І щодо ролей, і щодо кратності на цій діаграмі все зрозуміло - людина може взагалі не працювати, працювати в одній або більше компаніях, а ось компанії в будь-якому випадку потрібен хоча б один співробітник. До речі, про кратності. Асоціація може об'єднувати три і більше класу. В цьому випадку вона називається n-арной і зображується ромбом на перетині ліній, як показано на цій діаграмі, запозиченої нами з Zicom Mentor (рис. 3.13):
Раніше ми говорили, що асоціація - це "просто зв'язок" між об'єктами. Насправді, в реальності зв'язку бувають "просто зв'язками" вкрай рідко. Зазвичай при найближчому розгляді під асоціацією розуміється більш складне відношення між класами, наприклад, зв'язок типу "частина-ціле". Такий вид асоціації називається асоціацією з агрегування. У цьому випадку один клас має більш високий статус (ціле) і складається з нижчих за статусом класів (частин). При цьому виділяють просте і композитне агрегування і говорять про власне агрегації і композиції. Проста агрегація передбачає, що частини, відділені від цілого, можуть продовжувати своє існування незалежно від нього. Під композитним ж агрегированием розуміється ситуація, коли ціле володіє своїми частинами і їх час життя відповідає часу життя цілого, т. Е. Незалежно від цілого частини існувати не можуть. Приклади цих видів асоціацій і їх позначень в UML можна побачити на наступній діаграмі (рис. 3.14).
Приклади, як нам здається, дуже прості і зрозумілі. Вінчестер можна вийняти з комп'ютера і встановити в новий комп'ютер або в USB-кишеню, т. Е. Існування жорсткого диска з розбиранням системного блоку не закінчується. А ось кнопки без вікон зазвичай існувати не можуть - з закриттям вікна кнопки також зникають.
І, нарешті, ще одна важлива річ, яка стосується асоціації. У цій справі між двома класами сама асоціація теж може мати властивості і, отже, теж може бути представлена у вигляді класу. Приклад простий (рис. 3.15):
Дійсно, перед початком трудових відносин працівник і роботодавець підписують між собою контракт, який має такі атрибути, як, наприклад, опис робіт. терміни їх виконання, порядок оплати і т. д.
А ось більш складний, але, знову-таки, взятий з реального життя приклад моделювання відносин між класами, запозичений нами з Zicom Mentor (рис. 3.16):
Дізнаєтеся розповідь, знайомий з дитинства?
- Інкапсуляція захищає внутрішній устрій об'єкта і реалізується шляхом обмеження доступу до атрибутів і операцій класу з інших частин програми.
- Узагальнення дозволяє повторно використовувати вже існуючі рішення, створюючи нові класи шляхом успадкування від наявних класів.
- Поліморфізм дозволяє працювати з групою різнорідних об'єктів однаковим чином, не замислюючись про відмінності в реалізації.
- Інкапсуляція, успадкування і поліморфізм - три кити, на яких тримається ООП.
- У будь-якій системі між об'єктами існують відносини різних типів.
- Ставлення залежності означає, що реалізація одного класу залежить від специфікації операцій іншого класу.
- Асоціація висловлює ставлення між декількома рівноправними об'єктами і може мати напрямок, ролі і кратність, а також зображуватися у вигляді класу асоціації.
- Композиція і агрегація використовуються, якщо між об'єктами існують відносини типу "частина-ціле", причому композиція передбачає, що частини не можуть існувати окремо від цілого.
Контрольні питання
- Які три принципи лежать в основі ООП?
- Що таке інтерфейс? На якому з базових принципів ООП заснований механізм інтерфейсів?
- Що таке n-арная асоціація?
- У чому різниця між агрегацією і композицією?
- Що таке клас асоціації?