Junior
Kādi ir objektorientētās programmēšanas principi?
sobes.tech AI
Atbilde no AI
Objektorientētas programmēšanas principi:
-
Iekapsulēšana: Datu (īpašību) un ar tiem saistīto metožu apvienošana vienā objektā un iekšējās realizācijas slēpšana no ārpuses. Pieeja datiem tiek nodrošināta caur noteiktiem publiskiem interfeisiem (metodēm).
// Balansa īpašības iekšējās realizācijas slēpšana class Account { private var balance: Double = 0.0 func deposit(amount: Double) { if amount > 0 { balance += amount } } func getBalance() -> Double { return balance } } -
Mantošana: Mehānisms, kas ļauj izveidot jaunu klasi (bērnu), balstoties uz esošo (vecāku), mantojot tās īpašības un metodes. Tas veicina koda atkārtotu izmantošanu.
// Suņu un kaķu klases manto dzīvnieku īpašības un metodes class Animal { let name: String init(name: String) { self.name = name } func makeSound() { print("\(name) rada skaņu") } } class Dog: Animal { override func makeSound() { print("\(name) rej") } } class Cat: Animal { override func makeSound() { print("\(name) mīca") } } -
Polimorfisms: Spēja dažādu klases objektu atbildēt uz vienu un to pašu ziņojumu (metodes izsaukumu) dažādi, atkarībā no to tipa:
// Atšķirīgas realizācijas makeSound() metodēs suņu un kaķu klasēs func playSound(of animal: Animal) { animal.makeSound() // Polimorfisks izsaukums } let myDog = Dog(name: "Bobs") let myCat = Cat(name: "Murka") playSound(of: myDog) // Izvadīs "Bobs rej" playSound(of: myCat) // Izvadīs "Murka mīca" -
Abstrakcija: Svarīgu īpašību izdalīšana un nesvarīgu ignorēšana. Vispārēju priekšstatu veidošana par objektiem:
// Parādība par ģeometrisku figūru bez konkrētas realizācijas protocol Shape { func calculateArea() -> Double func calculatePerimeter() -> Double } // Konkrētas realizācijas aprēķinam riņķim un kvadrātam 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 } }