Obyektga yo'naltirilgan dasturlashda meroslik prinsiplari haqida gapira olasizmi?
sobes.tech AI
AIdan javob
Miras kalıtım, mövcud bir sinfə (ata, əsas və ya super sinif) əsaslanan yeni bir sinf (qız və ya törəmə) yaratmağa imkan verir. Qız sinif, ata sinifin xüsusiyyətlərini (atributlar) və metodlarını miras alır və öz xüsusiyyətlərini əlavə edə və ya miras alınanları yenidən yaza bilər.
Əsas anlayışlar:
- Funksionallığın genişləndirilməsi: Ata sinifdən miras alaraq, qız sinif əsas funksionallığı əldə edir və onu yeni metodlar və ya xüsusiyyətlər əlavə etməklə genişləndirə bilər.
- Metodların yenidən yazılması: Qız sinif, eyni adlı metodu yaradaraq (polimorfizm) ata sinifdən miras alınan metodun davranışını dəyişə bilər.
- Koddakı təkrarlamanın qarşısını almaq: Ümumi məntiq ata sinifdə müəyyən olunduğu üçün kod təkrarlanmasını qarşısını alır.
- "Bir şeydir" əlaqəsi: Miras, "bir şeydir" (is-a) əlaqəsini modelləşdirir. Məsələn, "Bir pişik bir heyvandır".
<?php
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
echo "Naməlum səs\n";
}
}
class Dog extends Animal {
public function speak() {
echo "Hav-hav!\n";
}
}
class Cat extends Animal {
public function speak() {
echo "Miyav-miyav!\n";
}
}
$dog = new Dog("Bobby");
$dog->speak(); // Çıxış: Hav-hav!
$cat = new Cat("Murka");
$cat->speak(); // Çıxış: Miyav-miyav!
?>
PHP-də miras extends açar sözü ilə həyata keçirilir. Bir sinif yalnız bir sinifdən miras ala bilər (tək miras), lakin çoxlu interfeysləri tətbiq edə bilər.
Ata sinifin xüsusiyyətlərinə və metodlarına qız sinifindən parent:: açar sözü ilə daxil olmaq mümkündür.
<?php
class ParentClass {
protected $value = "ata dəyəri";
public function showValue() {
echo $this->value . "\n";
}
}
class ChildClass extends ParentClass {
// Xüsusiyyətin yenidən yazılması
protected $value = "uşaq dəyəri";
public function showValues() {
// Ata sinifin metodunu çağır
parent::showValue();
// Uşaq sinifin dəyərini göstər
echo $this->value . "\n";
}
}
$obj = new ChildClass();
$obj->showValues();
// Çıxış:
// ata dəyəri
// uşaq dəyəri
?>
Əsas giriş modifikatorları:
public: Hər yerdən əlçatandır.protected: Sinif daxilində və miras alan siniflərdə əlçatandır.private: Yalnız sinif daxilində əlçatandır.
Metodlar final kimi elan edilə bilər, bu onların törəmə siniflərdə yenidən yazılmasını qadağan edir. Siniflər də final ola bilər, bu onların miras alınmasını qadağan edir. abstract ola bilərlər, bu onların törəmə siniflərdə tətbiqini tələb edir.