Sobes.tech
Junior

Aké sú princípy objektovo orientovaného programovania?

sobes.tech AI

Odpoveď od AI

Princípy OOP:

  • Zapúzdrenie: Spojenie dát (vlastností) a metód, ktoré s týmito dátami pracujú, do jedného objektu a skrytie vnútorného implementácie pred vonkajším svetom. Prístup k dátam je umožnený prostredníctvom určitých verejných rozhraní (metód).

    // Skrytie vnútornej implementácie vlastnosti balance
    class Account {
        private var balance: Double = 0.0
    
        func deposit(amount: Double) {
            if amount > 0 {
                balance += amount
            }
        }
    
        func getBalance() -> Double {
            return balance
        }
    }
    
  • Dedičnosť: Mechanizmus, ktorý umožňuje vytvárať nový triedu (odvodenú) na základe existujúcej (základnej), dedí jej vlastnosti a metódy. To podporuje opakované použitie kódu.

    // Triedy Dog a Cat dedí vlastnosti a metódy triedy Animal
    class Animal {
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func makeSound() {
            print("\(name) vydáva zvuk")
        }
    }
    
    class Dog: Animal {
        override func makeSound() {
            print("\(name) šteká")
        }
    }
    
    class Cat: Animal {
        override func makeSound() {
            print("\(name) mňauká")
        }
    }
    
  • Polymorfizmus: Schopnosť objektov rôznych tried reagovať na rovnakú správu (volanie metódy) odlišne v závislosti od ich typu.

    // Rôzne implementácie metódy makeSound() v triedach Dog a Cat
    func playSound(of animal: Animal) {
        animal.makeSound() // Polymorfné volanie
    }
    
    let myDog = Dog(name: "Bobi")
    let myCat = Cat(name: "Murka")
    
    playSound(of: myDog) // Vypíše "Bobi šteká"
    playSound(of: myCat) // Vypíše "Murka mňauká"
    
  • Abstrakcia: Vyčlenenie podstatných vlastností objektu a ignorovanie nepodstatných. Vytváranie všeobecných predstáv o objektoch.

    // Predstava o geometrickej figúre bez konkrétnej implementácie
    protocol Shape {
        func calculateArea() -> Double
        func calculatePerimeter() -> Double
    }
    
    // Konkrétne implementácie pre kruh a štvoruholník
    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
        }
    }