Ответ
В объектно-ориентированном программировании интерфейс — это контракт, который определяет набор методов (сигнатуры) без их реализации. Класс, реализующий интерфейс, обязан предоставить конкретную реализацию всех его методов.
В 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) для интерфейсов при модульном тестировании.
- Полиморфизм: Можно работать с разными реализациями через общий интерфейс.
- Четкий контракт: Явно определяет, что должен уметь делать класс.
Видео-ответы
▶
PHP-разработчик хочет перейти на Python, т.к в нём он как рыба в воде? / Техсобес Middle Python Dev
▶
Открытое собеседование на Go-разработчика | Тренировочные интервью
▶
Тестовое интервью с Михаилом на позицию Junior Python разработчик
▶
Сисадмин стал уверенным Python разработчиком? Или есть нюансы...? / Техсобес Junior Python Developer
▶
Тестовое интервью с Алексеем на позицию Junior Python разработчик
▶
Собеседование на .NET разработчика (backend)
▶
Junior Python-инженер | Собеседование
▶
Сильная теория и слабый кодинг. Интервью на Junior Python разработчика
▶
Собеседование на Junior Android Dev у Анны Жарковой
▶
Как пройти СОБЕСЕДОВАНИЕ на C# & .Net РАЗРАБОТЧИКА?
▶
Mock-собеседование Go разработчика из OZON | Самое полное интервью
▶
РАЗБОР вопросов с СОБЕСЕДОВАНИЙ / Автоматизация ТЕСТИРОВАНИЯ на JAVA
▶
Техническое интервью Java Developer - Артем Таужнянский
▶
Пробное собеседование Junior C# developer (backend)