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.
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.
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...
Postear en Twitter
Postear en Facebook
Feed RSS
Agregar a Favoritos
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 el 17 de Julio del 2010:
0
Te cuento que, me acabo de dar cuenta jajaja
sauljp07 el 17 de Julio del 2010:
0
Listo...
php, unidad, herencia, polimorfismo, subclase, superclase, clases, hereden, atributos, funciones, public, archivo, figura, extends, triangulo, area, rectangulo, this-, index
¡Amigo! te demorarás 10 segundos en crear tu cuenta.
Disfrutarás de todos los beneficios de DocumentoWeb.