Sobes.tech
Junior

Koji su principi objektno-orijentisanog programiranja?

sobes.tech АИ

Одговор од АИ

Principi OOP:

  • Enkapsulacija: Spajanje podataka (svojstava) i metoda koji rade s tim podacima u jedan objekat i skrivanje unutrašnje implementacije od spoljnog sveta. Pristup podacima se obavlja putem određenih javnih interfejsa (metoda).

    // Skrivanje unutrašnje implementacije svojstva balance
    class Account {
        private var balance: Double = 0.0
    
        func deposit(amount: Double) {
            if amount > 0 {
                balance += amount
            }
        }
    
        func getBalance() -> Double {
            return balance
        }
    }
    
  • Nasleđivanje: Mehanizam koji omogućava kreiranje nove klase (potomak) na osnovu postojeće (roditeljske), nasleđujući njena svojstva i metode. To doprinosi ponovnoj upotrebi koda.

    // Klase Dog i Cat nasleđuju svojstva i metode klase Animal
    class Animal {
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func makeSound() {
            print("\(name) pravi zvuk")
        }
    }
    
    class Dog: Animal {
        override func makeSound() {
            print("\(name) laje")
        }
    }
    
    class Cat: Animal {
        override func makeSound() {
            print("\(name) mjauče")
        }
    }
    
  • Polimorfizam: Sposobnost objekata različitih klasa da odgovore na istu poruku (poziv metode) na različite načine, u zavisnosti od svog tipa.

    // Različite implementacije metode makeSound() u klasama Dog i Cat
    func playSound(of animal: Animal) {
        animal.makeSound() // Polimorfni poziv
    }
    
    let myDog = Dog(name: "Bobi")
    let myCat = Cat(name: "Murka")
    
    playSound(of: myDog) // Ispisaće "Bobi laje"
    playSound(of: myCat) // Ispisaće "Murka mjauče"
    
  • Apstrakcija: Izvlačenje suštinskih karakteristika objekta i ignorisanje nevažnih. Kreiranje opštih predstava o objektima.

    // Predstava o geometrijskoj figuri bez konkretne implementacije
    protocol Shape {
        func calculateArea() -> Double
        func calculatePerimeter() -> Double
    }
    
    // Konkretne implementacije za krug i kvadrat
    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
        }
    }