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) |
| Методлар | Аниқ ва абстрактлар | Фақат абстрактлар (ҳеч қандай тана) | Фақат аниқлар |
| Хусусиятлар | Ҳа | Йўқ | Ҳа |
| Кўпмерослик | Йўқ | Ҳа | Йўқ |
| Мақсад | Бўлакча амалга ошириш, умумий структура | Контрактни аниқлаш (хулосалар) | Тўлиқ амалга ошириш, аниқ объект |
Қолаверса, умумий логика ва хусусиятлар бўлса, уларга тегишли бўлган гуруҳлар учун, аммо уларнинг конкрет ҳаракати (айрим методларнинг амалга оширилиши) фарқ қилади. Бу кодни қайтадан ишлатиш ва структурада бирдекликни таъминлайди.