Что значит «программировать на интерфейс»? - PullRequest
768 голосов
/ 21 декабря 2008

Я видел это упомянутое несколько раз, и мне не ясно, что это значит. Когда и зачем ты это делаешь?

Я знаю, что делают интерфейсы, но тот факт, что я не совсем уверен в этом, заставляет меня думать, что мне не хватает их правильного использования.

Это просто так, если бы вы делали:

IInterface classRef = new ObjectWhatever()

Вы могли бы использовать любой класс, который реализует IInterface? Когда вам нужно это сделать? Единственное, о чем я могу думать, это если у вас есть метод, и вы не уверены, какой объект будет передан, за исключением того, что он реализует IInterface. Я не могу думать, как часто вам нужно будет это делать.

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

Ответы [ 32 ]

0 голосов
/ 19 декабря 2014

Вот простой пример, иллюстрирующий программирование системы бронирования авиабилетов.

//This interface is very flexible and abstract
    addPassenger(Plane seat, Ticket ticket); 

//Boeing is implementation of Plane
    addPassenger(Boeing747 seat, EconomyTicket ticket); 
    addPassenger(Cessna, BusinessClass ticket);


    addPassenger(J15, E87687); 
0 голосов
/ 06 августа 2015

Давайте начнем с некоторых определений:

Интерфейс n. Набор всех сигнатур, определенных операциями объекта, называется интерфейсом к объекту

Тип n. Определенный интерфейс

Простым примером интерфейса , как определено выше, будут все методы объекта PDO, такие как query(), commit(), close() и т. Д., В целом, а не по отдельности. Эти методы, т. Е. Его интерфейс, определяют полный набор сообщений, запросов, которые могут быть отправлены объекту.

A type , как определено выше, является конкретным интерфейсом. Я буду использовать интерфейс готовой формы для демонстрации: draw(), getArea(), getPerimeter() и т. Д.

Если объект относится к типу База данных, мы имеем в виду, что он принимает сообщения / запросы интерфейса базы данных, query(), commit() и т. Д. Объекты могут быть разных типов. Вы можете иметь объект базы данных типа фигуры, пока он реализует свой интерфейс, и в этом случае это будет подтип .

Многие объекты могут иметь разные интерфейсы / типы и реализовывать этот интерфейс по-разному. Это позволяет нам заменять объекты, позволяя нам выбирать, какой из них использовать. Также известен как полиморфизм.

Клиент будет знать только интерфейс, а не реализацию.

Таким образом, в сущности, программирование интерфейса потребовало бы создания некоторого типа абстрактного класса, такого как Shape с указанным только интерфейсом, например draw(), getCoordinates(), getArea() и т. Д. И затем реализовать различные конкретные классы эти интерфейсы, такие как класс Circle, класс Square, класс Triangle. Следовательно, программа для интерфейса не является реализацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...