Програмування орієнтоване на об’єкти - Банк рефератів, творів, доповідей, курсових

Вантажівка Легкова Байдарка Ял

Семантика узагальнення як ставлення спільного до приватного та прагнення підвищити лаконічність опису класів на основі одиничного спадкування не завжди "виглядають" адекватно. Наприклад,

TYPE Вузол = RECORD

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

TYPE Структура Яла = RECORD

Інтерпретація Яла як транспортного засобу пов'язана з використанням шару А в елементі зберігання. Інтерпретація Яла як човна - з використанням двох шарів: А і В і, нарешті, інтерпретація Яла як особливого виду човна пов'язана з використанням всіх трьох шарів: А,В,С. Декларація виду "Структура_Яла" в об'єктно-орієнтованій мові замінюється відношенням

Ял. (NEW та DISPOSE - псевдопроцедури, їх виклики транслюються у виклики ALLOCATE та DEALLOCATE відповідно). Використання NEW та DISPOSE дозволяє уникнути багатьох семантичних помилок, пов'язаних із різними значеннями N у послідовності викликів ALLOCATE. DEALLOCATE, що визначає створення/знищення одного й того самого об'єкта.

Загалом послідовність викликів NEW. DISPOSE (чи відповідно ALLOCATE. DEALLOCATE), у випадку повністю визначається логікою програміста, породжує низку проблем, що з організацією і розподілом вільного простору динамічної пам'яті. Однією з таких проблем є проблемафрагментації. Ефект фрагментації у тому, що робоча область динамічної пам'яті " дробиться " частини - фрагменти різної довжини. Якісь із них "зайняті" - використовуються програмістом під елементи зберігання його об'єктів, якісь "вільні", причому характер чергування вільних і зайнятих фрагментів у загальному випадку може бути довільним. Будь-який запит програміста створення нового об'єкта призводить до того, що управління динамічною пам'яттю " підбирає " йому фрагмент, відповідний за розмірами. Правила такого підбору можуть бути різні, але загальна закономірність одна: такий фрагмент повинен мати розмір, не менший, ніж запитуваний програмістом. Якщо відповідний фрагмент має більший розмір, ніж потрібно, в прикладну програму буде віддана його частина, яка тепер буде розглядатися системою як зайнятий фрагмент, а залишок залишиться у вільній зоні в якості вільного фрагмента. При цьому проблема фрагментації полягає в тому, що ефект "дроблення" може призвести до того, що у вільній зоні буде знаходитись безліч "маленьких" розрізнених вільних фрагментів, що в сукупності складають достатній обсяг. Проте, незважаючи на такий обсяг, запит програміста на новий елемент пам'яті може отримати відмову через відсутність цілого відповідного елемента. Нижче наведено фрагмент програми та схема розподілу динамічної пам'яті, що ілюструють ефект фрагментації. Для простоти передбачається, що загальний обсяг динамічної пам'яті становить 20 байт.