Abstraccion de clases en PHP

0
44

Introducción

Una de las características más útiles de cualquier lenguaje orientado a objetos es la posibilidad de declarar clases que definen un comportamiento pero sin especificar como se realiza.
En los ejemplos utilizados hasta ahora se define una clase Vehículo, que sirve de base para las clases Coche, Moto, etc… Sin embargo, en el mundo real no se encuentran objetos de la clase Vehículo, sino que existen coches, motos, camiones… Al final todos son vehículos, pero todos son de un tipo más concreto (vehículo es un término abstracto que agrupa a una serie de sistemas que se utilizan para el transporte).
Por lo tanto sería bastante lógico declarar la clase Vehículo como abstracta, forzando así la necesidad de construir clases derivadas que representen elementos más concretos.Una clase abstracta de declara de la siguiente forma

abstract class Vehículo
{
  public $potencia;
  public $peso;
}

Nota: Esta clase al ser instanciada dara un error

Para que nos sirve?

Las clases abstractas nos sirven de base para la implementación de una clase mas especifica. Al heredar de una clase abstracta esta debe de implementar todos sus metodos, es decir que una clase abstracta nos sirve como plantilla para implementar una clase particular del mismo genero.

Clase Abstracta:

abstract class Vehículo
{
  public $potencia;
  public $peso;
  function __construct($potencia,$peso)
  {
    $this->potencia = $potencia;
    $this->peso = $peso;
    return true;
  }
  function relacionPesoPotencia()
  {
    if ($this->potencia>0)
    {
      return ($this->peso/$this->potencia);
    }
    return -1;
  }
  abstract function aceleracionAproximada();
}

Clase Moto que hereda de Vehículo

//// una Moto es un Vehículo
class Moto extends Vehículo
{
  function __construct($potencia,$peso)
  {
    $this->potencia = $potencia;
    $this->peso = $peso;
    return true;
  }
  function aceleracionAproximada()
  {
     $coeficienteTransmision = 3.0;
     $t = $this->peso * 771.73 / (2.0 * $this->potencia * 735);
     $t = $t * $coeficienteTransmision;
     return $t;
  }
}

Características de una Clase Abstracta

  • Las clases abstractas no se pueden instanciar.
  • Las clases que heredan de esta deben implementar todos los metodos abstractos.
  • Las clases abstractas pueden heredar de otras clases.
  • Los parametros de los metodos deben ser iguales, ya que sino sera tratado como otro metodo.
  • Si una clase tiene un metodo abstracto esta debe declararse también como clase abstracta.

Recursos