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

Объясните принцип статической диспетчеризации и её отличие от динамической

Компании, где спрашивали
Альфа-БанкАльфа-Банк
Т-БанкТ-Банк
AstonAston

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

sobes.tech AI

Статическая диспетчеризация — это механизм выбора вызываемой функции или метода на этапе компиляции. Компилятор определяет, какую именно реализацию вызвать, исходя из типа переменной или контекста вызова. Это обеспечивает более быструю работу, так как вызов не требует дополнительного поиска во время выполнения.

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

Пример в Swift:

class Animal {
    func sound() {
        print("Some sound")
    }
}

class Dog: Animal {
    override func sound() {
        print("Bark")
    }
}

let animal: Animal = Dog()
animal.sound() // вызов динамический, выведет "Bark"

Здесь вызов метода sound() — динамическая диспетчеризация, так как реальный тип объекта Dog определяется во время выполнения.

Если бы метод был статическим (например, статическая функция), то вызов был бы определён на этапе компиляции — статическая диспетчеризация.