Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Действительно ли нужно ли создавать интерфейсы для всех объектов?

#java #ооп


При разработке я пользуюсь интерфейсами, только там где мне кажется это необходимым.
Но тут читаю книгу о патернах (Эрих Гамма) и там вот так написано


  В объектно-ориентированных системах интерфейсы фундаментальны. Об объектах известно
только то, что они сообщают о себе через свои интерфейсы. Никакого способа получить
информацию об объекте или заставить его что-то сделать в обход интерфейса не существует.
Интерфейс объекта ничего не говорит о его реализации; 


Означает ли это то, что действительно нужно создавать интерфейсы для каждого объекта
в программе? 
    


Ответы

Ответ 1



Нет, не означает. В литературе по объектно-ориентированному программированию (ООП) под интерфейсом могут пониматься разные значения: 1) Интерфейс - класс, который содержит только чисто виртуальные методы и не содержит данных (это то значение, что вы употребляете в своём вопросе). Конкретное определение. 2) Интерфейс как более абстрактное понятие. Методы, через которые класс выполняет свои контрактные обязанности. Например, есть класс (не интерфейс) Stack, у которого есть методы push и pop, и пусть он будет реализован через массив. Так вот, "Об объектах известно только то, что они сообщают о себе через свои интерфейсы." - означает, что класс Stack предоставляет методы положить элемент на стек и снять с него. "Никакого способа получить информацию об объекте или заставить его что-то сделать в обход интерфейса не существует" - нельзя получить информацию, что Stack реализован на массиве. Того, кто пользуется этим классом, не должно касаться, как он [класс] внутри устроен. И тем более этот "user" не может пролезть внутрь класса и вставить в середину массива элемент. Вы правильно делаете, если используете интерфейс (1 опр.), когда это необходимо. В тексте говорится про (2 опр.).

Комментариев нет:

Отправить комментарий