Sobes.tech
Junior

Ի՞նչ է աբստրակտ դասի էությունը։

sobes.tech AI

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

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

Հիմնական կետեր՝

  • Նմուշ ստեղծել հնարավոր չէ: new ԱբստրակտԴաս() կբերի սխալ:
  • Երեսպատում: Միայն ժառանգություն (extends):
  • Աբստրակտ մեթոդներ: Դրանք սահմանում են ինտերֆեյսը, որը պետք է իրականացնել ենթակլասները: Նշվում են abstract բառով և չունեն մարմին:
  • Կոնկրետ մեթոդներ և հատկություններ: Կարող են անմիջապես սահմանվել և օգտագործվել, ինչպես նաև վերագրանցվել ենթակլասներում:
  • Հատկային իրականացում: Տրամադրում է ընդհանուր կառուցվածք և որոշ հիմնական ֆունկցիոնալություն, իսկ մանրամասները թողնում է ենթակլասներին:

Օրինակ՝

<?php

abstract class Գծագիծ {
    protected $գույն;

    public function __construct($գույն) {
        $this->գույն = $գույն;
    }

    abstract public function հաշվարկելՏարածք(); // Աբստրակտ մեթոդ

    public function ստանալԳույն() {
        return $this->գույն;
    }
}

class Վանդակ extends Գծագիծ {
    private $արմատ;

    public function __construct($գույն, $արմատ) {
        parent::__construct($գույն);
        $this->արմատ = $արմատ;
    }

    public function հաշվարկելՏարածք() {
        return pi() * $this->արմատ * $this->արմատ;
    }
}

class քառակուսին extends Գծագիծ {
    private $պատուհան;

    public function __construct($գույն, $պատուհան) {
        parent::__construct($գույն);
        $this->պատուհան = $պատուհան;
    }

    public function հաշվարկելՏարածք() {
        return $this->պատուհան * $this->պատուհան;
    }
}

// Օգտագործման օրինակ
$վանդակ = new Վանդակ("Կարմիր", 5);
echo "Վանդակային տարածք: " . $վանդակ->հաշվարկելՏարածք() . ", Գույն: " . $վանդակ->ստանալԳույն() . "\n";

$քառակուսին = new քառակուսին("Կապույտ", 4);
echo "Քառակուսի տարածք: " . $քառակուսին->հաշվարկելՏարածք() . ", Գույն: " . $քառակուսին->ստանալԳույն() . "\n";

// Հաջորդ կոդը սխալ կբերի՝ Fatal error: Աբստրակտ դասը կարող է միայն ժառանգվել
// $աբստրակտԳծագիծ = new Գծագիծ("Անհայտ");

Համեմատական աղյուսակ ինտերֆեյսների և սովորական դասերի հետ՝

Գծանշում Աբստրակտ դաս Ինտերֆեյս Սովորական դաս
Նմուշ ստեղծել Ոչ Ոչ Այո
Երեսպատում Այո (extends) + Իրականացում (implements) Միայն Իրականացում (implements) Այո (extends)
Մեթոդներ Կոնկրետ և աբստրակտ Միայն աբստրակտ (անհատական մարմնով) Միայն կոնկրետ
Հատկություններ Այո Ոչ Այո
Բազմամատյան ժառանգություն Ոչ Այո Ոչ
Նպատակը Հատկային իրականացում, ընդհանուր կառուցվածք Կոնտակտի սահմանում (ծխել) Լրիվ իրականացում, կոնկրետ օբյեկտ

Օգտագործվում է, երբ կա ընդհանուր տրամաբանություն և հատկություններ, որոնք պետք է ունենա կապված դասերի խումբը, բայց դրանց կոնկրետ վարքագիծը (մեթոդների իրականացումը) տարբեր է: Սա ապահովում է կոդի բազմակի օգտագործում և միատարր կառուցվածք։