Sobes.tech
Junior

Կարող եք պատմել օբյեկտային ծրագրավորման ժառանգության սկզբունքների մասին?

sobes.tech AI

Պատասխան AI-ից

Ներառումը թույլ է տալիս ստեղծել նոր դաս (մշակված կամ ժառանգական), հիմնված առկա դասի վրա (հայրական, հիմնական կամ սուպեր դաս): Մշակված դասը ժառանգում է հայրական դասի հատկությունները (ատրիբուտները) և մեթոդները, ինչպես նաև կարող է ավելացնել իր սեփական կամ վերագրել ժառանգածները:

Հիմնական գաղափարներ:

  • Ֆունկցիոնալության ընդլայնում: Ներառելով հայրական դասից, մշակված դասը ստանում է հիմնական ֆունկցիոնալությունը և կարող է այն ընդլայնել՝ ավելացնելով նոր մեթոդներ կամ հատկություններ:
  • Մեթոդների վերագրում: Մշակված դասը կարող է փոխել հայրական դասից ժառանգված մեթոդի վարքագիծը՝ ստեղծելով նույն անունով մեթոդ (պոլիմորֆիզմ):
  • Կոդի կրկնօրինակում: Հնարավոր է խուսափել կոդի կրկնությունից, քանի որ ընդհանուր տրամաբանությունը սահմանվում է հայրական դասում:
  • "Են" հարաբերություն: Ներառումը մոդելավորում է "են ինչ-որ" հարաբերությունը (is-a): Օրինակ՝ "Մկնիկը կենդանի է":
<?php

class Animal {
    protected $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function speak() {
        echo "Անհայտ ձայն\n";
    }
}

class Dog extends Animal {
    public function speak() {
        echo "Հա-հա!\n";
    }
}

class Cat extends Animal {
    public function speak() {
        echo "Մյաու-մյաու!\n";
    }
}

$dog = new Dog("Բոբիկ");
$dog->speak(); // Ելք: Հա-հա!

$cat = new Cat("Մուրկա");
$cat->speak(); // Ելք: Մյաու-մյաու!

?>

PHP-ում ժառանգությունը իրականացվում է extends բանալի բառով: Մի դաս կարող է ժառանգել միայն մեկ դասից (միայնակ ժառանգություն), բայց կարող է իրականացնել մի քանի ինտերֆեյս:

Հայրական դասի հատկություններն ու մեթոդները հասանելի են դուստր դասից՝ օգտագործելով parent:: բանալի բառը:

<?php

class ParentClass {
    protected $value = "հայրական արժեք";

    public function showValue() {
        echo $this->value . "\n";
    }
}

class ChildClass extends ParentClass {
    // Վերագրում հատկությունը
    protected $value = "դուստրական արժեք";

    public function showValues() {
        // Հայրական դասի մեթոդի կանչ
        parent::showValue();
        // Դուստրական դասի արժեքի արտածում
        echo $this->value . "\n";
    }
}

$obj = new ChildClass();
$obj->showValues();
// Ելք:
// հայրական արժեք
// դուստրական արժեք

?>

Հասանելիության հիմնական մոդիֆիկատորներ:

  • public: Հասանելի է ամենուր:
  • protected: Հասանելի է միայն դասի ներսում և ժառանգական դասերում:
  • private: Հասանելի միայն դասի ներսում:

Մեթոդները կարող են հայտարարվել որպես final, ինչը կանխում է դրանց վերագրումը ժառանգական դասերում: Դասերը կարող են լինել նաև final, ինչը կանխում է դրանց ժառանգությունը: Կարող են լինել նաև abstract, ինչը պահանջում է դրանց իրականացումը ժառանգական դասերում: