Sobes.tech
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
        }
    }