Sobes.tech
Junior

Wat zijn de principes van objectgeoriënteerd programmeren?

sobes.tech AI

Antwoord van AI

Principes van OOP:

  • Encapsulatie: Het samenvoegen van gegevens (eigenschappen) en methoden die met deze gegevens werken in één object en het verbergen van de interne implementatie voor de buitenwereld. Toegang tot de gegevens gebeurt via specifieke openbare interfaces (methoden).

    // Verbergen van de interne implementatie van de eigenschap balance
    class Account {
        private var balance: Double = 0.0
    
        func deposit(amount: Double) {
            if amount > 0 {
                balance += amount
            }
    
        }
    
        func getBalance() -> Double {
            return balance
        }
    }
    
  • Erfelijkheid: Mechanisme dat het mogelijk maakt om een nieuwe klasse (afgeleid) te maken op basis van een bestaande klasse (oorspronkelijk), waarbij de eigenschappen en methoden worden geërfd. Dit bevordert hergebruik van code.

    // Klassen Dog en Cat erven de eigenschappen en methoden van de klasse Animal
    class Animal {
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func makeSound() {
            print("\(name) maakt geluid")
        }
    }
    
    class Dog: Animal {
        override func makeSound() {
            print("\(name) blaft")
        }
    }
    
    class Cat: Animal {
        override func makeSound() {
            print("\(name) miauwt")
        }
    }
    
  • Polymorfisme: Vermogen van objecten van verschillende klassen om op dezelfde boodschap (methode-aanroep) op verschillende manieren te reageren, afhankelijk van hun type.

    // Verschillende implementaties van de methode makeSound() in de klassen Dog en Cat
    func playSound(of animal: Animal) {
        animal.makeSound() // Polymorfe aanroep
    }
    
    let myDog = Dog(name: "Bobby")
    let myCat = Cat(name: "Murka")
    
    playSound(of: myDog) // Zal "Bobby blaft" afdrukken
    playSound(of: myCat) // Zal "Murka miauwt" afdrukken
    
  • Abstractie: Het benadrukken van de essentiële kenmerken van een object en het negeren van niet-essentiële. Het creëren van algemene representaties van objecten.

    // Weergave van een geometrische figuur zonder concrete implementatie
    protocol Shape {
        func calculateArea() -> Double
        func calculatePerimeter() -> Double
    }
    
    // Concrete implementaties voor cirkel en vierkant
    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
        }
    }