— Привіт! Нарешті ми дісталися дуже цікавої теми. Сьогодні я розповім тобі про множинне успадкування . Насправді множинне успадкування дуже цікавий і потужний інструмент. І якби не деякі проблеми, то в Java було б множинне успадкування класів. Але позаяк його немає, доведеться задовольнятися множинним успадкуванням інтерфейсів. Що теж не мало.
Уяви, що ти пишеш комп'ютерну гру. І її герої – твої об'єкти – мають демонструвати дуже складну поведінку: ходити картою, збирати предмети, виконувати квести, спілкуватися з іншими героями, когось вбивати, когось рятувати. Припустимо, ти зміг розділити всі об'єкти на 20 категорій. Це означає, що якщо тобі пощастить, ти можеш обійтися лише 20 класами для їх опису. А тепер питання: скільки разом унікальних видів взаємодії цих об'єктів? Об'єкт кожного типу може мати унікальні взаємодії з 20 видами інших об'єктів (собі подібних теж вважаємо). Тобто, загалом потрібно запрограмувати 20 на 20 – 400 взаємодій! А якщо унікальних видів об'єктів буде не 20, а 100, кількість взаємодій може сягнути 10 000!
— Ого! Тепер розумію, чому програмування є такою непростою роботою.
— Вона проста. Завдяки багатьом абстракціям. І не в останню чергу – множинному успадкуванню інтерфейсів.
Дуже часто можна спростити взаємодію об'єктів, якщо взаємодіяти будуть не об'єкти, а їхні ролі та/або здібності. А здібності, як ми вже знаємо, легко додаються до класу, коли він реалізує певний інтерфейс.
Коли пишеться велика програма, зазвичай з цього одразу і починають:
1) Визначають усі існуючі можливості/ролі.
2) Потім описують взаємодію між цими ролями.
3) А потім просто наділяють усі класи їхніми ролями.
— А можна приклад?
— Звісно. Давай розглянемо ролі на основі героїв мультфільму «Том і Джері».
Код на Java | Опис |
---|---|
|
— роль/здатність пересуватися. |
|
— роль/здатність бути з'їденим. |
|
— роль/здатність з'їсти когось. |
|
Tom – це кіт, який має три ролі: 1) може пересуватися 2) може когось з'їсти 3) може бути з'їденим (собакою) |
|
Jerry – це миша, яка має дві ролі: 1) може пересуватися 2) може бути з'їденою кимось |
|
Killer – це собака, який має дві ролі: 1) може пересуватися 2) може когось з'їсти |
Знаючи ці три ролі (інтерфейсу) можна написати програму і описати коректну взаємодію цих ролей. Наприклад, об'єкт гнатиметься (за допомогою інтерфейсу Moveable) за тим, «кого ти можеш з'їсти» і тікати від того, «хто може з'їсти тебе». І все це без знань про конкретні об'єкти. Якщо до програми додати ще об'єктів (класів), але залишити ці ролі, вона чудово працюватиме – керуватиме поведінкою своїх об'єктів.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ