Page 94 - 4190
P. 94

компіляції та виконання. Агрегування передбачає, що один об’єкт во-
            лодіє іншим або несе за нього відповідальність. У загальному випад-
            ку мова йде про те, що об’єкт містить інший об’єкт або є його части-
            ною.  Отже,  агрегування  означає,  що  агрегат  і  його  складові  мають

            однаковий час життя.  Щодо поінформованості вважають, що об’єкту
            відомо про інший об’єкт.  Інколи інформованість називають асоціаці-
            єю  або  відношенням  “використовує”,  інформовані  об’єкти  можуть

            робити запит про операції один у одного. Але вони не несуть відпові-
            дальності  один  за  одного.  Інформованість  –  це  більш  слабке  відно-
            шення, ніж агрегуванняя. Воно передбачає набагато менший зв'язок
            між об’єктами.

                  Агрегування та інформованість легко сплутати, оскільки вони ча-
            сто реалізуються однаково.  У мові Smalltalk усі змінні є посиланням
            на об’єкти, тут немає відмінності між агрегуванням та інформованіс-

            тю. У мові С++ агрегування можна реалізувати шляхом визначення
            змінних  -  членів,  які є  екземплярами,  але  частіше  їх  визначають  як
            показчики  або  посилання.  Інформованість  також  реалізовується  за

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

            побачити відмінність нелегко, але тим не менше вона суттєва. Пере-
            важно відношень агрегування набагато, менше, ніж відношень інфо-
            рмативності, вони більш постійні. З другого боку відношення інфор-
            мативності виникають і зникають частіше та інколи тривають лише

            під  час  виконання  певної  операції.  Відношення  оперативності,  крім
            того, більш динамічні, що створює труднощі їх виявлення в початко-
            вому  тексті  програми.  Оскільки,  невідповідність  між  структурою

            програми на етапах компіляції і виконання настільки велике, то ви-
            вчення початкового коду про роботу системи  може вплинути несут-
            тєво. Поведінка системи під час виконання повинна визначатися про-
            грамістом, а не мовою. Співвідношення між об’єктами та їх типами

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

            явно підкреслюють відмінність між структурами на етапах компіляції
            і виконання. Патерни компоновщик і декоратор корисні для побудо-
            ви складних структур часу виконання. Спостерігач породжує струк-

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

                                                              94
   89   90   91   92   93   94   95   96   97   98   99