Вопрос об использовании интерфейса - PullRequest
2 голосов
/ 06 января 2011

Почему интерфейс выглядит точно так же, как класс, но только как объявление функции. Каковы основные преимущества интерфейса? Помимо нескольких классов, использующих интерфейс, но все же кажется, что для чего? Каждый класс будет иметь свою собственную реализацию, поэтому зачем использовать интерфейс?

Ответы [ 7 ]

1 голос
/ 06 января 2011

Это позволяет двум совершенно не связанным классам реализовывать один и тот же интерфейс, и поэтому могут использоваться одинаково (Например, вызов ISortable.Sort для двух списков с совершенно другой реализацией. Это как множественное наследование, только лучше. :)

И интерфейсы также используются для обмена объектами между процессами (Google для COM или Automation).

1 голос
/ 06 января 2011

Этот ответ помог мне понять использование интерфейса.

Я бы хотел проголосовать один раз в день: -)

1 голос
/ 06 января 2011

Использование интерфейса означает, что вызывающие интерфейса не привязаны к конкретной реализации.

Например, если вы используете C # и вам нужна последовательность данныхВы ожидаете увидеть это в терминах IEnumerable<T>.Вас не волнует, что такое реализация - и требование одной конкретной реализации ограничит использование вашего кода.

Другим примером будет Stream - это абстрактный класс, а не интерфейс, ноОсновной принцип тот же.Вы можете проанализировать любой вид потока в XmlDocument (чтобы выбрать произвольное использование потоков).Неважно, является ли это FileStream, NetworkStream, MemoryStream или чем-то еще, если оно поддерживает требуемые операции.

0 голосов
/ 06 января 2011

Интерфейсы (в общем) обеспечивают абстракцию и инкапсуляцию.

Абстракция означает, что клиенту не нужно знать больше, чем в интерфейсе, чтобы использовать объект.

Инкапсуляция означает, что клиент не может знать больше, чем находится в интерфейсе.

Вместе это называется скрытием информации.

Так что, в некоторой степени, вы правы, что каждыйКласс обеспечивает собственную реализацию, поэтому вам не нужен интерфейс.Однако в этом случае клиент становится зависимым от реализации.К сожалению, в реальном мире реализация постоянно меняется.По мере изменения реализации весь зависимый код придется менять.

Используя интерфейс, клиент зависит только от того, что указано в интерфейсе, а не от фактической реализации.Таким образом, реализация может измениться, и клиентский код не обязательно требует изменения.Конечно, нужно позаботиться о том, чтобы сам интерфейс не изменился.

Скажем, у вас есть коллекция объектов.Затем вам нужно было отсортировать эти объекты в некотором порядке.Если вы реализовали свою коллекцию в виде дерева, то код для сортировки полностью отличается от того, если бы вы реализовали связанный список.Клиентский код, подвергающийся воздействию этих реализаций, потребует изменения, если какие-либо детали этих реализаций изменятся.

Если, с другой стороны, вы создаете интерфейс, скажем, Collection, который обещает, что любая реализация сможет сортировать себяно он не говорит вам, как он будет сортировать, тогда ваш клиентский код может зависеть от возможности сортировки, не зная деталей сортировки.

Вы можете легко изменить тип коллекции и алгоритм сортировки, не влияя на клиентакод.

0 голосов
/ 06 января 2011

При проектировании с интерфейсами подчеркивается ожидаемое поведение без загрязнения какими-либо бесполезными деталями реализации.

Интерфейс представляет собой контракт, позволяющий остальной части приложения использовать через этот интерфейс любой объект, который соблюдает этот договор.

В двух словах:

  1. Четкость дизайна
  2. Гибкость дизайна.
0 голосов
/ 06 января 2011

Интерфейс обычно используется, когда вам нужно взаимодействовать между различными подсистемами. Это также дает преимущество слабой связи и скрывает реальные реализованные объекты.

0 голосов
/ 06 января 2011

В статически типизированных объектно-ориентированных языках интерфейсы позволяют использовать классы, которые только разделяют интерфейс, который будет использоваться полиморфно.

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