PHP » Tutorial » Diseño Orientado a Objetos Unidad II

Ya vimos los conceptos fundamentales de los objetos (Unidad I), avanzaremos a lo que es la herencia y polimorfismo, el ejemplo que utilizaremos serán las figuras geométricas.

Herencia

La herencia se refiera a que una clase B (subclase) puede usar la estructura de una clase A (superclase), igual que en el mundo real las personas heredamos los rasgos físicos de los padres, y no solo los rasgos físicos sino por ejemplo los apellidos.

La herencia es útil para tener un mejor entendimiento de los procesos de un programa de forma jerarquica o para clasificar una serie de clases rehusando el código ya escrito.

Las clases que hereden obtendran todos los atributos y funciones de sus padres, y podran acceder a ellos si son public o protected, como explique en la Unidad I los atributos y funciones private solo se pueden acceder dentro de la misma clase que los usa.

Las clases que hereden pueden agregar a su estructura nuevos atributos y funciones sin afectar a la superclase.

Polimorfismo

El polimorfismo se refiere a funciones que se llaman igual, pero se comportan diferente, básicamente buscan solucionar el mismo problema de diferentes formas.

Primero crearemos la superclase:

Archivo: Figura.php

<?php

class Figura {//Inicio de la clase

    //Atributos
    private $color;
    private $nombre;

    //Funciones
    public function getColor(){
        return $this->color;
    }

    public function setColor($color){
        $this->color=$color;
    }

    public function getNombre(){
        return $this->nombre;
    }

    public function setNombre($nombre) {
        $this->nombre=$nombre;
    }

    public function area(){
        return 0;
    }

}//Fin de la clase

?>

Ahora creamos la primera herencia, para ello usaremos la palabra reservada extends:

Archivo: Triangulo.php

<?php

class Triangulo extends Figura {//Inicio de la clase

    //Atributos
    private $base;
    private $altura;

    //Funciones
    public function getBase(){
        return $this->base;
    }

    public function setBase($base){
        $this->base=$base;
    }

    public function getAltura(){
        return $this->altura;
    }

    public function setAltura($altura){
        $this->altura=$altura;
    }

    //Funcion Polimorfica
    public function area(){
        return ($this->base*$this->altura/2);
    }

}//Fin de la clase

?>

Analizando el código vemos que en la cabecera se escribe extends luego de darle nombre a la subclase  en este caso Triangulo, e inmediatamente después el nombre de la superclase.

El Triangulo ahora obtiene los atributos y funciones de Figura.

La función area() se sobrescribe y se le da la nueva forma.

Creando otra subclase:

Archivo: Rectangulo.php

<?php

class Rectangulo extends Figura {//Inicio de la clase

    //Atributos
    private $ladoA;
    private $ladoB;

    //Funciones
    public function getLadoA(){
        return $this->ladoA;
    }

    public function setLadoA($ladoA){
        $this->ladoA=$ladoA;
    }

    public function getLadoB(){
        return $this->ladoB;
    }

    public function setLadoB($ladoB){
        $this->ladoB=$ladoB;
    }

    //Funcion Polimorfica
    public function area(){
        return ($this->ladoA*$this->ladoB);
    }

}//Fin de la clase

?>

Analizando la función area() podemos ver que su comportamiento cambia para ambas clases, pero siguen siendo la misma función heredada.

//Triangulo
  public function area(){
        return ($this->base*$this->altura/2);
    }

//Rectangulo
public function area(){
        return ($this->ladoA*$this->ladoB);
    }

Para finalizar:

Archivo: index.php

<?php

include 'Figura.php';
include 'Triangulo.php';
include 'Rectangulo.php';

$triangulo = new Triangulo();
$triangulo->setNombre("Triangulo");
$triangulo->setAltura(2);
$triangulo->setBase(2);

echo 'Nombre: '.$triangulo->getNombre().', Area: '.$triangulo->area();

echo '<br/>';

$rectangulo = new Rectangulo();
$rectangulo->setNombre("Rectangulo");
$rectangulo->setLadoA(2);
$rectangulo->setLadoB(2);

echo 'Nombre: '.$rectangulo->getNombre().', Area: '.$rectangulo->area();

?>

La salida seria algo así:

Nombre: Triangulo, Area: 2
Nombre: Rectangulo, Area: 4

Recuerda hacer preguntas si tienes dudas en algo...

sauljp07

Publicado el 17 de Julio del 2010 por sauljp07

1242 visitas, 3 mensajes y 7 ediciones

Mensajes

Diego Escares Diego Escares el 17 de Julio del 2010: 0

Vamos bien parece. Te cuento que cuando editas tus artículos en la parte de abajo sale "más opciones", échale un ojo, ahi puedes enlazar mucho mejor tus publicaciones.

sauljp07 sauljp07 el 17 de Julio del 2010: 0

Te cuento que, me acabo de dar cuenta jajaja

sauljp07 sauljp07 el 17 de Julio del 2010: 0

Listo...

¡Amigo! te demorarás 10 segundos en crear tu cuenta.

Disfrutarás de todos los beneficios de DocumentoWeb.

Twitter Twitter Facebook Facebook Feed RSS Feed RSS

www.DocumentoWeb.com Licencia Creative Commons