Почему мы используем интерфейс? Это только для стандартизации?

Почему мы используем интерфейс?

Это только для стандартизации?

+73
08 янв. '10 в 7:17
источник поделиться
13 ответов

Цели интерфейсов

  • создать слабосвязанное программное обеспечение.
  • поддержка дизайн по контракту (разработчик должен предоставить весь интерфейс)
  • Разрешить подключаемое программное обеспечение
  • позволяют различным объектам легко взаимодействовать.
  • скрывать детали реализации классов друг от друга
  • облегчить повторное использование программного обеспечения.

Аналогия 1. Как и космический челнок США, российский космический корабль "Союз" и китайский "Шэньчжоу-5" могут состыковываться с Международной космической станцией, поскольку они реализуют один и тот же стыковочный интерфейс. (Это всего лишь пример - я не знаю, правда ли это в реальной жизни, но пусть приостановит наше недоверие ради примера)

Аналогия 2. Как вы можете подключить различные компьютерные мониторы к вашему домашнему компьютеру. Вы можете подключить к нему настенный телевизор, старую CRT (толстый вид), 20-дюймовый плоский экран или машину Брайля для слепых, чтобы "видеть" прикосновением. Там совместимость между этими различными/различными устройствами и вашими компьютер, потому что все они согласны с стандартами интерфейса.

Подробности интерфейсов С# - С интерфейсами С#/OOP вы делаете то же самое, но в невидимом/виртуальном мире.

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

(Чем больше вы используете программные интерфейсы, тем больше эти слова "гудения" будут поняты. И всегда рассматривайте интерфейсы в реальном мире, потому что они сделали нас одинаково хорошо.)

+164
08 янв. '10 в 7:21
источник

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

Например:

public interface IMyInterface{
    public void DoFirst();
    public int DoSecond();
}


public class A : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blubb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blubb2");
     return 2;  
   }
}

public class B : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blibb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blibb2");  
     return 4;
   }
}

Классы реализуют интерфейс несколькими способами. Но вы можете использовать их как IMyInterface. Например:

public static void DoMethodsInInterface(IMyInterface inter){
    inter.DoFirst();
    inter.DoSecond();
}


public static void main(){

   DoMethodsInInterface(new A());
   DoMethodsInInterface(new B());
   //Or use it in a List
   List<IMyInterface> interlist = new List<IMyInterface>();
   interlist.Add(new A());
   interlist.Add(new B());
   foreach(IMyInterface inter in interlist){
      inter.DoFirst();
   }

}

Надеюсь, это немного объяснит, почему интерфейсы полезны.

+28
08 янв. '10 в 7:28
источник
другие ответы

Связанные вопросы


Похожие вопросы

Это для взаимодействия:), чтобы вы могли взаимодействовать между вещами, это полезно, когда у вас есть

  • несколько реализаций одного и того же материала
  • когда вы применяете интерфейс к нескольким различным классам, потому что вам нужно какое-то соглашение о том, что эти классы собираются сделать что-то или иметь некоторые функции.
+5
14 авг. '10 в 12:11
источник

Основная причина, по которой интерфейсы используются на таких языках, как С#/Java, состоит в том, что эти языки не поддерживают множественное (классовое) наследование (см. Какова конкретная проблема с множественным наследованием?).

Но допускается реализация нескольких (интерфейсов), позволяющая использовать классы по-разному.

+2
08 янв. '10 в 9:03
источник

Здесь вид высокого уровня...

Интерфейсы играют большую роль в концепции Скрытие информации.

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

Когда я впервые начал понимать интерфейсы, они были объяснены мне как "контракт, который предоставляет описание вашего класса". Не уверен, что это вам поможет, но если вы думаете о интерфейсе для автомобиля, вы можете сказать, что он управляет, ломается и поворачивается. Так как до тех пор, пока он доставит меня из точки А в точку Б, мне не нужно знать, как эти функции реализованы.

+2
08 янв. '10 в 21:49
источник

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

+2
25 янв. '10 в 8:40
источник

Подумайте remoting...

Здесь есть клиент и сервер. Допустим, что они физически разделены Интернетом. Клиент вызывает метод, фактическое выполнение которого происходит на сервере. С точки зрения клиента клиент ничего не знает об объекте на сервере, который выполняет выполнение. Однако он знает, какой метод вызвать. Потому что, создавая клиентскую программу, мы получаем только интерфейс (или контракт). Мы не подвергаемся воздействию всего объекта, который фактически живет на сервере. Попробуйте сделать некоторые демонстрационные приложения в удаленном режиме .net, и вы увидите все остальное. Счастливое программирование.

+1
25 янв. '10 в 18:01
источник

Ниже приводятся основные причины использования интерфейсов

  • расширяемость
  • Скрытие реализации
  • Доступ к объекту через интерфейсы
  • Свободная связь.

пожалуйста, посетите ссылку чтобы узнать о интерфейсах с загружаемым примером кода

0
25 авг. '15 в 6:58
источник

Начиная с интерфейса, вы можете реализовать proxy, что позволяет выполнять ленивую загрузку или выполнять некоторые проверки при вызове методов конкретной реализации.

0
14 авг. '10 в 5:59
источник

Интерфейс отделяет тип данных от логики реализации.

0
22 дек. '12 в 8:05
источник

Если кто-то другой подобен мне и учится на примере и делает, а не только объяснение, вот какой-то код....

Я нашел эту реализацию Neural Network в С#, включая загрузку проекта, которая использует интерфейсы элегантным и полезным способом:

http://www.c-sharpcorner.com/UploadFile/rmcochran/AI_OOP_NeuralNet06192006090112AM/AI_OOP_NeuralNet.aspx

0
01 дек. '14 в 19:10
источник

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

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

потому что класс может реализовывать несколько интерфейсов.

0
26 февр. '14 в 12:27
источник

Почему мы используем интерфейсы?

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

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

0
08 янв. '10 в 21:17
источник

Посмотрите другие вопросы по меткам или Задайте вопрос