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

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

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

78
задан 39 revs, 7 users 90% 18 April 2013 в 20:51
поделиться

9 ответов

Рискуя выйти на касательную, я бы рекомендовал Axe/WatIn. Axe позволяет тестам записываться в Excel 'Manual' Testers без знания базового теста 'language'. Для написания специальных действий (IE. Сегодня мне пришлось сделать немного сложный поиск таблицы и перекрестную ссылку), но после написания действия могут быть использованы в тестах нетехническими тестерами.

Я также слышал, что проект UK Government Gateway (который, я полагаю, включает в себя автоматические тесты 6K +) недавно перенес все свои тесты с Axe/Winrunner на Axe/Watin в течение недели!! И многие тесты довольно сложные - я знаю, как я работал над ним несколько лет назад...

Я смотрю на Selenium в данный момент, так как потенциальный Клиент использует его. Но я предлагаю взглянуть на Топор как на слой над инструментом «рабочий конь.»

-121--1823116-

Можно просмотреть различные параметры, предлагаемые пользовательским файлом diff a .gitattribute , например, указание специального diff для файлов po

[diff "mypodiff"]
    command = mypodiff
*.po   diff=mypodiff

с помощью mypodiff скрипта, вызывающего любой инструмент diff , способный отфильтровать строку, которую вы хотите

-121--1281345-

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

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

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

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

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

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

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

170
ответ дан 24 November 2019 в 10:27
поделиться

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

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

.
2
ответ дан 24 November 2019 в 10:27
поделиться

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

Например:

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

}

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

29
ответ дан 24 November 2019 в 10:27
поделиться

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

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

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

0
ответ дан 24 November 2019 в 10:27
поделиться

Вот вид высокого уровня...

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

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

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

3
ответ дан 24 November 2019 в 10:27
поделиться

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

2
ответ дан 24 November 2019 в 10:27
поделиться

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

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

1
ответ дан 24 November 2019 в 10:27
поделиться

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

0
ответ дан 24 November 2019 в 10:27
поделиться

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

  • несколько реализаций одного и того же материала
  • , когда вы применяете интерфейс к нескольким различным классам, потому что вам нужно какое-то соглашение, которое эти классы могут что-то делать или иметь некоторую функциональность
5
ответ дан 24 November 2019 в 10:27
поделиться
Другие вопросы по тегам:

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