Page 94 - 4190
P. 94
компіляції та виконання. Агрегування передбачає, що один об’єкт во-
лодіє іншим або несе за нього відповідальність. У загальному випад-
ку мова йде про те, що об’єкт містить інший об’єкт або є його части-
ною. Отже, агрегування означає, що агрегат і його складові мають
однаковий час життя. Щодо поінформованості вважають, що об’єкту
відомо про інший об’єкт. Інколи інформованість називають асоціаці-
єю або відношенням “використовує”, інформовані об’єкти можуть
робити запит про операції один у одного. Але вони не несуть відпові-
дальності один за одного. Інформованість – це більш слабке відно-
шення, ніж агрегуванняя. Воно передбачає набагато менший зв'язок
між об’єктами.
Агрегування та інформованість легко сплутати, оскільки вони ча-
сто реалізуються однаково. У мові Smalltalk усі змінні є посиланням
на об’єкти, тут немає відмінності між агрегуванням та інформованіс-
тю. У мові С++ агрегування можна реалізувати шляхом визначення
змінних - членів, які є екземплярами, але частіше їх визначають як
показчики або посилання. Інформованість також реалізовується за
допомогою показчиків та посилань. Відмінність між інформованістю
і агрегуванням визначається, швидше, можливим використанням, а
не мовними механізмами. У структурі, що існує на етапі компіляції,
побачити відмінність нелегко, але тим не менше вона суттєва. Пере-
важно відношень агрегування набагато, менше, ніж відношень інфо-
рмативності, вони більш постійні. З другого боку відношення інфор-
мативності виникають і зникають частіше та інколи тривають лише
під час виконання певної операції. Відношення оперативності, крім
того, більш динамічні, що створює труднощі їх виявлення в початко-
вому тексті програми. Оскільки, невідповідність між структурою
програми на етапах компіляції і виконання настільки велике, то ви-
вчення початкового коду про роботу системи може вплинути несут-
тєво. Поведінка системи під час виконання повинна визначатися про-
грамістом, а не мовою. Співвідношення між об’єктами та їх типами
потрібно скорегувати досить акуратно, оскільки від них залежить, на-
скільки вдалою або невдалою виявиться структура програми під час
виконання. Багато патернів проектування (особливо рівня об’єктів)
явно підкреслюють відмінність між структурами на етапах компіляції
і виконання. Патерни компоновщик і декоратор корисні для побудо-
ви складних структур часу виконання. Спостерігач породжує струк-
тури часу виконання, які важко зрозуміти, не знаючи патерна. Патерн
ланцюжок обов’язків також приводить до таких схем взаємодії, в
94