Назад к вопросам
Intern
98
questionbank
Что такое объектно-ориентированное программирование (ООП)?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Объектно-ориентированное программирование (ООП) — это парадигма программирования, основанная на концепции "объектов", включающих в себя данные (атрибуты) и методы (функции), работающие с этими данными.
Основные принципы ООП:
- Инкапсуляция: Объединение данных и методов в единый блок (объект) и сокрытие деталей реализации от внешней среды. Доступ к данным осуществляется только через определенные методы.
- Наследование: Создание новых классов (дочерних) на основе существующих (родительских), наследуя их атрибуты и методы. Позволяет использовать уже написанный код и создавать иерархии классов.
- Полиморфизм: Способность объектов разных классов реагировать на один и тот же вызов по-разному. Реализуется через переопределение методов или использование протоколов (интерфейсы).
Пример в 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)