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