Junior
Τι είναι η κρυπτογράφηση στον αντικειμενοστραφή προγραμματισμό;
sobes.tech AI
Απάντηση από AI
Η ενσωμάτωση είναι η συνένωση δεδομένων (ιδιοτήτων) και μεθόδων που εργάζονται με αυτά τα δεδομένα σε μια ενιαία οντότητα (αντικείμενο ή κλάση), καθώς και η απόκρυψη της εσωτερικής υλοποίησης από τον εξωτερικό κόσμο. Αυτό επιτρέπει τον έλεγχο της πρόσβασης στα δεδομένα και την τροποποίηση της εσωτερικής δομής της κλάσης χωρίς να επηρεάζεται ο υπόλοιπος κώδικας.
Βασικές πτυχές της ενσωμάτωσης:
- Απόκρυψη δεδομένων: Η άμεση πρόσβαση στα εσωτερικά δεδομένα του αντικειμένου περιορίζεται. Η πρόσβαση γίνεται μέσω δημόσιων (public) μεθόδων — getters (για λήψη δεδομένων) και setters (για τροποποίηση δεδομένων).
- Τήρηση 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(); // Εμφάνιση: Σφάλμα: Η ηλικία δεν μπορεί να είναι μικρότερη από το μηδέν.
}