Sobes.tech
Junior

Τι είναι η κρυπτογράφηση στον αντικειμενοστραφή προγραμματισμό;

sobes.tech AI

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

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

Βασικές πτυχές της ενσωμάτωσης:

  1. Απόκρυψη δεδομένων: Η άμεση πρόσβαση στα εσωτερικά δεδομένα του αντικειμένου περιορίζεται. Η πρόσβαση γίνεται μέσω δημόσιων (public) μεθόδων — getters (για λήψη δεδομένων) και setters (για τροποποίηση δεδομένων).
  2. Τήρηση invariants: Οι μέθοδοι της κλάσης μπορούν να περιέχουν λογική για τον έλεγχο της ορθότητας των δεδομένων κατά την ορισμό τους, διασφαλίζοντας ότι το αντικείμενο βρίσκεται σε έγκυρη κατάσταση.

Παράδειγμα:

<?php
class User {
    private string $name; // Απόκρυφη ιδιότητα
    private int $age;    // Απόκρυφη ιδιότητα

    public function __construct(string $name, int $age) {
        $this->setName($name);
        $this->setAge($age);
    }

    // Getter για όνομα
    public function getName(): string {
        return $this->name;
    }

    // Setter για όνομα με επικύρωση
    public function setName(string $name): void {
        // Μπορεί να προστεθεί επικύρωση ονόματος αν χρειάζεται
        $this->name = $name;
    }

    // Getter για ηλικία
    public function getAge(): int {
        return $this->age;
    }

    // Setter για ηλικία με επικύρωση
    public function setAge(int $age): void {
        if ($age < 0) {
            throw new InvalidArgumentException("Η ηλικία δεν μπορεί να είναι μικρότερη από το μηδέν.");
        }
        $this->age = $age;
    }

    // Μέθοδος που χρησιμοποιεί εσωτερικά δεδομένα
    public function introduce(): string {
        return "Με λένε " . $this->name . " και είμαι " . $this->age . " ετών.";
    }
}

// Χρήση της κλάσης
$user = new User("Ivan", 30);
echo $user->introduce(); // Εμφάνιση: Με λένε Ivan και είμαι 30 ετών.

// Η προσπάθεια άμεσης πρόσβασης σε ιδιωτική ιδιότητα θα προκαλέσει σφάλμα:
// $user->age = -5; // Μηχανικό σφάλμα: Cannot access private property User::$age

// Χρήση του setter με επικύρωση
try {
    $user->setAge(-5);
} catch (InvalidArgumentException $e) {
    echo "\nΣφάλμα: " . $e->getMessage(); // Εμφάνιση: Σφάλμα: Η ηλικία δεν μπορεί να είναι μικρότερη από το μηδέν.
}