... > Swift > Наследование и полиморфизм...

Наследование и полиморфизм в Swift

НАВИГАЦИЯ ПО СТРАНИЦЕ

Наследование Полиморфизм Виртуальные методы

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

Наследование:

  1. Определение:

    • Наследование позволяет создавать новый класс на основе существующего, так называемого базового класса или суперкласса.

    • Новый класс, называемый подклассом, наследует свойства и методы базового класса.

  2. Преимущества:

    • Переиспользование кода: Классы-наследники могут использовать функциональность базового класса без необходимости повторного написания кода.

    • Расширяемость: Можно добавлять новые методы и свойства в подклассы, расширяя функциональность.

  3. Пример:

    class Vehicle {
        var speed: Double
    
        init(speed: Double) {
            self.speed = speed
        }
    
        func move() {
            print("Движение со скоростью \(speed) км/ч")
        }
    }
    
    class Car: Vehicle {
        var brand: String
    
        init(speed: Double, brand: String) {
            self.brand = brand
            super.init(speed: speed)
        }
    
        // Метод move унаследован от базового класса
    }

Полиморфизм:

  1. Определение:

    • Полиморфизм позволяет использовать объекты производных классов через интерфейс их базового класса.

    • Это означает, что одна и та же операция может вести себя по-разному в зависимости от типа объекта.

  2. Виды полиморфизма:

    • Компайлерный полиморфизм (статический): Происходит на этапе компиляции. Например, перегрузка методов.

    • Раннее связывание: Решение о том, какой метод вызывать, принимается на этапе компиляции.

    • Раннее связывание: Решение о том, какой метод вызывать, принимается на этапе выполнения программы.

  3. Пример:

    let vehicle: Vehicle = Car(speed: 60, brand: "Toyota")
    vehicle.move() // Выводит: "Движение со скоростью 60 км/ч"

    Здесь vehicle имеет статический тип Vehicle, но динамический тип Car. Вызывается метод move класса Car, несмотря на то, что переменная объявлена с типом Vehicle.

Виртуальные методы:

  1. Определение:

    • В контексте ООП виртуальные методы — это методы базового класса, которые могут быть переопределены в производных классах.

  2. Пример:

    class Shape {
        func draw() {
            print("Рисуем фигуру")
        }
    }
    
    class Circle: Shape {
        override func draw() {
            print("Рисуем круг")
        }
    }
    
    let shape: Shape = Circle()
    shape.draw() // Выводит: "Рисуем круг"

    Метод draw базового класса Shape виртуальный, и его реализация в подклассе Circle переопределяет базовую реализацию.

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