Sobes.tech
Junior

Kokie yra objektinio programavimo principai?

sobes.tech AI

Atsakymas iš AI

Objekto orientuotos programavimo principai:

  • Inkarpuliacija: Duomenų (savybių) ir su jais dirbančių metodų sujungimas į vieną objektą ir vidinės įgyvendinimo slėpimas nuo išorinio pasaulio. Prieiga prie duomenų vykdoma per tam tikrus viešus sąsajos (metodus).

    // Balanso savybės vidinės įgyvendinimo slėpimas
    class Account {
        private var balance: Double = 0.0
    
        func deposit(amount: Double) {
            if amount > 0 {
                balance += amount
            }
        }
    
        func getBalance() -> Double {
            return balance
        }
    }
    
  • Paveldėjimas: Mechanizmas, leidžiantis sukurti naują klasę (vaiko) remiantis esama (tėvo), paveldint jos savybes ir metodus. Tai skatina kodo pakartotinį naudojimą.

    // Šunų ir katės klasės paveldi gyvūno savybes ir metodus
    class Animal {
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func makeSound() {
            print("\(name) skleidžia garsą")
        }
    }
    
    class Dog: Animal {
        override func makeSound() {
            print("\(name) loja")
        }
    }
    
    class Cat: Animal {
        override func makeSound() {
            print("\(name) miaukia")
        }
    }
    
  • Polimorfizmas: Galimybė, kad skirtingų klasių objektai atsakytų į tą pačią žinutę (metodo iškvietimą) skirtingai, priklausomai nuo jų tipo:

    // Skirtingos realizacijos makeSound() metoduose Dog ir Cat klasėse
    func playSound(of animal: Animal) {
        animal.makeSound() // Polimorfinis iškvietimas
    }
    
    let myDog = Dog(name: "Bobi")
    let myCat = Cat(name: "Murka")
    
    playSound(of: myDog) // Išves "Bobi loja"
    playSound(of: myCat) // Išves "Murka miaukia"
    
  • Abstrakcija: Esminių objekto savybių išskyrimas ir nesvarbių ignoravimas. Bendrų vaizdinių kūrimas apie objektus:

    // Apibendrinimas apie geometrinę figūrą be konkrečios realizacijos
    protocol Shape {
        func calculateArea() -> Double
        func calculatePerimeter() -> Double
    }
    
    // Konkretizacijos apskritimo ir kvadrato atvejais
    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
        }
    }