Herencia Y Polimorfismo
-
Upload
cesar-huamani-ayala -
Category
Technology
-
view
4.340 -
download
2
Transcript of Herencia Y Polimorfismo
![Page 1: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/1.jpg)
POO: HERENCIA Y POLIMORFISMO
SEMANA 16
![Page 2: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/2.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
2
Qué es la Herencia en PHP y como implementarla
Como su nombre indica el concepto de herencia se aplica cuando creamos una clase, que va a heredar los métodos y atributos de una ya definida, entonces la clase que hemos creado es una subclase.
![Page 3: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/3.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
3
Para que una clase sea subclase de otra ya creada deberemos usar la palabra reservada extends en el siguiente código podremos ver como creamos una clase llamada SubClaseA que heredará los métodos y atributos de una clase definida con anterioridad llamada ClaseA.
![Page 4: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/4.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
4
Subclase de la clase A
class SubClaseA extends ClaseA {
var $atributo2;
function operacion2()
{
}
}
![Page 5: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/5.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
5
Tenemos la clase ClaseA que es definida de la siguiente forma: Class ClaseA { var $atributo1;function operacion1()
{ }
}
![Page 6: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/6.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
6
Si creamos un objeto de la clase SubClaseA este heredará todos los métodos de la clase ClaseA, por lo tanto el siguiente código es válido:
![Page 7: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/7.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
7
$x = new SubClaseA();
$x->operacion1();
$x->atributo1 = 100;
$x->operacion2();
$x->atributo2 = 200;
![Page 8: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/8.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
8
Como podemos observar aunque declaremos un objeto de la clase SubClaseA, al ser una clase extendida de ClaseA podemos hacer uso de todos los métodos y atributos definidos en ClaseA como si estuvieran contenidos en SubClaseA.
![Page 9: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/9.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
9
Debemos tener en cuenta que la herencia solo trabaja en una dirección, la subclase o clase hija hereda las características de su clase padre o superclase, pero la clase padre no posee las características de la hija. Para el caso anterior ClaseA no tendría atributo2 ni metodo2();
![Page 10: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/10.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
10
Como sobrescribir métodos y atributos
Como hemos visto anteriormente, una subclase declara atributos nuevos y operaciones sobre una superclase. Es posible y en muchos casos útil sobrescribir las mismas operaciones o atributos declarados en la superclase. Esto se hace para dar a un atributo un valor diferente en la subclase que el que tiene en la superclase o en el caso de las operaciones para cambiar la funcionalidad de estas.
![Page 11: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/11.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
11
class A {var $atributo = 'valor inicial‘;function operación() { echo 'Clase A:<br>';echo 'El valor de \$atributo es $this-> atributo<br>';} }
![Page 12: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/12.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
12
Queremos crear una subclase B y alterar el valor de atributo y la funcionalidad de operación de la clase A, entonces escribimos:
![Page 13: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/13.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
13
Class B extends A {var $atributo = 'valor cambiado';function operación() {echo 'Clase B:<br>';echo 'El valor de \$atributo ahora es $this->atributo<br>';}}
![Page 14: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/14.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
14
Como podemos observar hemos definido una variable y una operación en B con el mismo nombre que tenían en A.
![Page 15: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/15.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
15
Como se ha comentado anteriormente aunque declaremos B no afecta a la definición de A, y si creamos un objeto de la superclase A esté mantendrá sus valores originales. Solo sobrescribiremos los valores y funcionalidad de A cuando creemos un objeto de la clase B.
![Page 16: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/16.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
16
A diferencia de otros lenguajes OO, PHP no nos permitirá sobrescribir una función o atributo y poder llamar a los valores de la clase padre.
![Page 17: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/17.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
17
La herencia puede tener muchas capas de profundidad, por ejemplo podemos tener una clase C que es subclase de B y está última ser subclase de A, la subclase C heredará y sobrescribirá aquellos atributos y métodos de sus clases padres, en este caso A y B.
![Page 18: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/18.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
18
¿Soporta PHP la herencia múltiple?
Algunos lenguajes OO soportan herencia múltiple, esto significa que una subclase puede heredar de varias clases padres. PHP no permite esto y una subclase solo puede heredar de una clase padre, sin embargo en PHP no hay ningún tipo de restricción en cuanto a el número de subclases que pueden heredar de una misma clase padre o superclase.
![Page 19: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/19.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
19
Qué es el polimorfismo y como implementarlo
Cualquier lenguaje de programación orientado a objetos debe soportar el polimorfismo, esto significa que clases diferentes tendrán un comportamiento distinto para la misma operación. Esto lo veremos más claro con el siguiente ejemplo.
![Page 20: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/20.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
20
Supongamos que tenemos dos clases distintas coche y ciclomotor. Ambas tienen sus propios métodos de movimiento, éstos tienen diferentes comportamientos, pero su nombre es el mismo.
![Page 21: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/21.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
21
class coche {function avanza() {}function para() {}function girar_derecha() {}
}
![Page 22: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/22.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
22
… continuación
class ciclomotor {function avanza() {}function para() {}function girar_derecha() {}
}
![Page 23: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/23.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
23
Como podemos observar, ambas clases tienen los mismos métodos, supongamos ahora que tenemos otra clase que controla el movimiento de todos los vehículos, es aquí donde entra en juego el polimorfismo, que dependiendo del objeto que tratemos actuará de una forma u otra el método al que llamamos.
![Page 24: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/24.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
24
class movimiento {
function mover_adelante($obj) {
$obj->avanza();
}
}
![Page 25: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/25.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
25
Supongamos que queremos mover cualquier vehículo hacia adelante entonces haríamos:
![Page 26: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/26.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
26
$obj_coche = new coche();$obj_ciclomotor = new ciclomotor(); $obj_movimiento = new movimiento();//con esta sentencia el coche avanzaría hacia adelante.$obj_movimiento-> mover_adelante($obj_coche);//con esta sentencia el ciclomotor avanzaría hacia adelante.$obj_movimiento-> mover_adelante($obj_ciclomotor);
![Page 27: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/27.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
27
Como podemos ver el mismo método del objeto movimiento actúa de dos formas diferentes dependiendo del objeto que le pasamos como parámetro.
![Page 28: Herencia Y Polimorfismo](https://reader036.fdocuments.mx/reader036/viewer/2022062303/558c5405d8b42ada428b45ee/html5/thumbnails/28.jpg)
DO
CE
NT
E
CE
SA
R F
. H
UA
MA
NI
AY
ALA
28
FIN