Ποια είναι τα βασικά στοιχεία της αντικειμενοστραφούς προγραμματισμού;
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 } }