Какви са принципите на обектно-ориентираното програмиране?
sobes.tech AI
Отговор от 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 } }