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: Instantiating an abstract class
// $აბსტრაქტულიფიგურა = new ფიგურა("უცნობი");

შედარების სია ინტერფეისებთან და ჩვეულებრივ კლასებთან:

მახასიათებელი აბსტრაქტული კლასი ინტერფეისი ჩვეულებრივი კლასი
შექმნის შესაძლებლობა არა არა კი
მემკვიდრეობა კი (extends) + რეალიზაცია (implements) მხოლოდ რეალიზაცია (implements) კი (extends)
მეთოდები კონკრეტული და აბსტრაქტული მხოლოდ აბსტრაქტული (без тела) მხოლოდ კონკრეტული
საკუთრებულებები კი არა კი
მრავალმხრივი მემკვიდრეობა არა კი არა
დანიშნულება ნაწილობრივი რეალიზაცია, საერთო სტრუქტურა კონტრაქტის განსაზღვრა (მოქმედება) სრული რეალიზაცია, კონკრეტული ობიექტი

გამოყენებულია, როდესაც არსებობს საერთო ლოგიკა და თვისებები, რომლებიც უნდა ჰქონდეთ დაკავშირებულ კლასებს, მაგრამ მათი კონკრეტული ქცევა (მეთოდების რეალიზაცია) განსხვავდება. უზრუნველყოფს კოდის მრავალჯერად გამოყენებას და სტრუქტურის ერთგვაროვნებას.