Назад к вопросам
Intern
98
questionbank

Что такое объектно-ориентированное программирование (ООП)?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

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

Основные принципы ООП:

  1. Инкапсуляция: Объединение данных и методов в единый блок (объект) и сокрытие деталей реализации от внешней среды. Доступ к данным осуществляется только через определенные методы.
  2. Наследование: Создание новых классов (дочерних) на основе существующих (родительских), наследуя их атрибуты и методы. Позволяет использовать уже написанный код и создавать иерархии классов.
  3. Полиморфизм: Способность объектов разных классов реагировать на один и тот же вызов по-разному. Реализуется через переопределение методов или использование протоколов (интерфейсы).

Пример в Swift:

// Пример инкапсуляции и базового класса
class Car {
    private var speed: Double // Приватное свойство (инкапсуляция)

    init(initialSpeed: Double) {
        self.speed = initialSpeed
    }

    func accelerate(by factor: Double) {
        speed *= factor // Метод для доступа к приватному свойству
    }

    func getCurrentSpeed() -> Double {
        return speed
    }
}

// Пример наследования
class ElectricCar: Car {
    var batteryLevel: Double

    init(initialSpeed: Double, initialBatteryLevel: Double) {
        self.batteryLevel = initialBatteryLevel
        super.init(initialSpeed: initialSpeed) // Вызов инициализатора родительского класса
    }

    // Пример полиморфизма (переопределение метода)
    override func accelerate(by factor: Double) {
        if batteryLevel > 10 { // Дополнительная логика
            super.accelerate(by: factor * 1.1) // Вызов метода родителя с модификатором
            batteryLevel -= 5
        } else {
            print("Low battery, cannot accelerate much.")
        }
    }
}

// Пример полиморфизма (использование)
let myCar: Car = Car(initialSpeed: 50)
let myElectricCar: Car = ElectricCar(initialSpeed: 60, initialBatteryLevel: 100)

// Несмотря на то, что обе переменные типа Car,
// вызов accelerate() для myElectricCar вызовет переопределенный метод
myCar.accelerate(by: 1.5)
myElectricCar.accelerate(by: 1.5)