Sobes.tech
Назад к вопросам
Junior — Middle
72

Какую структуру имеет интерфейс и из каких элементов он состоит?

Компании, где спрашивали
РостелекомРостелеком

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

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

Пример использования:

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

public interface INotificationService
{
    void Send(string message);
}

public class EmailNotificationService : INotificationService
{
    public void Send(string message)
    {
        Console.WriteLine($"Email: {message}");
    }
}

public class SmsNotificationService : INotificationService
{
    public void Send(string message)
    {
        Console.WriteLine($"SMS: {message}");
    }
}

Пояснение кода:

Код показывает структуру интерфейса и его реализацию шаг за шагом.

  1. INotificationService — это интерфейс.
  2. В нём объявлен метод Send(string message) без реализации.
  3. EmailNotificationService и SmsNotificationService реализуют этот интерфейс.
  4. Каждая реализация по-своему определяет, как отправлять сообщение.
  5. Код, который работает с INotificationService, может не знать о конкретном типе реализации.

Ключевые моменты:

  • Интерфейс задаёт контракт, а не реализацию.
  • Обычно состоит из сигнатур методов, свойств и других членов, доступных извне.
  • Класс может реализовывать несколько интерфейсов, если язык это поддерживает.
  • Интерфейсы помогают уменьшить связанность и упростить тестирование через моки/стабы.
  • В QA automation интерфейсы удобно использовать для подмены внешних зависимостей и изоляции тестов.