Klasy abstrakcyjne a typy przecięcia

Założenie: Pokażemy, jak wykorzystać typy przecięcia w definicjach klas abstrakcyjnych w PHP, aby narzucić implementację wielu interfejsów jednocześnie.

Krok po kroku:

  1. Definicja interfejsów: Zdefiniujmy dwa interfejsy: Drawable i Movable.
  2. 
    interface Drawable {
      public function draw(): string;
    }
    
    interface Movable {
      public function move(int $x, int $y): void;
    }
    				

    Te interfejsy definiują metody, które muszą być zaimplementowane przez klasy, które je implementują.

  3. Klasa abstrakcyjna: Stwórzmy klasę abstrakcyjną Shape, która implementuje oba interfejsy.
  4. 
    abstract class Shape implements Drawable, Movable {
      abstract public function getArea(): float;
    
      public function move(int $x, int $y): void {
        // Implementacja domyślna dla przesuwania kształtu
        echo "Przesunięto kształt o ($x, $y)
    "; } }

    Klasa Shape implementuje metody z interfejsów Drawable i Movable. Metoda getArea() jest abstrakcyjna, co oznacza, że musi być zaimplementowana w klasach potomnych.

  5. Klasa potomna: Utwórzmy klasę Circle dziedziczącą po Shape.
  6. 
    class Circle extends Shape {
      private float $radius;
    
      public function __construct(float $radius) {
        $this->radius = $radius;
      }
    
      public function getArea(): float {
        return pi() * $this->radius * $this->radius;
      }
    
      public function draw(): string {
        return "Narysowano koło o promieniu " . $this->radius;
      }
    }
    				

    Klasa Circle implementuje metodę abstrakcyjną getArea() i metodę draw() z interfejsu Drawable.

  7. Użycie klasy: Utwórzmy obiekt klasy Circle i użyjmy jej metod.
  8. 
    $circle = new Circle(5);
    echo $circle->draw() . "
    "; echo "Pole koła: " . $circle->getArea() . "
    "; $circle->move(10, 20);

    Ten kod tworzy koło o promieniu 5, rysuje je, oblicza jego pole i przesuwa.

Ten przykład pokazuje, jak używać typów przecięcia w klasach abstrakcyjnych, aby narzucić implementację wielu interfejsów. To pozwala na tworzenie bardziej elastycznych i dobrze zorganizowanych struktur w kodzie. Zachęcamy do dalszego zgłębiania tematu programowania obiektowego w PHP!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *