Sobes.tech
Junior

Какви са принципите на обектно-ориентираното програмиране?

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
        }
    }