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