Sobes.tech
Junior

Kāda ir abstraktās klases būtība?

sobes.tech AI

Atbilde no AI

Abstrakta klase ir kalpo kā šablons citām klasēm. Tā nevar tikt tieši izveidota, bet var saturēt abstraktus metodes (bez ķermeņa), kuras jāīsteno bērnu klasēs, kā arī konkrētas metodes un īpašības.

Galvenās iezīmes:

  • Nav iespējams izveidot instanci: new AbstraktaKlase() izraisīs kļūdu.
  • Mantošana: tikai mantošana (extends).
  • Abstraktas metodes: nosaka saskarni, kuru jāīsteno bērnu klasēm. Marķētas ar vārdu abstract un tām nav ķermeņa.
  • Konkrētas metodes un īpašības: var būt definētas un tieši izmantotas, kā arī pārdefinētas bērnu klasēs.
  • Daļēja īstenošana: nodrošina kopēju struktūru un noteiktu pamatfunkcionalitāti, detaļas atstājot bērnu klasēm.

Piemērs:

<?php

abstract class Figūra {
    protected $krāsa;

    public function __construct($krāsa) {
        $this->krāsa = $krāsa;
    }

    abstract public function aprēķinātPlatību(); // Abstrakta metode

    public function iegūtKrāsu() {
        return $this->krāsa;
    }
}

class Aplis extends Figūra {
    private $rādiuss;

    public function __construct($krāsa, $rādiuss) {
        parent::__construct($krāsa);
        $this->rādiuss = $rādiuss;
    }

    public function aprēķinātPlatību() {
        return pi() * $this->rādiuss * $this->rādiuss;
    }
}

class Kvadrāts extends Figūra {
    private $malas;

    public function __construct($krāsa, $malas) {
        parent::__construct($krāsa);
        $this->malas = $malas;
    }

    public function aprēķinātPlatību() {
        return $this->malas * $this->malas;
    }
}

// Piemērs izmantošanai
$aplis = new Aplis("Sarkana", 5);
echo "Aplis: platība: " . $aplis->aprēķinātPlatību() . ", krāsa: " . $aplis->iegūtKrāsu() . "\n";

$kvadrāts = new Kvadrāts("Zila", 4);
echo "Kvadrāts: platība: " . $kvadrāts->aprēķinātPlatību() . ", krāsa: " . $kvadrāts->iegūtKrāsu() . "\n";

// Nākamais kods izraisīs kļūdu: Fatal error: Instantiating an abstract class
// $abstraktaFigūra = new Figūra("Nezināma");

Salīdzināšanas tabula ar saskarnēm un parastajām klasēm:

Raksturlielums Abstrakta klase Saskarne Parasta klase
Objekta izveide
Mantošana Jā (extends) + īstenošana (implements) Tikai īstenošana (implements) Jā (extends)
Metodes Konkrētas un abstraktas Tikai abstraktas (bez ķermeņa) Tikai konkrētas
Īpašības
Daudzveidīga mantošana
Mērķis Daļēja īstenošana, kopēja struktūra Līguma definīcija (uzvedība) Pilna īstenošana, konkrēts objekts

Tiek izmantots, kad ir kopēja loģika un īpašības, kas jābūt saistītajām klasēm, bet to konkrētā uzvedība (metožu īstenošana) atšķiras. Nodrošina koda atkārtotu izmantošanu un vienotu struktūru.