Mi az az objektumorientált programozás alapelvei?
sobes.tech MI
Válasz az MI-től
Objektumorientált programozás alapelvei:
-
Encapsuláció: Az adatok (tulajdonságok) és az azokkal dolgozó metódusok egyetlen objektumba való összegyűjtése, valamint a belső implementáció elrejtése a külvilág elől. Az adatokhoz való hozzáférés meghatározott nyilvános interfészek (metódusok) segítségével történik.
// A balance tulajdonság belső implementációjának elrejtése class Account { private var balance: Double = 0.0 func deposit(amount: Double) { if amount > 0 { balance += amount } } func getBalance() -> Double { return balance } } -
Öröklődés: Olyan mechanizmus, amely lehetővé teszi egy új osztály (gyermek) létrehozását egy meglévő (szülő) osztály alapján, örökölve annak tulajdonságait és metódusait. Ez a kód újrahasznosítását segíti elő.
// A Dog és Cat osztályok öröklik az Animal osztály tulajdonságait és metódusait class Animal { let name: String init(name: String) { self.name = name } func makeSound() { print("\(name) hangot ad ki") } } class Dog: Animal { override func makeSound() { print("\(name) ugat") } } class Cat: Animal { override func makeSound() { print("\(name) nyávog") } } -
Polimorfizmus: Képesség, hogy különböző osztályok objektumai ugyanarra az üzenetre (metódushívásra) különböző módon reagáljanak, az adott típusuktól függően.
// Különböző implementációk a makeSound() metódusra a Dog és Cat osztályokban func playSound(of animal: Animal) { animal.makeSound() // Polimorfikus hívás } let myDog = Dog(name: "Bobby") let myCat = Cat(name: "Murka") playSound(of: myDog) // "Bobby ugat" fog megjelenni playSound(of: myCat) // "Murka nyávog" fog megjelenni -
Absztrakció: A lényeges jellemzők kiemelése egy objektumról, a nem lényegesek figyelmen kívül hagyása. Általánosított reprezentációk létrehozása az objektumokról.
// Egy geometriai alakzat ábrázolása konkrét megvalósítás nélkül protocol Shape { func calculateArea() -> Double func calculatePerimeter() -> Double } // Konkrét megvalósítások kör és négyzet esetén 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 } }