Назад к вопросам
Junior
74
questionbank

Что такое Принципы Объектно-Ориентированного Программирования?

Sobes Copilot

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

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

sobes.tech AI

Принципы ООП:

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

    // Скрытие внутренней реализации свойства balance
    class Account {
        private var balance: Double = 0.0
    
        func deposit(amount: Double) {
            if amount > 0 {
                balance += amount
            }
        }
    
        func getBalance() -> Double {
            return balance
        }
    }
    
  • Наследование: Механизм, позволяющий создавать новый класс (дочерний) на основе существующего (родительского), наследуя его свойства и методы. Это способствует повторному использованию кода.

    // Классы Dog и Cat наследуют свойства и методы класса Animal
    class Animal {
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func makeSound() {
            print("\(name) издает звук")
        }
    }
    
    class Dog: Animal {
        override func makeSound() {
            print("\(name) лает")
        }
    }
    
    class Cat: Animal {
        override func makeSound() {
            print("\(name) мяукает")
        }
    }
    
  • Полиморфизм: Возможность объектов различных классов отвечать на одно и то же сообщение (вызов метода) по-разному, в зависимости от своего типа.

    // Различные реализации метода makeSound() в классах Dog и Cat
    func playSound(of animal: Animal) {
        animal.makeSound() // Полиморфный вызов
    }
    
    let myDog = Dog(name: "Бобик")
    let myCat = Cat(name: "Мурка")
    
    playSound(of: myDog) // Выведет "Бобик лает"
    playSound(of: myCat) // Выведет "Мурка мяукает"
    
  • Абстракция: Выделение существенных характеристик объекта и игнорирование несущественных. Создание обобщенных представлений об объектах.

    // Представление о геометрической фигуре без конкретной реализации
    protocol Shape {
        func calculateArea() -> Double
        func calculatePerimeter() -> Double
    }
    
    // Конкретные реализации для круга и квадрата
    struct Circle: Shape {
        let radius: Double
    
        func calculateArea() -> Double {
            return Double.pi * radius * radius
        }
    
        func calculatePerimeter() -> Double {
            return 2 * Double.pi * radius
        }
    }
    
    struct Square: Shape {
        let side: Double
    
        func calculateArea() -> Double {
            return side * side
        }
    
        func calculatePerimeter() -> Double {
            return 4 * side
        }
    }