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

Можете объяснить, что подразумевается под принципом инверсии зависимостей в объектно-ориентированном программировании?

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

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

sobes.tech AI

Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) — один из пяти принципов SOLID в объектно-ориентированном программировании. Он гласит:

  • Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.
  • Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

Пример на Swift (iOS):

protocol DataService {
    func fetchData() -> String
}

class APIService: DataService {
    func fetchData() -> String {
        return "Данные из API"
    }
}

class ViewModel {
    private let service: DataService

    init(service: DataService) {
        self.service = service
    }

    func load() {
        print(service.fetchData())
    }
}

let apiService = APIService()
let viewModel = ViewModel(service: apiService)
viewModel.load()  // Выведет: Данные из API

Здесь ViewModel зависит от абстракции DataService, а не от конкретного APIService. Это позволяет легко заменить реализацию сервиса, например, на мок для тестов.