<p>Ya vimos los conceptos fundamentales de los objetos (<a href="Diseno-Orientado-a-Objetos-Unidad-I">Unidad I</a>), avanzaremos a lo que es la herencia y polimorfismo, el ejemplo que utilizaremos serán las figuras geométricas.</p> <h2>Herencia</h2> <p>La <em><strong>herencia</strong></em> se refiera a que una clase B (<strong><em>subclase</em></strong>) puede usar la estructura de una clase A (<em><strong>superclase</strong></em>), 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.</p> <p>La <em><strong>herencia</strong></em> 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.</p> <p>Las clases que <strong><em>hereden</em></strong> obtendran<strong><em> todos los atributos y funciones</em></strong> de sus padres, y podran acceder a ellos si son <em><strong>public</strong></em> o <strong><em>protected</em></strong>, como explique en la <a href="Diseno-Orientado-a-Objetos-Unidad-I">Unidad I</a> los atributos y funciones <strong><em>private</em></strong> solo se pueden acceder dentro de la misma clase que los usa.</p> <p>Las clases que <em><strong>hereden</strong></em> pueden agregar a su estructura nuevos atributos y funciones sin afectar a la <em><strong>superclase</strong></em>.</p> <h2>Polimorfismo</h2> <p>El <em><strong>polimorfismo</strong></em> se refiere a funciones que se llaman igual, pero se comportan diferente, <em>básicamente buscan solucionar el mismo problema de diferentes formas</em>.</p> <p>Primero crearemos la <em><strong>superclase</strong></em>:</p> <p><em><strong>Archivo: Figura.php</strong></em></p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />class Figura {//Inicio de la clase<br /><br /> //Atributos<br /> private $color;<br /> private $nombre;<br /><br /> //Funciones<br /> public function getColor(){<br /> return $this->color;<br /> }<br /><br /> public function setColor($color){<br /> $this->color=$color;<br /> }<br /><br /> public function getNombre(){<br /> return $this->nombre;<br /> }<br /><br /> public function setNombre($nombre) {<br /> $this->nombre=$nombre;<br /> }<br /><br /> public function area(){<br /> return 0;<br /> }<br /><br />}//Fin de la clase<br /><br />?></span></span></span></span></span></pre> <p>Ahora creamos la primera herencia, para ello usaremos la palabra reservada <em><strong>extends</strong></em>:</p> <p><em><strong>Archivo: Triangulo.php</strong></em></p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />class Triangulo extends Figura {//Inicio de la clase<br /><br /> //Atributos<br /> private $base;<br /> private $altura;<br /><br /> //Funciones<br /> public function getBase(){<br /> return $this->base;<br /> }<br /><br /> public function setBase($base){<br /> $this->base=$base;<br /> }<br /><br /> public function getAltura(){<br /> return $this->altura;<br /> }<br /><br /> public function setAltura($altura){<br /> $this->altura=$altura;<br /> }<br /><br /> //Funcion Polimorfica<br /> public function area(){<br /> return ($this->base*$this->altura/2);<br /> }<br /><br />}//Fin de la clase<br /><br />?></span></span></span></span></span></pre> <p>Analizando el código vemos que en la cabecera se escribe <em><strong>extends</strong></em> luego de darle nombre a la <em><strong>subclase</strong><strong> </strong></em> en este caso Triangulo, e inmediatamente después el nombre de la<em><strong> superclase</strong></em>.</p> <p>El <em>Triangulo</em> ahora obtiene los atributos y funciones de <em>Figura</em>.</p> <p>La función <em>area()</em> se sobrescribe y se le da la nueva forma.</p> <p>Creando otra <em><strong>subclase</strong></em>:</p> <p><em><strong>Archivo: Rectangulo.php</strong></em></p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />class Rectangulo extends Figura {//Inicio de la clase<br /><br /> //Atributos<br /> private $ladoA;<br /> private $ladoB;<br /><br /> //Funciones<br /> public function getLadoA(){<br /> return $this->ladoA;<br /> }<br /><br /> public function setLadoA($ladoA){<br /> $this->ladoA=$ladoA;<br /> }<br /><br /> public function getLadoB(){<br /> return $this->ladoB;<br /> }<br /><br /> public function setLadoB($ladoB){<br /> $this->ladoB=$ladoB;<br /> }<br /><br /> //Funcion Polimorfica<br /> public function area(){<br /> return ($this->ladoA*$this->ladoB);<br /> }<br /><br />}//Fin de la clase<br /><br />?></span></span></span></span></span></pre> <p>Analizando la función <strong>area()</strong> podemos ver que su comportamiento cambia para ambas clases, pero siguen siendo la misma función heredada.</p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5">//Triangulo<br /> public function area(){<br /> return ($this->base*$this->altura/2);<br /> }<br /><br />//Rectangulo<br /> public function area(){<br /> return ($this->ladoA*$this->ladoB);<br /> }</span></span></span></span></span></pre> <p>Para finalizar:</p> <p><em><strong>Archivo: index.php</strong></em></p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5"><?php<br /><br />include 'Figura.php';<br />include 'Triangulo.php';<br />include 'Rectangulo.php';<br /><br />$triangulo = new Triangulo();<br />$triangulo->setNombre("Triangulo");<br />$triangulo->setAltura(2);<br />$triangulo->setBase(2);<br /><br />echo 'Nombre: '.$triangulo->getNombre().', Area: '.$triangulo->area();<br /><br />echo '<br/>';<br /><br />$rectangulo = new Rectangulo();<br />$rectangulo->setNombre("Rectangulo");<br />$rectangulo->setLadoA(2);<br />$rectangulo->setLadoB(2);<br /><br />echo 'Nombre: '.$rectangulo->getNombre().', Area: '.$rectangulo->area();<br /><br />?></span></span></span></span></span></pre> <p>La salida seria algo así:</p> <pre class="codigo"><span class="c1"><span class="c2"><span class="c3"><span class="c4"><span class="c5">Nombre: Triangulo, Area: 2<br />Nombre: Rectangulo, Area: 4</span></span></span></span></span></pre> <p><span><span><span><span><span>Recuerda hacer preguntas si tienes dudas en algo...</span></span></span></span></span></p>
o salir
¡Amigo! te demorarás 10 segundos en crear tu cuenta.
Crear cuenta o acceder
Nick o e-mail Es el nombre visible de tu cuenta y te servirá para acceder a ella. Permitido espacios y cualquier caracter.
Contraseña Una clave única para acceder a tu cuenta.
Transcribe el código en la dirección indicada con el fin de evitar el SPAM.
Identificación Tu identificación es el nick o el e-mail de tu cuenta.
Contraseña La clave de tu cuenta. ¿No la recuerdas?
Recordar por diez días
Disfrutarás de todos los beneficios de DocumentoWeb.
Twitter Facebook Feed RSS
www.DocumentoWeb.com - Licencia Creative Commons