Sobes.tech
Junior

Abstrakt sinfning mohiyati nima?

sobes.tech AI

AIdan javob

Bir abstrakt sinfning maqsadi, boshqa sinflar uchun shablon bo‘lib xizmat qilishdir. U to‘g‘ridan-to‘g‘g‘ri yaratilmaydi, ammo unda abstrakt metodlar (jismisiz) bo‘lishi mumkin va ular voris sinflar tomonidan amalga oshirilishi kerak, shuningdek, aniq metodlar va xususiyatlar ham bo‘lishi mumkin.

Asosiy nuqtalar:

  • Nusxa olish mumkin emas: new AbstraktSinf() xatolik keltirib chiqaradi.
  • Merosi: Faqatgina abstrakt sinfdan meros olish mumkin (extends).
  • Abstrakt metodlar: Voris sinflar amalga oshirishi kerak bo‘lgan interfeysni belgilaydi. abstract kalit so‘zi bilan belgilangan va jismisiz.
  • Aniq metodlar va xususiyatlar: To‘g‘ridan-to‘g‘ri belgilanishi va ishlatilishi mumkin, shuningdek, voris sinflarda qayta yozilishi mumkin.
  • Qisman amalga oshirish: Umumiy tuzilmani va ba’zi asosiy funksionallikni ta’minlaydi, amalga oshirish tafsilotlarini voris sinflarga qoldiradi.

Misol:

<?php

abstract class Figura {
    protected $rang;

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

    abstract public function hisoblaMaydon(); // Abstrakt metod

    public function olganRang() {
        return $this->rang;
    }
}

class Aylana extends Figura {
    private $radius;

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

    public function hisoblaMaydon() {
        return pi() * $this->radius * $this->radius;
    }
}

class Kvadrat extends Figura {
    private $tomoni;

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

    public function hisoblaMaydon() {
        return $this->tomoni * $this->tomoni;
    }
}

// Foydalanish misoli
$aylana = new Aylana("Qizil", 5);
echo "Maydon: " . $aylana->hisoblaMaydon() . ", Rang: " . $aylana->olganRang() . "\n";

$kvadrat = new Kvadrat("Ko‘k", 4);
echo "Maydon: " . $kvadrat->hisoblaMaydon() . ", Rang: " . $kvadrat->olganRang() . "\n";

// Quyidagi kod xatolik keltiradi: Abstrakt sinfni instansiya qilish
// $abstraktFigura = new Figura("Noma’lum");

Sinf va interfeyslar taqqoslash jadvali:

Xususiyat Abstrakt sinf Interfeys Oddiy sinf
Nusxa olish Yo‘q Yo‘q Ha
Merosi Ha (extends) + Amalga oshirish (implements) Faqat Amalga oshirish (implements) Ha (extends)
Metodlar Aniq va abstraktlar Faqat abstrakt (g‘ovdelsiz) Faqat aniq
Xususiyatlar Ha Yo‘q Ha
Ko‘p meros Yo‘q Ha Yo‘q
Ma’nosi Qisman amalga oshirish, umumiy tuzilma Shartnoma (xulq-atvor) belgilash To‘liq amalga oshirish, aniq obyekt

Ushbu yondashuv, bog‘liq sinflar guruhida bo‘lishi kerak bo‘lgan umumiy logika va xususiyatlar mavjud bo‘lsa, lekin ularning aniq xulq-atvori (ba’zi metodlarning amalga oshirilishi) farq qiladigan hollarda qo‘llaniladi. Bu kodni qayta ishlatish va sinf tuzilmasida yagona tartibni ta’minlaydi.