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