Junior
Mis on objektorienteeritud programmeerimise põhimõtted?
sobes.tech AI
Vastus AI-lt
Objektorienteeritud programmeerimise põhimõtted:
-
Inkapssulatsioon: Andmete (omaduste) ja nende töötlusmeetodite ühendamine ühte objekti ning sisemise teostuse varjamine välismaailmast. Andmetele juurdepääs toimub teatud avalike liideste (meetodite) kaudu.
// Salvestise sisemise teostuse varjamine omaduse balance class Account { private var balance: Double = 0.0 func deposit(amount: Double) { if amount > 0 { balance += amount } } func getBalance() -> Double { return balance } } -
Pärilusus: Mehhanism, mis võimaldab luua uue klassi (lapse) olemasoleva (ema) põhjal, pärides selle omadused ja meetodid. See soodustab koodi korduvkasutust.
// Loomad (Animal) pärivad omadused ja meetodid class Animal { let name: String init(name: String) { self.name = name } func makeSound() { print("\(name) teeb heli") } } class Dog: Animal { override func makeSound() { print("\(name) haukab") } } class Cat: Animal { override func makeSound() { print("\(name) miau") } } -
Polümorfism: Võimekus, kus erinevate klasside objektid reageerivad samale sõnumile (meetodi väljakutsele) erinevalt, sõltuvalt nende tüübist:
// Erinevad realiseeringud meetodile makeSound() klassides Dog ja Cat func playSound(of animal: Animal) { animal.makeSound() // Polümorfne väljakutse } let myDog = Dog(name: "Bobi") let myCat = Cat(name: "Murka") playSound(of: myDog) // Väljund "Bobi haukab" playSound(of: myCat) // Väljund "Murka miau" -
Abstraktsioon: Oluliste omaduste eristamine ja ebaoluliste ignoreerimine. Üldistavate ettekujutuste loomine objektidest:
// Geomeetrilise kujundi üldine ettekujutus ilma konkreetse teostuseta protocol Shape { func calculateArea() -> Double func calculatePerimeter() -> Double } // Konkreetsete teostuste näited ringile ja ruudule 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 } }