Sobes.tech
Junior

Ποια είναι τα βασικά στοιχεία της αντικειμενοστραφούς προγραμματισμού;

sobes.tech AI

Απάντηση από AI

Αρχές της αντικειμενοστραφούς προγραμματισμού:

  • Ενθυλάκωση: Ομαδοποίηση δεδομένων (ιδιοτήτων) και μεθόδων που λειτουργούν με αυτά σε ένα αντικείμενο και απόκρυψη της εσωτερικής υλοποίησης από τον εξωτερικό κόσμο. Η πρόσβαση στα δεδομένα γίνεται μέσω συγκεκριμένων δημόσιων διεπαφών (μεθόδων).

    // Απόκρυψη της εσωτερικής υλοποίησης της ιδιότητας balance
    class Account {
        private var balance: Double = 0.0
    
        func deposit(amount: Double) {
            if amount > 0 {
                balance += amount
            }
        }
    
        func getBalance() -> Double {
            return balance
        }
    }
    
  • Κληρονομικότητα: Μηχανισμός που επιτρέπει τη δημιουργία μιας νέας κλάσης (υποκλάση) βάσει μιας υπάρχουσας (μητρική), κληρονομώντας τις ιδιότητες και τις μεθόδους της. Αυτό προάγει την επανάχρηση κώδικα.

    // Οι κλάσεις Dog και Cat κληρονομούν τις ιδιότητες και τις μεθόδους της κλάσης Animal
    class Animal {
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func makeSound() {
            print("\(name) εκπέμπει ήχο")
        }
    }
    
    class Dog: Animal {
        override func makeSound() {
            print("\(name) γαβγίζει")
        }
    }
    
    class Cat: Animal {
        override func makeSound() {
            print("\(name) νιαουρίζει")
        }
    }
    
  • Πολυμορφισμός: Η δυνατότητα αντικειμένων διαφορετικών κλάσεων να ανταποκρίνονται σε ένα μήνυμα (κλήση μεθόδου) με διαφορετικό τρόπο, ανάλογα με τον τύπο τους.

    // Διάφορες υλοποιήσεις της μεθόδου makeSound() στις κλάσεις Dog και Cat
    func playSound(of animal: Animal) {
        animal.makeSound() // Πολυμορφική κλήση
    }
    
    let myDog = Dog(name: "Bobby")
    let myCat = Cat(name: "Murka")
    
    playSound(of: myDog) // Θα εμφανίσει "Bobby γαβγίζει"
    playSound(of: myCat) // Θα εμφανίσει "Murka νιαουρίζει"
    
  • Αφηρημένη: Τονισμό των ουσιωδών χαρακτηριστικών ενός αντικειμένου και αγνόηση των μη ουσιωδών. Δημιουργία γενικών αναπαραστάσεων αντικειμένων.

    // Αναπαράσταση γεωμετρικού σχήματος χωρίς συγκεκριμένη υλοποίηση
    protocol Shape {
        func calculateArea() -> Double
        func calculatePerimeter() -> Double
    }
    
    // Συγκεκριμένες υλοποιήσεις για κύκλο και τετράγωνο
    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
        }
    }