PHP Altruistas Ocio en Las Palmas
/

La Herencia en la Programación Orientada a Objetos (POO)

El estudio de este concepto en la Programación Orientada a Objetos es muy importante y, gracias a él seremos capaces reutilizar parte del código ya escrito en otra clase. Para que existe Herencia o Legado hay que tener dos clases: una madre y otra hija. Decir que una clase hija hereda de una clase madre, es decir que accede a todos los atributos y métodos públicos de la clase madre.

En el siguiente esquema puede observarse como las clases Perro y Ave son unos ejemplos de herencia de la clase Animal.

La Herencia Ocio Las Palmas Programacion Orientada a Objeto

A la clase madre se programa cómo normalmente se hace en PHP, ya visto en otros artículos, pero las clases hijas deben ser declaradas con la palabra reservada extends entre el nombre de la clase hija y la clase madre. Veamos las sintaxis.

Para llevar a cabo este ejemplo realizaremos los siguientes pasos:

  1. Creación de la clase madre, Animal, y archivaremos el código en el fichero Animal.class.php
  2. Creación de la clase hija, Ave, y su código será guardado en un nuevo fichero: Ave.class.php
  3. Creación de una nueva clase hija, Perro, y será guardado en Perro.class.php
  4. Implementaremos código para el uso de las clases anteriormente creadas. Fichero: uso.php

1) Animal.class.php


<?php
class Animal
   {
      //Atributos
      private $color;
      private $peso;
      //Declaración de la variable estática $contador
      private static $contador = 0;
      //Accesos
      public function get_color () {
         return $color;
      }
      public function set_color ($color) {
         $this->color = $color;
      }
      public function get_peso () {
         return $peso;
      }
      public function set_peso ($peso) {
         $this->peso = $peso;
      }
      //métodos
      public function comer () {
        echo "ñam ñam<br>";
      }
      public function moverse () {
         echo "desplazamiento 2 metros adelante<br>";
      }
      public function __construct ($color, $peso){
         echo "Llamada al constructor.<br>";
         $this->color = $color;
         $this->peso = $peso;
         self::$contador = self::$contador+1;
      }
      //método estático que devuelve el valor del contador
      public static function getContador() {
         return self::$contador;
      }
   }
?>

2) Ave.class.php


<?php 
class Ave extends Animal { 
    //atributos private $tipo; 
    //accesos get y set 
    public function getTipo () { 
        if ($this->tipo === true) { 
            return "vuela"; 
        }else if ($this->tipo === false) { 
            return "no vuela"; 
        }else { 
            return ""; 
        }
    }
    public function setTipo ($tipo) { 
        $this->tipo = $tipo; 
    } 
        //método 
    public function volar () { 
        echo "Vuelo<br>"; 
    } 
}
?>

3) Perro.class.php


<?php 
class Perro extends Animal { 
    private $raza; 
    //accesos get y set 
    public function getRaza () { 
        return $this->raza; 
    } 
    public function setRaza ($raza){ 
        $this->raza = $raza; 
    } 
     //método 
    public function ladrar (){ 
         echo "Guau Guau Guau<br>"; 
    } 
} 
?>

4) uso.php


<?php 
    //carga de clases 
    include ('class/Animal.class.php'); 
    include ('class/Ave.class.php'); 
    include ('class/Perro.class.php'); 
    //instanciar la clase Ave que llama al contructor de 
    //la clase Animal 
    $ave = new Ave ("verde", 1); 
    //instanciar la clase Perro que llama al constructor de 
    //la clase Animal 
    $perro = new Perro ("blanco", 4);
    //lee el peso con el acceso de la clase madre 
    echo "El peso del ave es: ".$ave->getPeso()." kg<br>"; 
    //lee el peso con el acceso de la clase madre 
    echo "El peso del Perro es: ".$perro->getPeso()." kg<br>"; 
    $ave->setTipo(true); 
    //Leer el tipo con el acceso de su propia clase 
    echo "El tipo de ave: ".$ave->getTipo ()." <br>"; 
    //llamada al método de la clase Perro 
    echo "¡Ladra perro! ";
    $perro->ladrar(); 
    //LLamada al método estático 
    echo "Número de animales que se han instanciado: ".Animal::getContador();
?>

Ejecutar ejemplo completo

Deja una respuesta