Страницы

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

понедельник, 8 апреля 2019 г.

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

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


Ответ

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

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

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