зія. У різних мовах, що підтримують парадигму ООП і допускають множинне спадкування (а воно допустимо не у всіх мовах і, наприклад, мова Java, широко поширений в сфері інтернет-додатків, не підтримує множинного успадкування), вона долається по-різному, але в будь-якому випадку необхідно бути гранично обережним при виникненні таких ситуацій.
При спадкуванні одні методи класу можуть заміщатися іншими. Так, клас транспортних засобів буде володіти узагальненим методом руху. У класах-нащадках цей метод буде конкретизований: автомобіль буде їздити, літак - літати, корабель - плавати. Така зміна семантики методу називається поліморфізмом. Поліморфізм - це виконання методом з одним і тим же ім'ям різних дій залежно від контексту, зокрема, від приналежності того чи іншого класу. У різних мовах програмування поліморфізм реалізується різними способами. Наприклад, в C + + він реалізований за допомогою механізму віртуальних функцій. p align="justify"> Іншим основним видом відносин між класами і об'єктами є агрегація. Вона означає, що один клас містить у собі в якості агрегатів (складових частин, підсистем) інші класи. Так автомобіль складається з кузова, двигуна, трансмісії і т.п., а до складу приймально-передавального пристрою входять передавач, приймач і антенно-фідерних пристрій. У UML агрегації позначаються у вигляді лінії з зафарбованим ромбом на кінці. Агрегація має кратність. Так автомобіль зазвичай містить один двигун, який у свою чергу може належати тільки одному автомобілю. Автомобіль може зазвичай містити від двох до п'яти дверей. У свою чергу кожна двері може належати лише одному автомобілю. p align="justify"> Щоб звернутися до атрибутів і методам агрегату, необхідно спочатку отримати покажчик на його власника, а потім вже вибрати необхідні атрибути та методи.
Нехай об'єкт D має методи f1 () і f2 () (рис. 2). Щоб скористатися ними, треба спочатку отримати покажчик на кореневий об'єкт А, потім на об'єкт С, що в об'єктно-орієнтованому програмуванні зазвичай записується таким чином:. C.
Далі отримуємо покажчик на D, так як він є агрегатом C, і, нарешті, викликаємо необхідні методи f1 () і f2 ():. CDf1 (). CDf2 ()
В
Рис. 2. Ієрархічне представлення вкладених об'єктів
Композиція є ще одним відношенням, спорідненим агрегації. Але якщо в агрегації агрегати належать класу або об'єкта, то в композиції існує більше слабкий зв'язок. Так, студенти з вузом перебувають у відношенні композиції, тоді як факультети, які входять до складу вузу (тобто є його невід'ємною частиною або агрегатами), пов'язані з ним ставленням агрегації. На UML композиція позначається за допомогою незакрашенних ромбів. Як і у випадку агрегації, ставлення композиції має кратність. Агрегація і композиція є підкласами класу відносин асоціації. Асоціація позначається у вигляді лінії без стрілок і ромбі...