Что такое Принципы Объектно-Ориентированного Программирования?
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 } }