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 } }