Junior
Czym są zasady programowania obiektowego?
sobes.tech AI
Odpowiedź od AI
Zasady OOP:
-
Enkapsulacja: Grupowanie danych (właściwości) i metod operujących na tych danych w jednym obiekcie oraz ukrywanie wewnętrznej implementacji przed światem zewnętrznym. Dostęp do danych odbywa się przez określone publiczne interfejsy (metody).
// Ukrycie wewnętrznej implementacji właściwości balance class Account { private var balance: Double = 0.0 func deposit(amount: Double) { if amount > 0 { balance += amount } } func getBalance() -> Double { return balance } } -
Dziedziczenie: Mechanizm umożliwiający tworzenie nowej klasy (dziecko) na podstawie istniejącej (rodzic), dziedzicząc jej właściwości i metody. Sprzyja ponownemu użyciu kodu.
// Klasy Dog i Cat dziedziczą właściwości i metody klasy Animal class Animal { let name: String init(name: String) { self.name = name } func makeSound() { print("\(name) wydaje dźwięk") } } class Dog: Animal { override func makeSound() { print("\(name) szczeka") } } class Cat: Animal { override func makeSound() { print("\(name) miauczy") } } -
Polimorfizm: Zdolność obiektów różnych klas do reagowania na ten sam komunikat (wywołanie metody) w różny sposób, w zależności od ich typu.
// Różne implementacje metody makeSound() w klasach Dog i Cat func playSound(of animal: Animal) { animal.makeSound() // Wywołanie polimorficzne } let myDog = Dog(name: "Bobby") let myCat = Cat(name: "Murka") playSound(of: myDog) // Wypisze "Bobby szczeka" playSound(of: myCat) // Wypisze "Murka miauczy" -
Abstrakcja: Wyróżnianie istotnych cech obiektu i ignorowanie nieistotnych. Tworzenie uogólnionych reprezentacji obiektów.
// Reprezentacja figury geometrycznej bez konkretnej implementacji protocol Shape { func calculateArea() -> Double func calculatePerimeter() -> Double } // Konkretne implementacje dla koła i kwadratu 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 } }