— Привіт! У цій лекції хочу познайомити тебе з іще одною точкою зору на інтерфейси. Розумієш, клас – це найчастіше модель якогось конкретного об'єкта. Інтерфейс більше відповідає не об'єктам, а їхнім здібностям чи ролям.

Наприклад, такі речі як авто, велосипед, мотоцикл та колесо найкраще зобразити у вигляді класів та об'єктів. А такі їхні здібності як «можу їздити», «можу перевозити людей», «можу стояти» — краще зобразити у вигляді інтерфейсів. Дивись приклад:
Код на Java | Опис |
---|---|
|
— відповідає здатності пересуватися. |
|
— відповідає здатності керуватися водієм. |
|
— відповідає здатності перевозити вантажі. |
|
— клас «колесо». Має здатність пересуватися. |
|
— клас «авто». Має здатність пересуватися, керуватися людиною і перевозити вантажі. |
|
— клас «скейтборд». Має здатність пересуватися і керуватися людиною. |
Інтерфейси дуже спрощують життя програміста. Дуже часто у програмі тисячі об'єктів, сотні класів та лише пара десятків інтерфейсів – ролей. Ролей мало, а їхніх комбінацій – класів – дуже багато.
Увесь сенс в тому, що тобі не потрібно писати код для взаємодії з усіма класами. Тобі достатньо взаємодіяти зі своїми ролями (інтерфейсами).
Уяви, що ти – робот-будівельник, і в тебе є десятки роботів, кожен з яких може мати кілька професій. Тобі потрібно терміново добудувати стіну. Ти береш усіх роботів, які мають здатність «будівельник» і кажеш їм будувати стіну. Тобі байдуже, що це за роботи. Хоч робот-поливалка. Якщо він уміє будувати – нехай іде будувати.
Ось як це виглядало б у коді:
Код на Java | Опис |
---|---|
|
— здатність «будівельник стін». Розуміє команду «(по)будувати стіну» — має відповідний метод. |
|
— роботи, у яких є ця професія/особливість.
— для зручності я зробив класам імена українською. Таке допускається в java, але вкрай небажано. — поливалка не має здатності будувати стіни (не реалізує інтерфейс WallBuilder). |
|
— як дати їм команду – побудувати стіну? |
— Страшенно цікаво. Навіть не думав, що інтерфейси – така цікава тема.
— А то! Разом з поліморфізмом – це взагалі щось неймовірне.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ