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

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

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

13 ответов

Решение

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

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

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

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

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

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

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

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

Например:

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();
   }

}

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

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

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

Вот представление высокого уровня...

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

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

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

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

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

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

Подумайте, удаленно...

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

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

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

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

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

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

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

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

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

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

  1. растяжимость
  2. Сокрытие реализации
  3. Доступ к объекту через интерфейсы
  4. Слабая связь.

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

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

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

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

Другие вопросы по тегам