Junior
Obyektga yo'naltirilgan dasturlashda inkapsulyatsiya nima?
sobes.tech AI
AIdan javob
Kapsülleme, məlumatların (xüsusiyyətlərin) və bu məlumatlarla işləyən metodların tək bir varlıqda (obyekt və ya sinif) birləşdirilməsidir və daxili tətbiqin xarici dünyadan gizlədilməsidir. Bu, məlumatlara girişin idarə olunmasına və sinifin daxili strukturunun dəyişdirilməsinə imkan verir, digər kodu təsir etmədən.
Kapsüllemenin əsas aspektləri:
- Məlumatların gizlənməsi: Obeyektin daxili məlumatlarına birbaşa giriş məhdudlaşdırılır. Giriş, ümumi (public) metodlar vasitəsilə həyata keçirilir — məlumat almaq üçün getterlər və məlumat dəyişdirmək üçün setterlər.
- İnvariantların qorunması: Sinif metodları, məlumatların düzgünlüyünü yoxlamaq üçün məntiqə malik ola bilər, beləliklə obyekt etibarlı vəziyyətdə qalır.
Nümunə:
<?php
class User {
private string $name; // Gizli xüsusiyyət
private int $age; // Gizli xüsusiyyət
public function __construct(string $name, int $age) {
$this->setName($name);
$this->setAge($age);
}
// name üçün getter
public function getName(): string {
return $this->name;
}
// name üçün validasiya ilə setter
public function setName(string $name): void {
// Lazım olsa, adın doğruluğunu yoxlamaq olar
$this->name = $name;
}
// age üçün getter
public function getAge(): int {
return $this->age;
}
// age üçün validasiya ilə setter
public function setAge(int $age): void {
if ($age < 0) {
throw new InvalidArgumentException("Yaş sıfırdan kiçik ola bilməz.");
}
$this->age = $age;
}
// Daxili məlumatlardan istifadə edən metod
public function introduce(): string {
return "Mənim adım " . $this->name . " və mən " . $this->age . " yaşındayam.";
}
}
// Sinifin istifadəsi
$user = new User("Ivan", 30);
echo $user->introduce(); // Çıxış: Mənim adım Ivan və mən 30 yaşındayam.
// Birbaşa xüsusi xüsusiyyətə giriş cəhdi səhv olacaq:
// $user->age = -5; // Ölümcül xəta: Cannot access private property User::$age
// Validasiya ilə setter-in istifadəsi
try {
$user->setAge(-5);
} catch (InvalidArgumentException $e) {
echo "\nXəta: " . $e->getMessage(); // Çıxış: Xəta: Yaş sıfırdan kiçik ola bilməz.
}