Page 87 - 4190
P. 87

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

                  Підмішаним  (mixin  class)  називають  клас,  призначення  якого  –
            представити додатковий інтерфейс або функціональність іншим кла-
            сом. Він родинний абстрактним класам в тому розумінні, що не пе-

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

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

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

            його тип. Коли кажуть, що “об’єкт є екземпляром класу” то вважа-
            ють, що він підтримує інтерфейс, який визначається цим класом. У
            таких мовах, як C++ та Eiffel класи використовують для специфіку-

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

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

            успадкування  інтерфейсу  (  або  породженням  підкласу).  У  випадку
            успадкування класу реалізація об’єкта визначається в термінах іншо-
            го об’єкта. Тобто, це  механізм реалізації коду і представлення. З ін-
            шого боку, успадкування інтерфейсу (породження підтипів) визначає,

            коли один об’єкт можна використати замість іншого.
                  Дві ці концепції легко сплутати, оскільки в багатьох мовах про-
            грамування явна відмінність відсутня. У таких мовах як C++ та Eiffel

            під успадкуванням вважається одночасно успадкування інтерфейсу і
            реалізація. Стандартний спосіб реалізації успадкування інтерфейсу в
            C++ - це відкрите успадкування класу, в якому є виключно віртуальні

            функції.  Істинне  успадкування  інтерфейсу  можна  апроксимувати  в
            C++ за допомогою відкритого успадкування абстрактного класу.  Іс-

                                                              87
   82   83   84   85   86   87   88   89   90   91   92