Что такое интерфейс в ООП?

«Что такое интерфейс в ООП?» — вопрос из категории ООП, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В объектно-ориентированном программировании интерфейс — это контракт, который определяет набор методов (сигнатуры) без их реализации. Класс, реализующий интерфейс, обязан предоставить конкретную реализацию всех его методов.

В Dart, где нет ключевого слова interface, эту роль выполняют абстрактные классы (содержащие хотя бы один абстрактный метод) или обычные классы. Ключевое слово implements используется для реализации интерфейса.

Пример в Dart:

// Абстрактный класс действует как интерфейс
abstract class CacheService {
  Future<String> get(String key);
  Future<void> set(String key, String value);
  Future<void> clear();
}

// Класс реализует интерфейс
class SharedPreferencesCache implements CacheService {
  @override
  Future<String> get(String key) async {
    // Реализация получения данных из SharedPreferences
    final prefs = await SharedPreferences.getInstance();
    return prefs.getString(key) ?? '';
  }

  @override
  Future<void> set(String key, String value) async {
    // Реализация сохранения
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString(key, value);
  }

  @override
  Future<void> clear() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.clear();
  }
}

Преимущества использования интерфейсов в Flutter/Dart:

  • Слабая связность: Код зависит от абстракции (интерфейса), а не от конкретной реализации. Это упрощает замену одной реализации на другую (например, замена кэша в памяти на кэш на диске).
  • Тестируемость: Легко создавать моки (mock) или заглушки (stub) для интерфейсов при модульном тестировании.
  • Полиморфизм: Можно работать с разными реализациями через общий интерфейс.
  • Четкий контракт: Явно определяет, что должен уметь делать класс.

Видео-ответы