Sobes.tech
Junior

Μίλησέ μου για τις αρχές του αντικειμενοστραφούς προγραμματισμού (ΟΟΠ).

sobes.tech AI

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

Η αντικειμενοστραφής προγραμματισμός (OOP) βασίζεται σε τέσσερις βασικές αρχές:

  1. Ενθυλάκωση: Η σύνδεση δεδομένων (ιδιοτήτων) και μεθόδων (λειτουργιών) που εργάζονται με αυτά τα δεδομένα σε ένα ενιαίο αντικείμενο. Αυτό κρύβει τις λεπτομέρειες υλοποίησης και παρέχει ελεγχόμενη πρόσβαση στα δεδομένα.

    <?php
    class BankAccount {
        private float $balance = 0; // Κρυφά δεδομένα
    
        public function deposit(float $amount): void { // Μέθοδοι που παρέχουν πρόσβαση
            if ($amount > 0) {
                $this->balance += $amount;
            }
        }
    
        public function getBalance(): float {
            return $this->balance;
        }
    }
    ?>
    
  2. Αφηρημένη: Τονίζει τα ουσιώδη χαρακτηριστικά ενός αντικειμένου και κρύβει τις μη ουσιώδεις λεπτομέρειες. Αντιπροσωπεύει ένα απλοποιημένο μοντέλο του πραγματικού κόσμου.

    <?php
    abstract class Shape { // Αφηρημένη κλάση
        abstract public function area(): float; // Αφηρημένη μέθοδος
    
        // Μπορεί να έχει και συγκεκριμένες μεθόδους, π.χ.: 
        public function getDescription(): string {
            return "This is a shape.";
        }
    }
    
    class Circle extends Shape {
        private float $radius;
    
        public function __construct(float $radius) {
            $this->radius = $radius;
        }
    
        public function area(): float { // Υλοποίηση της αφηρημένης μεθόδου
            return M_PI * $this->radius * $this->radius;
        }
    }
    ?>
    
  3. Κληρονομικότητα: Δημιουργία μιας νέας κλάσης (παιδί) με βάση μια υπάρχουσα (γονέα), κληρονομώντας τις ιδιότητες και τις μεθόδους της. Αυτό προάγει την επανάχρηση κώδικα.

    <?php
    class Animal {
        protected string $name;
    
        public function __construct(string $name) {
            $this->name = $name;
        }
    
        public function eat(): void {
            echo "{$this->name} is eating.\n";
        }
    }
    
    class Dog extends Animal { // Dog κληρονομεί από Animal
        public function bark(): void {
            echo "{$this->name} says Woof!\n";
        }
    }
    
    $dog = new Dog("Buddy");
    $dog->eat();  // Χρήση της κληρονομημένης μεθόδου
    $dog->bark();
    ?>
    
  4. Πολυμορφισμός: Η δυνατότητα αντικειμένων διαφορετικών κλάσεων να ανταποκρίνονται σε μια ίδια κλήση μεθόδου με διαφορετικό τρόπο. "Πολλές μορφές".

    <?php
    interface Speakable { // Διεπαφή για παράδειγμα πολυμορφισμού
        public function speak(): void;
    }
    
    class Cat implements Speakable {
        public function speak(): void {
            echo "Meow!\n";
        }
    }
    
    class Duck implements Speakable {
        public function speak(): void {
            echo "Quack!\n";
        }
    }
    
    function makeSound(Speakable $animal): void { // Συνάρτηση που δέχεται διαφορετικούς τύπους αντικειμένων
        $animal->speak(); // Κλήση της ίδιας μεθόδου
    }
    
    $cat = new Cat();
    $duck = new Duck();
    
    makeSound($cat); // Κλήση της μεθόδου Cat::speak()
    makeSound($duck); // Κλήση της μεθόδου Duck::speak()
    ?>