Կարող եք պատմել օբյեկտային ծրագրավորման ժառանգության սկզբունքների մասին?
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, ինչը պահանջում է դրանց իրականացումը ժառանգական դասերում: