Что такое динамическая диспетчеризация в ООП?

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

Ответ

Динамическая диспетчеризация — это механизм вызова метода, при котором конкретная реализация (из класса-наследника) определяется во время выполнения программы, а не на этапе компиляции. Это основа полиморфизма.

Как это работает в Swift:

  • Для классов используется таблица виртуальных методов (vtable).
  • Для протоколов — таблица свидетелей (witness table).

Пример:

class Vehicle {
    func move() { print("Vehicle moves") }
}

class Car: Vehicle {
    override func move() { print("Car drives") }
}

let myVehicle: Vehicle = Car() // Тип переменной - родительский
myVehicle.move() // Выведет "Car drives". Реализация выбрана в runtime.

Ключевые особенности:

  • Требуется для полиморфизма: Позволяет объектам производных классов обрабатываться через интерфейс базового класса.
  • Накладные расходы: Вызов включает поиск в таблице, что медленнее статической диспетчеризации.
  • Оптимизация: Ключевое слово final отключает возможность переопределения и позволяет компилятору использовать статическую диспетчеризацию, повышая производительность.