Junior
Care este esența unei clase abstracte?
sobes.tech AI
Răspuns de la AI
Scopul unei clase abstracte este de a servi ca șablon pentru alte clase. Nu poate fi creată direct, dar poate conține metode abstracte (fără corp), care trebuie implementate în clasele derivate, precum și metode și proprietăți concrete.
Puncte cheie:
- Nu se poate crea o instanță:
new ClasaAbstractă()va cauza o eroare. - Moștenire: Se poate moșteni doar de la o clasă abstractă (
extends). - Metode abstracte: Definește interfața pe care trebuie să o implementeze clasele derivate. Sunt marcate cu cuvântul cheie
abstractși nu au corp. - Metode și proprietăți concrete: Pot fi definite și utilizate direct, precum și suprascrise în clasele derivate.
- Implementare parțială: Oferă o structură generală și o anumită funcționalitate de bază, lăsând detaliile de implementare la discreția claselor derivate.
Exemplu:
<?php
abstract class Figura {
protected $culoare;
public function __construct($culoare) {
$this->culoare = $culoare;
}
abstract public function calculeazaAria(); // Metodă abstractă
public function obtineCuloare() {
return $this->culoare;
}
}
class Cerc extends Figura {
private $raza;
public function __construct($culoare, $raza) {
parent::__construct($culoare);
$this->raza = $raza;
}
public function calculeazaAria() {
return pi() * $this->raza * $this->raza;
}
}
class Patrat extends Figura {
private $latura;
public function __construct($culoare, $latura) {
parent::__construct($culoare);
$this->latura = $latura;
}
public function calculeazaAria() {
return $this->latura * $this->latura;
}
}
// Exemplu de utilizare
$cerc = new Cerc("Rosu", 5);
echo "Aria cercului: " . $cerc->calculeazaAria() . ", Culoare: " . $cerc->obtineCuloare() . "\n";
$patrat = new Patrat("Albastru", 4);
echo "Aria pătratului: " . $patrat->calculeazaAria() . ", Culoare: " . $patrat->obtineCuloare() . "\n";
// Codul următor va cauza o eroare fatală: instanțierea unei clase abstracte
// $formaAbstracta = new Figura("Necunoscut");
Tabel comparativ cu interfețe și clase normale:
| Caracteristică | Clasă abstractă | Interfață | Clasă normală |
|---|---|---|---|
| Creare instanță | Nu | Nu | Da |
| Moștenire | Da (extends) + Implementare (implements) |
Doar Implementare (implements) |
Da (extends) |
| Metode | Concrete și abstracte | Doar abstracte (fără corp) | Doar concrete |
| Proprietăți | Da | Nu | Da |
| Moștenire multiplă | Nu | Da | Nu |
| Scop | Implementare parțială, structură generală | Definirea unui contract (comportament) | Implementare completă, obiect concret |
Este utilizată atunci când există logică și proprietăți comune care trebuie să fie la un grup de clase legate, dar comportamentul lor specific (implementarea anumitor metode) diferă. Asigură reutilizarea codului și uniformitatea în structura claselor.