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

Қолаверса, умумий логика ва хусусиятлар бўлса, уларга тегишли бўлган гуруҳлар учун, аммо уларнинг конкрет ҳаракати (айрим методларнинг амалга оширилиши) фарқ қилади. Бу кодни қайтадан ишлатиш ва структурада бирдекликни таъминлайди.