Sobes.tech
Junior

Mürəkkəb sinifin mahiyyəti nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Abstrakt sinif digər siniflər üçün şablon kimi xidmət etmək məqsədilə yaradılır. Birbaşa yaradıla bilməz, lakin abstrakt metodlar (bədən olmadan) və həmçinin konkret metodlar və xüsusiyyətlər içərə bilər.

Əsas məqamlar:

  • Nümunə yarada bilməzsiniz: new AbstraktSinif() səhv verəcək.
  • İrsi: Yalnız irsi mümkündür (extends).
  • Abstrakt metodlar: interfeys müəyyən edir və alt siniflər tərəfindən həyata keçirilməlidir. abstract açar sözü ilə qeyd olunur və bədənə malik deyil.
  • Konkret metodlar və xüsusiyyətlər: birbaşa müəyyən edilə və istifadə oluna bilər, həmçinin alt siniflərdə yenidən təyin oluna bilər.
  • Qismən həyata keçirmə: ümumi struktur və bəzi əsas funksionallıq təmin edir, həyata keçirmə detalları alt siniflərin ixtiyarındadır.

Misal:

<?php

abstract class Forma {
    protected $rəng;

    public function __construct($rəng) {
        $this->rəng = $rəng;
    }

    abstract public function sahəniHesabla(); // Abstrakt metod

    public function rəngiAl() {
        return $this->rəng;
    }
}

class Dairə extends Forma {
    private $radius;

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

    public function sahəniHesabla() {
        return pi() * $this->radius * $this->radius;
    }
}

class Kvadrat extends Forma {
    private $tərəf;

    public function __construct($rəng, $tərəf) {
        parent::__construct($rəng);
        $this->tərəf = $tərəf;
    }

    public function sahəniHesabla() {
        return $this->tərəf * $this->tərəf;
    }
}

// İstifadə nümunəsi
$dairə = new Dairə("Qırmızı", 5);
echo "Dairənin sahəsi: " . $dairə->sahəniHesabla() . ", Rəng: " . $dairə->rəngiAl() . "\n";

$kvadrat = new Kvadrat("Mavi", 4);
echo "Kvadratın sahəsi: " . $kvadrat->sahəniHesabla() . ", Rəng: " . $kvadrat->rəngiAl() . "\n";

// Növbəti kod səhv verəcək: Fatal error: Abstract class instansiyası yaradıla bilməz
// $abstraktForma = new Forma("Naməlum");

Cədvəl müqayisəsi interfeyslər və adi siniflərlə:

Xüsusiyyət Abstrakt sinif İnterfeys Adi sinif
Nümunə yarada bilməz Yox Yox Bəli
İrsi Bəli (extends) + İcrası (implements) Yalnız İcrası (implements) Bəli (extends)
Metodlar Konkret və abstraktlar Yalnız abstraktlar (bədən olmadan) Yalnız konkretlər
Xüsusiyyətlər Bəli Yox Bəli
Çoxlu irsi Yox Bəli Yox
Təyinat Qismən həyata keçirmə, ümumi struktur Müqavilənin müəyyənləşdirilməsi (davranış) Tam həyata keçirmə, konkret obyekt

İstifadə olunur, ümumi loqika və xüsusiyyətlər olan zaman, lakin onların konkret davranışı (bəzi metodların həyata keçirilməsi) fərqli olur. Kodun çox dəfə istifadəsini və siniflərin strukturunda vahidliyi təmin edir.