Что именно означает «реализация интерфейса»? - PullRequest
4 голосов
/ 10 ноября 2010

В последние дни я очень часто встречаю термин «реализация интерфейса» ... У меня есть идея, о чем он, но я хотел бы получить больше информации и некоторые ресурсы о нем. Когда класс реализует интерфейс?

Ответы [ 6 ]

4 голосов
/ 10 ноября 2010

Интерфейс - это контракт, который определяет необходимый набор методов, которые ДОЛЖЕН создать класс.

Например:

public interface ITest
{
   public void DoSomething(int someInt);
}

public class MyClass : ITest
{
   public void DoSomething(int someInt)
   {
      ... Do some stuff
   }
}

Если вы не включили метод DoSomething, компилятор выдаст ошибку.

2 голосов
/ 07 декабря 2016

Что подразумевается под реализацией интерфейса?

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

Пример № 1:

Каждый Макдональдс в мире имеет определенные общие черты.Фактически, если вы хотите запустить франшизу McDonald's, вы должны следовать их правилам франчайзи:

  1. Должны продавать Биг Мак.
  2. Рестораны должны иметь Большой M
  3. Должен платить франчайзи.
  4. Рестораны должны быть чистыми (sic !?) всегда.

Это их правила,Это в договоре.Каждый ресторан обязан следовать этому контракту.Каждый ресторан немного отличается, но они одинаковы, когда речь идет о вышеуказанных правилах.

Это также очень хорошая вещь для клиента.Если вы заходите в какой-либо ресторан McDonald's в мире, вы наверняка знаете, что можете купить Биг Мак.

Какое отношение McDonald's имеет к интерфейсам?

«Интерфейс» - это не более чем контракт.Любой ресторан, который «реализует» или подписывает договор, обязан его соблюдать.Или, другими словами, любой ресторан, который реализует интерфейс франчайзи McDonald's, обязан следовать ему.

Почему он называется интерфейсом IMcDonald вместо интерфейса McDonald?

КогдаКогда вы называете интерфейс, обычно имя начинается с «I».

Пример # 2

Все плоскости в мире имеют определенные общие черты, независимо от того, какой тип.Другими словами, все они реализуют интерфейс Iplane.

Интерфейс IPlane предусматривает, что любая плоскость, в которой он реализован, должна иметь:

  1. Два крыла
  2. двигатель
  3. и он должен летать

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

 public interface IPlane
{
    void Fly();
    void HasTWoWings();
    void Engine();
}

class Boeing737 : IPlane //  <-------------- the Boeing 737 implements the interface
{
    // this means that the Boeing737 MUST have a fly, hastwowings and an engine method.
    // the interface doesn't specify HOW the plane must fly. So long as it does fly
    // the compiler doesn't care.


    public void Fly()
    {
        Console.WriteLine("Come fly with me, let's fly, let's fly awaaaaaaaay");
    }

    public void HasTWoWings()
    {
        Console.WriteLine("I've got two wings");

    }

    public void Engine()
    {
        Console.WriteLine("BRrrrrrrrooooooooooooooooooooooooooooooooom!");
    }
}

Надеюсь, это поможет вам.

Так что же это значит?

Это очень удобно, если вы, например, пассажир, который хотите забронировать самолет.Вы не уверены, какие самолеты будут доступны для вас.И вам все равно, если они самолеты, и они летают, имеют два крыла и двигатель.Когда вы в аэропорту, вы можете получить «Боинг» или аэробус, или «Стиг», но вы знаете, что независимо от того, какой самолет вы получите, они будут выполнять определенную работу.Они могут летать по-разному, но все они летают.

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

2 голосов
/ 10 ноября 2010

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

Вы можете представить структуру данных стека. В его интерфейсе может быть следующее:

push(Node);
Node pop();
Node peek();

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

Некоторые языки, такие как Java и C #, предоставляют явные интерфейсы . Другие, такие как ruby ​​или python, позволяют использовать ту же технику, но не применяют ее с помощью ключевого слова. Вы можете услышать термин Duck Typing . Это способ сказать, что если что-то реализует правильный интерфейс, его можно использовать независимо от реализации.

2 голосов
/ 10 ноября 2010

Интерфейс - это спецификация функциональности, которую класс ДОЛЖЕН реализовать.При реализации интерфейса вы указываете всем потребителям вашего класса, что вы предоставляете функциональность, определенную в данном интерфейсе.Например (в C #):

public interface ISearchable
{
    List<object> Search(string query);
}

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

public class ConcreteSearchable : ISearchable
{
    public List<object> Search(string query)
    {
        // Implementation
    }
}

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

Например, если бы было много типов, реализующих интерфейс ISearchable, вы могли бы создать SearchableFactory, который быпостроить конкретный тип на основе определенных параметров.Потребитель фабрики не будет заботиться о конкретном типе ... пока он может его искать:

public class SearchableFactory
{
    public static ISearchable CreateInstance(string query)
    {
        if(query.Contains("SELECT"))
            return new SqlSearchable();
        else
            return new ConcreteSearchable();
    }
}
1 голос
/ 10 ноября 2010

Интерфейсы добавляют прозрачность вашему коду.Интерфейс определяет контракт, который реализуется классом.Допустим, я говорю вам, что вы можете стать частью моей банды, но вам нужно все время носить зеленую рубашку.Если вы говорите «ДА», значит, вы выполняете контракт, и теперь вы все время должны носить зеленую рубашку.

0 голосов
/ 10 ноября 2010

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

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

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