Sobes.tech
Junior

Ποια είναι η ουσία μιας αφηρημένης κλάσης;

sobes.tech AI

Απάντηση από AI

Η ουσία μιας αφηρημένης κλάσης είναι να χρησιμεύει ως πρότυπο για άλλες κλάσεις. Δεν μπορεί να δημιουργηθεί άμεσα, αλλά μπορεί να περιέχει αφηρημένες μεθόδους (χωρίς σώμα), καθώς και συγκεκριμένες μεθόδους και ιδιότητες.

Βασικά σημεία:

  • Δεν μπορεί να δημιουργηθεί δείγμα: new ΑφηρημένηΚλάση() θα προκαλέσει σφάλμα.
  • Κληρονόμηση: Μόνο κληρονόμηση από την αφηρημένη κλάση (extends).
  • Αφηρημένες μέθοδοι: Ορίζουν το interface που πρέπει να υλοποιήσουν οι υποκλάσεις. Επισημαίνονται με τη λέξη-κλειδί 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 Σχήμα("Άγνωστο");

Πίνακας σύγκρισης με interfaces και κανονικές κλάσεις:

Χαρακτηριστικό Αφηρημένη κλάση Interface Κανονική κλάση
Δημιουργία δείγματος Όχι Όχι Ναι
Κληρονόμηση Ναι (extends) + Υλοποίηση (implements) Μόνο Υλοποίηση (implements) Ναι (extends)
Μέθοδοι Συγκεκριμένες και αφηρημένες Μόνο αφηρημένες (χωρίς σώμα) Μόνο συγκεκριμένες
Ιδιότητες Ναι Όχι Ναι
Πολλαπλή κληρονόμηση Όχι Ναι Όχι
Σκοπός Μερική υλοποίηση, γενική δομή Ορισμός συμβολαίου (συμπεριφοράς) Πλήρης υλοποίηση, συγκεκριμένο αντικείμενο

Χρησιμοποιείται όταν υπάρχει κοινή λογική και ιδιότητες που πρέπει να έχουν μια ομάδα σχετικών κλάσεων, αλλά η συγκεκριμένη συμπεριφορά (υλοποίηση ορισμένων μεθόδων) διαφέρει. Παρέχει επανάχρηση κώδικα και ομοιομορφία στη δομή των κλάσεων.