Sobes.tech
Junior — Middle

Czym różni się statyczne i dynamiczne wywoływanie w programowaniu?

sobes.tech AI

Odpowiedź od AI

Statyczne wywołanie (static dispatch) odbywa się podczas kompilacji. Kompilator z wyprzedzeniem wie, która metoda zostanie wywołana i bezpośrednio łączy wywołanie z konkretną implementacją. Zapewnia to wysoką wydajność, ale zmniejsza elastyczność.

Dynamiczne wywołanie (dynamic dispatch) odbywa się podczas wykonywania programu. Wywołanie metody jest określane na podstawie typu obiektu w czasie rzeczywistym, co pozwala na implementację polimorfizmu i nadpisywania metod. W iOS często realizuje się to za pomocą mechanizmu runtime Objective-C, gdzie wywołania metod odbywają się przez tabelę wiadomości.

Przykład w Swift:

class Animal {
    func sound() {
        print("Jakiś dźwięk")
    }
}

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

let animal: Animal = Dog()
animal.sound() // Wypisze "Szczekanie" dzięki dynamicznemu dispatchowi

Tutaj wywołanie sound() jest określane podczas wykonywania, co jest przykładem dynamic dispatch.