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