Что такое полиморфизм в объектно-ориентированном программировании?

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

Ответ

Полиморфизм — это принцип ООП, позволяющий объектам с одинаковым интерфейсом (именем метода или свойства) иметь различную реализацию в зависимости от их конкретного типа.

Основные виды полиморфизма в Swift:

  1. Ad-hoc полиморфизм (Перегрузка методов / функций): Несколько функций с одним именем, но разными типами параметров.

    func process(_ value: Int) { print("Processing Int: (value)") }
    func process(_ value: String) { print("Processing String: (value)") }
  2. Полиморфизм подтипов (Наследование и переопределение): Подкласс предоставляет свою реализацию метода, объявленного в суперклассе.

    class Vehicle {
        func makeSound() { print("Some vehicle sound") }
    }
    class Car: Vehicle {
        override func makeSound() { print("Beep beep!") }
    }
    let myVehicle: Vehicle = Car()
    myVehicle.makeSound() // Вывод: "Beep beep!"
  3. Параметрический полиморфизм (Протоколы / Дженерики):

    • Протоколы: Разные типы соответствуют одному протоколу.
      protocol Renderable {
          func draw()
      }
      struct Circle: Renderable { func draw() { print("○") } }
      struct Triangle: Renderable { func draw() { print("△") } }
      let shapes: [Renderable] = [Circle(), Triangle()]
      shapes.forEach { $0.draw() } // Вывод: ○ △
    • Дженерики: Функции и типы, работающие с любым совместимым типом.
      func swapValues<T>(_ a: inout T, _ b: inout T) { (a, b) = (b, a) }

Преимущества: Уменьшает связанность кода, повышает гибкость и расширяемость, позволяет писать более абстрактные и универсальные алгоритмы.