Ответ
Интерфейс — это формальный контракт или абстрактный тип, который определяет что должен делать класс (список методов, свойств, событий), но не определяет как (их реализацию). Классы, реализующие интерфейс, обязаны предоставить конкретную реализацию всех его членов.
Ключевая цель: Декомпозиция системы, достижение слабой связанности (loose coupling) и полиморфизма.
Пример в C#:
// Контракт для логирования
public interface ILogger
{
void Log(string message, LogLevel level);
bool IsEnabled(LogLevel level);
}
// Конкретная реализация для консоли
public class ConsoleLogger : ILogger
{
public void Log(string message, LogLevel level)
{
if (IsEnabled(level))
{
Console.WriteLine($"[{level}] {DateTime.UtcNow}: {message}");
}
}
public bool IsEnabled(LogLevel level) => level >= LogLevel.Information;
}
// Конкретная реализация для файла
public class FileLogger : ILogger { /* ... */ }
// Использование через интерфейс (полиморфизм)
public class OrderProcessor
{
private readonly ILogger _logger;
// Внедрение зависимости через интерфейс
public OrderProcessor(ILogger logger) => _logger = logger;
public void ProcessOrder()
{
_logger.Log("Начало обработки заказа", LogLevel.Information);
// ... логика
}
}
Преимущества:
- Полиморфизм: Код
OrderProcessorработает с любымILogger. - Тестируемость: Легко подменить реальный логгер на мок (mock) в юнит-тестах.
- Множественное наследование: Класс может реализовать несколько интерфейсов (
class MyClass : ILogger, IDisposable). - Разделение ответственности: Четкое определение ролей в архитектуре.
Видео-ответы
▶
PHP-разработчик хочет перейти на Python, т.к в нём он как рыба в воде? / Техсобес Middle Python Dev
▶
Открытое собеседование на Go-разработчика | Тренировочные интервью
▶
Тестовое интервью с Михаилом на позицию Junior Python разработчик
▶
Сисадмин стал уверенным Python разработчиком? Или есть нюансы...? / Техсобес Junior Python Developer
▶
Тестовое интервью с Алексеем на позицию Junior Python разработчик
▶
Junior Python-инженер | Собеседование
▶
Сильная теория и слабый кодинг. Интервью на Junior Python разработчика
▶
Собеседование на Junior Android Dev у Анны Жарковой
▶
Mock-собеседование Go разработчика из OZON | Самое полное интервью
▶
РАЗБОР вопросов с СОБЕСЕДОВАНИЙ / Автоматизация ТЕСТИРОВАНИЯ на JAVA
▶
Flutter. Открытое собеседование
▶
Техническое интервью Java Developer - Артем Таужнянский