Sobes.tech
Junior

V čom spočíva podstata abstraktnej triedy?

sobes.tech AI

Odpoveď od AI

Podstata abstraktnej triedy je slúžiť ako šablóna pre iné triedy. Nemôže byť vytvorená priamo, ale môže obsahovať abstraktné metódy (bez tela), ako aj konkrétne metódy a vlastnosti.

Kľúčové body:

  • Nedá sa vytvoriť inštancia: new AbstraktnaTrida() spôsobí chybu.
  • Dedičnosť: Len dedičstvo (extends).
  • Abstraktné metódy: Definujú rozhranie, ktoré musia implementovať podtriedy. Označujú sa kľúčovým slovom abstract a nemajú telo.
  • Konkrétne metódy a vlastnosti: Môžu byť priamo definované a použité, ako aj prepísané v podtriedach.
  • Čiastočná implementácia: Poskytuje všeobecnú štruktúru a určitú základnú funkcionalitu, detaily implementácie sú na podtriedach.

Príklad:

<?php

abstract class Tvar {
    protected $farba;

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

    abstract public function vypocitatPlochu(); // Abstraktná metóda

    public function ziskajFarbu() {
        return $this->farba;
    }
}

class Kruh extends Tvar {
    private $polomer;

    public function __construct($farba, $polomer) {
        parent::__construct($farba);
        $this->polomer = $polomer;
    }

    public function vypocitatPlochu() {
        return pi() * $this->polomer * $this->polomer;
    }
}

class Stvorec extends Tvar {
    private $strana;

    public function __construct($farba, $strana) {
        parent::__construct($farba);
        $this->strana = $strana;
    }

    public function vypocitatPlochu() {
        return $this->strana * $this->strana;
    }
}

// Príklad použitia
$kruh = new Kruh("Červená", 5);
echo "Plocha kruhu: " . $kruh->vypocitatPlochu() . ", Farba: " . $kruh->ziskajFarbu() . "\n";

$stvorec = new Stvorec("Modrá", 4);
echo "Plocha štvorca: " . $stvorec->vypocitatPlochu() . ", Farba: " . $stvorec->ziskajFarbu() . "\n";

// Nasledujúci kód spôsobí chybu: Fatal error: Nedá sa inštancovať abstraktnú triedu
// $abstraktnaTrieda = new Tvar("Neznámy");

Porovnávacia tabuľka s rozhraniami a bežnými triedami:

Charakteristika Abstraktná trieda Rozhranie Bežná trieda
Vytvorenie inštancie Nie Nie Áno
Dedičnosť Áno (extends) + Implementácia (implements) Len Implementácia (implements) Áno (extends)
Metódy Konkrétne a abstraktné Len abstraktné (bez tela) Len konkrétne
Vlastnosti Áno Nie Áno
Viacnásobná dedičnosť Nie Áno Nie
Účel Čiastočná implementácia, všeobecná štruktúra Definícia zmluvy (správanie) Kompletná implementácia, konkrétny objekt

Používa sa, keď existuje spoločná logika a vlastnosti, ktoré musia mať skupina súvisiacich tried, ale ich konkrétne správanie (implementácia niektorých metód) sa líši. Zabezpečuje opakované použitie kódu a jednotnú štruktúru tried.