SlideShare una empresa de Scribd logo
1 de 11
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
1.Conceptos básicos: Clases,Objetos,Herencia, en Programación Orientado a Objeto
Unidad VI
Herencia
Objetivo de la Unidad:
Comprender e implementar el concepto de Herencia de la Programación Orientada a Objeto que le permitirá
la construcción de software reutilizable, escalable, de fácil mantenimiento y de mayor calidad.
Definicion
HERENCIA
El concepto de herencia nos permite crear una nueva clase que esté basada en otra clase ya existente. Esto
nos sirve cuando nos damos cuenta de que precisamos una nueva clase que posea métodos o propiedades
muy semejantes a los de otra clase ya definida. En vez de declarar dos veces lo mismo, simplemente
“extendemos” la clase primera, como si creáramos un duplicado de ésta, y tendremos una clase “hija”. Luego a
ese duplicado le podemos agregar algunas otras propiedades y/o métodos propios de esa clase hija y no de la
original, es decir, especializamos un poco más sus funcionalidades. La nueva clase va a poder acceder a sus
propios métodos y propiedades, pero también a los de su clase “padre” que hayan sido declarados como
protected o como public (pero no podrá acceder a los que hayan sido declarados como private).
Se denomina herencia a la capacidad de una clase de emplear todos los métodos y propiedades de otra clase,
lo cual se consigue en PHP mediante la palabra reservada extends.
Principales ventajas
1. Si se aplica bien el concepto de herencia conseguiremos una reutilización eficiente del código de la clase
base. Ya que estemos utilizando el mismo código en las dos clases, padre e hijo, pero solo lo habremos escrito
una vez.
2. Una de las principales ventajas de la herencia es la propagación de los cambios realizados en la clase base.
Cualquier cambio que se realice en las clases base será accesible inmediatamente en las clases heredadas.
Siempre cuando la visibilidad introducida lo permita. Sin embargo hay que tener cuidado con esta característica.
Ya que cambios realizados en las clases base pueden causar problemas en las clases heredadas que han sido
creadas por otras personas. Por lo que hay que asegurarse que los cambios son compatibles con las clases
heredadas. Por ejemplo, podríamos añadir nuevos atributos y métodos y no modificar los existentes.
Introducción
LA Herencia, El polimorfismo y las interfaces son mecanismos que se usan comúnmente en la programación orientada a
objeto. Por medio de la herencia se pueden definir nuevas clases a partir de las declaraciones de clases existentes, Las
clases pueden tener los mismos métodos (con el mismo nombre), pero cada una los pueden implementar de forma
diferente.
Puede suceder que existan objetos que no pertenezcan a la misma jerarquía de herencia, pero que deban realizar
acciones comunes.Esta guía permitirá estudiar estos conceptos.
Objetivo.
Entender el Mecanismo de abstracción de la Herencia y sus ventajas.Implementar Jerarquías de Herencia en PHP
Requerimientos.
Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre ( Canaima/Ubuntu),Apache,
PHP, Editor de Texto.
Componentes.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
3. La herencia es transitiva. Esto significa que una clase puede heredar características de la clase base que se
encuentra niveles más arriba en la jerarquía de herencia. Por ejemplo si la clase Mercedes es una subclase de
la clase Coche, y la clase Coche es una subclase de la clase Vehículo, entonces el Mercedes heredará
tributos tanto de Coche como de Vehículo.
Herencia y constructores
Cuando defines un constructor propio en la clase hija es necesario pasar los argumentos al constructor de la
clase base.
Por lo tanto, lo primero, para poder pasar dichos argumentos, es encontrar la manera de acceder al método la
clase base. Y eso se hace usando la siguiente sintaxis:
parent::__construct();
De esta forma invocaremos al constructor de la clase base de la cual que hereda la clase actual.
Y ¿para que queremos definir un constructor (en la clase hija), y por lo tanto, invocar al constructor de la clase
base? Pues muy sencillo, no siempre queremos que algún método de la clase hija se comporte exactamente
igual que de la clase base.
Seguramente querremos utilizar la funcionalidad del constructor padre y extenderla. Pero manteniendo la
funcionalidad que aportaba el método heredado.
Sobrescritura de Métodos
La sobrescritura es muy común en mecaniso de herencia, puesto que los métodos que fueron creados para
una clase base no necesariamente de deban implementar del mismo modo para sus subclases. Sobrescribir
un método significa redefinirlo, es decir otorgarle otro comportamiento distinto al definirl o en la clase padre. Al
mecanismo de añadir funcionalidad a un método heredado, y por lo tanto llamado de la misma forma en ambas
clase, se llama sobrescritura. Ya que estamos sobrescribiendo el funcionamiento del mismo. Y este mecanismo
no solo se puede utilizar con los constructores sino que en cualquier método heredado de una clase base.
Lo más conveniente es sobrescribir métodos para completar el algoritmo del método de la clase base. Y no es
recomendable sobreescribir un método y cambiar completamente su comportamiento. Ya que para eso lo
mejor es crear un nuevo método en la clase hija.
Y al igual que con el constructor del apartado anterior, para invocar al método de la clase padre utilizaremos la
sintaxis: parent::metodo($argumentos).
Ejemplo:
<?php
class Estudiante{
private $nombre;
private $fechaNac;
private $sexo;
protected $idEstudiante;
private $inscrito;
public function inscribirse(){
$this->inscrito= true;}
}
class EstPregrado extends Estudiante{
public function inscribirse(){
parent:: inscribirse();
echo “Se inscribió el estudiantes de Pregrado”;}
}
class EstPostgrado extends Estudiante{
private $anioGraduacion;
private $carreraPregrado;
private $idEstudiante;
public function inscribirse(){
echo “Año de Graduación: ”, $this-> anioGraduacion;
echo “Carrera: “,$this-> carreraPregrado;
parent:: inscribirse();
}
}
?>
La palabra clave parent, hace
referencia a la clase de la cual se
esta heredando.
Al usar parent::metodo(), se llama
a la función que se sobrescribio
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Visibilidad y Herencia
- Los atributos y métodos declarados como públicos podrán utilizarse desde cualquier contexto: desde la
misma clase, desde una clase heredada o desde el exterior.
- Los atributos y métodos declarados como privados no podrán ser accedidos desde otro sitio que no sea el
interior de la clase en donde están declarados. Por lo tanto no se podrán sobrescribir características privadas
en las clases heredadas.
Ya que las clases hijas no tendrán acceso a esas características privadas.
- Los atributos y métodos declarados como protegidos solo podrán ser accedidos desde la clase que los
declara o desde una clase heredera. Pero nunca desde el exterior de una clase.
Gracias a la visibilidad solo se expondrán las características que sean requeridas por un cliente (que podría ser
otra clase). Y evitar que se puedan modificar libremente atributos de un objeto. Ya que solo se podrán
modificar los atributos que la definición de la clase permita y mediante los métodos requeridos para ello. Por lo
tanto podríamos completar un poco las clases de los ejemplos anteriores para que cualquier modificación de un
atributo se haga mediante métodos de acceso.
Representación UML
La representación en UML es una “flecha continua” que va desde la clase “hija” hasta la clase “padre”, similar
a la relación de “asociación”, pero con la diferencia que termina con una punta en forma de triángulo.
Nota: entender la diferencia de las flechas: si es punteada (“no continua”) la relación es más débil que una
“flecha continua”. Por lo tanto la Herencia es una relación igual de fuerte que la asociación, pero más fuerte
que una relación como la “dependencia” (“línea punteada”).
Un diagrama genérico sería:
Ejemplo de traducción a código
class Padre
{
public function saluda() {
echo "Hola Mundo";
}
}
Y luego la extendemos a otra:
class Hija extends Padre{
}
Podríamos usar todos los métodos y propiedades de la clase padre, pues han sido «heredados» por la hija.
Así, esto...
$mi_hija = new Hija();
$mi_hija->saluda();
...devolvería por pantalla "Hola Mundo", aunque la clase hija carezca de métodos y propiedades, pues los ha
recibido de la clase padre.
A continuación vamos a ver un ejemplo sencillo de herencia en PHP
1. Primero crearemos la clase base.
Producto.php
class Producto {
protected $id;
private $titulo;
private $precio;
La herencia es siempre
transitiva: una clase puede
heredar características de
superclases que se
encuentran muchos niveles
más arriba en la jerarquía
de herencia.
Ejemplo: si la clase Perro
es una subclase de la clase
Mamífero, y la clase
Mamífero es una subclase de
la clase Animal, entonces el
Perro heredará atributos
tanto de Mamífero como de
Animal.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
private $nombreAutor;
private $apellidosAutor;
function __construct($id, $titulo, $precio,$nombreAutor,$apellidosAutor){
$this->id = $id;
$this->titulo= $titulo;
$this->nombreAutor = $nombreAutor;
$this->apellidosAutor = $apellidosAutor;
$this->precio = $precio;
}
public function getAutor() {
return $this->nombreAutor . " ". $this->apellidosAutor;}
public function getTitulo(){
return $this->precio;
}
public function getPrecio(){
return $this->precio;
}
}
2. Clase que heredará de la clase base.
<?php require_once 'Producto.php';
class Libro extends Producto {
public function getResumen() {
$resumen = "Titulo: " . $this->getTitulo() . ", Precio: " . $this->getPrecio();
$resumen .= ", Autor: " .$this->getAutor() . ", Núm. páginas: " .$this-
>getNumPaginas();
return $resumen;
}
}
Como no hemos definido ninguno constructor específico en esta clase, se heredará el de la clase base. Por lo
tanto cuando creamos un objeto instanciado de la clase Libro deberemos de añadir los parámetros que
necesitaba el constructor de la clase base.
$libro1 = new Libro(1,"título",20,"Autor", "Apellido1 Apellido2");
echo $libro1->getResumen();
class Operacion{
protected $numero1;
protected $numero2;
public function __construct($numero1, $numero2) {
$this->numero1 = $numero1;
$this->numero2 = $numero2;
}
public function operacion() {
return $this->numero1 + $this->numero2;
}
}
Así, por ejemplo, esto devolvería 12:
$mi_suma = new operacion(8, 4);
echo $mi_suma->operacion();
Pero reescribiendo la clase, podemos conseguir que reste en vez de sumar. Fijaos en que no es necesario
declarar el método constructor en la clase hija, pues lo hereda de la clase padre.
No hacer abuso de la visibilidad
protegida, solo en casos
excepcionales donde se justifique.
En los casos habituales todos
los atributos deben ser
privados y en casos excepcionales
a través de algunos métodos
getter/setter.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
class Resta extends Operacion{
public function operacion() {
return $this->numero1 - $this->numero2;} // fin del método operación higiene
}// fin dela clase
Y este objeto ahora daría 4:
$mi_resta = new resta(8, 4);
echo $mi_resta->operacion();
Tipo de Herencia
Herencia Simple: Hace referencia que una clase solo puede heredar comportamiento y características de una
única superclase (clase base/padre)
Herencia Múltiple: Hace referencia en que una clase puede heredar comportamiento y características de
mas de una superclase
En PHP no es posible extender de
múltiples clases, PHP no soporta
la Herencia Múltiple
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Sobrescritura De Método
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Clases y Métodos Finales
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Actividad a Realizar
Realizar la siguiente practica en tu computador
Escribir el siguiente código de una clase llamada vehiculo cuyo archivo se llama vehiculo.php
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Ahora implementemos herencias a través de dos clase hijas quienes heredan de la clase padre vehiculo.
Código de la clase Auto que hereda de la clase Vehiculo.Archivo auto.php
Código de la clase Moto que hereda de la clase Vehiculo.Archivo moto.php
Como vemos ambas clases tienen menos código.Ahora vamos a lo importante que permite la herencia:
La herencia permite que clase como Auto y Moto hereden de una clase madre,en nuestro caso la clase Vehiculo.
¿Y que es lo que heredan?
Las clases hijs heredan de las clase madres todos las propiedades y métodos , lo que permite ahorrar líneas
de códigos innecesarias .
Vamos a repasar los puntos:
1.- dentro de la clases hijas deben incluirse con require_once el archivo .php, donde se encuentra la clase
madre.
2.- cuando definimos la clase hija debemos utilizar la palabra reservada extends mas el nombre de la clase
madre:
class ClaseHija extends ClasePadre.
Por ejemplo en la clase Vehiculo tenemos un constructor como este:
public function __construct($nro_puertas,$nro_ruedas,$marca){
$this->cantidad_puertas=$nro_puertas;
$this->cantidad_ruedas=$nro_ruedas;
$this->marca=$marca;
}
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Pero en la clase Moto lo que hacemos es sobreescribr el metodo de la clase madre:
public function __construct($nro_puertas,$nro_ruedas,$marca){
parent::__construct(0,$nro_ruedas,$marca);
toma el valor 0 en la propiedad , ya que una moto no tiene puertas.
Ademas para llamar a métodos de una clase hija a una clase madre no lo hacemos con $thismetodo(). Si no co
parent::metodo. En el caso de las propiedades se llaman con $this propiedad.
Y por ultimo fíjate que en la case madre no usamos private para las propiedades sino que usamos la palabra reservada
proteted. (consultar modificadores de accesos).
Por ultimo les dejo el código de construir los objetos.
Creando el Objeto auto. Archivo index.php
Creando el objeto Moto
Código completo
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Te invito a pasar la práctica a Modelo Vista Controlador
Referencias Bibliográficas
Un sitio clave para quienes programamos en PHP orientado a objetos es PHPClasses:
http://www.phpclasses.org

Más contenido relacionado

La actualidad más candente

Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
Irving Trigo
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
chutas666
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prev
jtk1
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
innovalabcun
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1
Ezer Ayala Mutul
 

La actualidad más candente (18)

Introduccion mvc
Introduccion mvcIntroduccion mvc
Introduccion mvc
 
Conociendo el Patron Modelo Vista Controlador
Conociendo el Patron   Modelo Vista ControladorConociendo el Patron   Modelo Vista Controlador
Conociendo el Patron Modelo Vista Controlador
 
Guia programacionwebbasicophp
Guia programacionwebbasicophpGuia programacionwebbasicophp
Guia programacionwebbasicophp
 
Guía Teórica unidad III, Interfaz Gráficas de Usuarios
Guía Teórica unidad III, Interfaz Gráficas de UsuariosGuía Teórica unidad III, Interfaz Gráficas de Usuarios
Guía Teórica unidad III, Interfaz Gráficas de Usuarios
 
Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prev
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
 
Fondo1 (2)
Fondo1 (2)Fondo1 (2)
Fondo1 (2)
 
Diapositivas de la poo
Diapositivas de la pooDiapositivas de la poo
Diapositivas de la poo
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1
 
Programación Orientada a Objetos (POO) y UML
Programación Orientada a Objetos (POO) y UMLProgramación Orientada a Objetos (POO) y UML
Programación Orientada a Objetos (POO) y UML
 
Tutorial C++
Tutorial C++Tutorial C++
Tutorial C++
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 

Similar a Guía Herencia PO_O

_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptx_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptx
FabianAndresNuezPinz
 
Herencia en java
Herencia en javaHerencia en java
Herencia en java
jbersosa
 

Similar a Guía Herencia PO_O (20)

Clase y Herencia en VB
Clase y Herencia en VBClase y Herencia en VB
Clase y Herencia en VB
 
METODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptxMETODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptx
 
Presentacion de clases en c#
Presentacion de clases en c#Presentacion de clases en c#
Presentacion de clases en c#
 
Herencia en C++
Herencia en C++Herencia en C++
Herencia en C++
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismo
 
Herencia
HerenciaHerencia
Herencia
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos
 
Definiciones taller 8 agost
Definiciones taller 8 agostDefiniciones taller 8 agost
Definiciones taller 8 agost
 
Act10byme
Act10bymeAct10byme
Act10byme
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Herencia
HerenciaHerencia
Herencia
 
_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptx_Herencia_Polimorfismo_Polimorfismo.pptx
_Herencia_Polimorfismo_Polimorfismo.pptx
 
Herencia poo
Herencia pooHerencia poo
Herencia poo
 
Herencia en java
Herencia en javaHerencia en java
Herencia en java
 
U8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfU8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdf
 
JAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIAJAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIA
 
Unidad_01_04.pdf
Unidad_01_04.pdfUnidad_01_04.pdf
Unidad_01_04.pdf
 
Herencia informatica
Herencia informaticaHerencia informatica
Herencia informatica
 
Tarea 5
Tarea 5Tarea 5
Tarea 5
 
Php orientado a objetos, Ronald Nina
Php orientado a objetos, Ronald NinaPhp orientado a objetos, Ronald Nina
Php orientado a objetos, Ronald Nina
 

Más de lissette_torrealba

Más de lissette_torrealba (20)

Guia reportes
Guia reportesGuia reportes
Guia reportes
 
Guiajquery
GuiajqueryGuiajquery
Guiajquery
 
Plan de evaluación proyecto i 2 teoría
Plan de evaluación proyecto i 2 teoríaPlan de evaluación proyecto i 2 teoría
Plan de evaluación proyecto i 2 teoría
 
Plan de evaluación proyecto i 2 metodología
Plan de evaluación proyecto i 2 metodologíaPlan de evaluación proyecto i 2 metodología
Plan de evaluación proyecto i 2 metodología
 
Plan de evaluacion proyecto i 2 práctica
Plan de evaluacion proyecto i 2 prácticaPlan de evaluacion proyecto i 2 práctica
Plan de evaluacion proyecto i 2 práctica
 
Guiajsvalidacion
GuiajsvalidacionGuiajsvalidacion
Guiajsvalidacion
 
Guiajs2
Guiajs2Guiajs2
Guiajs2
 
Rubrica 2021 electiva 2
Rubrica 2021 electiva 2Rubrica 2021 electiva 2
Rubrica 2021 electiva 2
 
Mapa Tecnopedagogia
Mapa TecnopedagogiaMapa Tecnopedagogia
Mapa Tecnopedagogia
 
Matriz DOFA lissette
Matriz DOFA lissetteMatriz DOFA lissette
Matriz DOFA lissette
 
Planevaluacionproyectoivpractica
PlanevaluacionproyectoivpracticaPlanevaluacionproyectoivpractica
Planevaluacionproyectoivpractica
 
Rubrica bd 2021
Rubrica  bd  2021Rubrica  bd  2021
Rubrica bd 2021
 
Proyecto formativo iv metodologia
Proyecto formativo iv metodologiaProyecto formativo iv metodologia
Proyecto formativo iv metodologia
 
Plan evaluacion teoria
Plan evaluacion teoriaPlan evaluacion teoria
Plan evaluacion teoria
 
Plan de Evaluacion
Plan de EvaluacionPlan de Evaluacion
Plan de Evaluacion
 
Ejemplos de interfaz grafica
Ejemplos de  interfaz grafica Ejemplos de  interfaz grafica
Ejemplos de interfaz grafica
 
Rubrica bd 2021
Rubrica bd 2021 Rubrica bd 2021
Rubrica bd 2021
 
Rubrica Programación II 2021
Rubrica Programación II 2021 Rubrica Programación II 2021
Rubrica Programación II 2021
 
Rup
RupRup
Rup
 
Documentosistema
DocumentosistemaDocumentosistema
Documentosistema
 

Último

2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
candy torres
 
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdfLas Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
Demetrio Ccesa Rayme
 
Apunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdfApunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdf
Gonella
 
COMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIA
COMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIACOMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIA
COMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIA
Wilian24
 
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptx
Lineamientos de la Escuela de la Confianza  SJA  Ccesa.pptxLineamientos de la Escuela de la Confianza  SJA  Ccesa.pptx
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptx
Demetrio Ccesa Rayme
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
amelia poma
 

Último (20)

EFEMERIDES DEL MES DE MAYO PERIODICO MURAL.pdf
EFEMERIDES DEL MES DE MAYO PERIODICO MURAL.pdfEFEMERIDES DEL MES DE MAYO PERIODICO MURAL.pdf
EFEMERIDES DEL MES DE MAYO PERIODICO MURAL.pdf
 
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptxAEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
 
Diapositivas unidad de trabajo 7 sobre Coloración temporal y semipermanente
Diapositivas unidad de trabajo 7 sobre Coloración temporal y semipermanenteDiapositivas unidad de trabajo 7 sobre Coloración temporal y semipermanente
Diapositivas unidad de trabajo 7 sobre Coloración temporal y semipermanente
 
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
2° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
10-08 Avances tecnológicos del siglo XXI.pdf
10-08 Avances tecnológicos del siglo XXI.pdf10-08 Avances tecnológicos del siglo XXI.pdf
10-08 Avances tecnológicos del siglo XXI.pdf
 
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdfLas Preguntas Educativas entran a las Aulas CIAESA  Ccesa007.pdf
Las Preguntas Educativas entran a las Aulas CIAESA Ccesa007.pdf
 
animalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdfanimalesdelaproincia de beunos aires.pdf
animalesdelaproincia de beunos aires.pdf
 
Power Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptxPower Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptx
 
Presentación de la propuesta de clase.pdf
Presentación de la propuesta de clase.pdfPresentación de la propuesta de clase.pdf
Presentación de la propuesta de clase.pdf
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración Ambiental
 
Apunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdfApunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdf
 
FICHA CUENTO BUSCANDO UNA MAMÁ 2024 MAESTRA JANET.pdf
FICHA CUENTO BUSCANDO UNA MAMÁ  2024 MAESTRA JANET.pdfFICHA CUENTO BUSCANDO UNA MAMÁ  2024 MAESTRA JANET.pdf
FICHA CUENTO BUSCANDO UNA MAMÁ 2024 MAESTRA JANET.pdf
 
COMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIA
COMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIACOMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIA
COMPENDIO ECE 5 GRADO MATEMÁTICAS DE PRIMARIA
 
REGLAMENTO FINAL DE EVALUACIÓN 2024 pdf.pdf
REGLAMENTO  FINAL DE EVALUACIÓN 2024 pdf.pdfREGLAMENTO  FINAL DE EVALUACIÓN 2024 pdf.pdf
REGLAMENTO FINAL DE EVALUACIÓN 2024 pdf.pdf
 
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptx
Lineamientos de la Escuela de la Confianza  SJA  Ccesa.pptxLineamientos de la Escuela de la Confianza  SJA  Ccesa.pptx
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptx
 
Novena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan EudesNovena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan Eudes
 
sesion de aprendizaje 1 SEC. 13- 17 MAYO 2024 comunicación.pdf
sesion de aprendizaje 1 SEC. 13- 17  MAYO  2024 comunicación.pdfsesion de aprendizaje 1 SEC. 13- 17  MAYO  2024 comunicación.pdf
sesion de aprendizaje 1 SEC. 13- 17 MAYO 2024 comunicación.pdf
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
 
UNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docx
UNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docxUNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docx
UNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docx
 
TÉCNICAS OBSERVACIONALES Y TEXTUALES.pdf
TÉCNICAS OBSERVACIONALES Y TEXTUALES.pdfTÉCNICAS OBSERVACIONALES Y TEXTUALES.pdf
TÉCNICAS OBSERVACIONALES Y TEXTUALES.pdf
 

Guía Herencia PO_O

  • 1. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba 1.Conceptos básicos: Clases,Objetos,Herencia, en Programación Orientado a Objeto Unidad VI Herencia Objetivo de la Unidad: Comprender e implementar el concepto de Herencia de la Programación Orientada a Objeto que le permitirá la construcción de software reutilizable, escalable, de fácil mantenimiento y de mayor calidad. Definicion HERENCIA El concepto de herencia nos permite crear una nueva clase que esté basada en otra clase ya existente. Esto nos sirve cuando nos damos cuenta de que precisamos una nueva clase que posea métodos o propiedades muy semejantes a los de otra clase ya definida. En vez de declarar dos veces lo mismo, simplemente “extendemos” la clase primera, como si creáramos un duplicado de ésta, y tendremos una clase “hija”. Luego a ese duplicado le podemos agregar algunas otras propiedades y/o métodos propios de esa clase hija y no de la original, es decir, especializamos un poco más sus funcionalidades. La nueva clase va a poder acceder a sus propios métodos y propiedades, pero también a los de su clase “padre” que hayan sido declarados como protected o como public (pero no podrá acceder a los que hayan sido declarados como private). Se denomina herencia a la capacidad de una clase de emplear todos los métodos y propiedades de otra clase, lo cual se consigue en PHP mediante la palabra reservada extends. Principales ventajas 1. Si se aplica bien el concepto de herencia conseguiremos una reutilización eficiente del código de la clase base. Ya que estemos utilizando el mismo código en las dos clases, padre e hijo, pero solo lo habremos escrito una vez. 2. Una de las principales ventajas de la herencia es la propagación de los cambios realizados en la clase base. Cualquier cambio que se realice en las clases base será accesible inmediatamente en las clases heredadas. Siempre cuando la visibilidad introducida lo permita. Sin embargo hay que tener cuidado con esta característica. Ya que cambios realizados en las clases base pueden causar problemas en las clases heredadas que han sido creadas por otras personas. Por lo que hay que asegurarse que los cambios son compatibles con las clases heredadas. Por ejemplo, podríamos añadir nuevos atributos y métodos y no modificar los existentes. Introducción LA Herencia, El polimorfismo y las interfaces son mecanismos que se usan comúnmente en la programación orientada a objeto. Por medio de la herencia se pueden definir nuevas clases a partir de las declaraciones de clases existentes, Las clases pueden tener los mismos métodos (con el mismo nombre), pero cada una los pueden implementar de forma diferente. Puede suceder que existan objetos que no pertenezcan a la misma jerarquía de herencia, pero que deban realizar acciones comunes.Esta guía permitirá estudiar estos conceptos. Objetivo. Entender el Mecanismo de abstracción de la Herencia y sus ventajas.Implementar Jerarquías de Herencia en PHP Requerimientos. Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre ( Canaima/Ubuntu),Apache, PHP, Editor de Texto. Componentes.
  • 2. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba 3. La herencia es transitiva. Esto significa que una clase puede heredar características de la clase base que se encuentra niveles más arriba en la jerarquía de herencia. Por ejemplo si la clase Mercedes es una subclase de la clase Coche, y la clase Coche es una subclase de la clase Vehículo, entonces el Mercedes heredará tributos tanto de Coche como de Vehículo. Herencia y constructores Cuando defines un constructor propio en la clase hija es necesario pasar los argumentos al constructor de la clase base. Por lo tanto, lo primero, para poder pasar dichos argumentos, es encontrar la manera de acceder al método la clase base. Y eso se hace usando la siguiente sintaxis: parent::__construct(); De esta forma invocaremos al constructor de la clase base de la cual que hereda la clase actual. Y ¿para que queremos definir un constructor (en la clase hija), y por lo tanto, invocar al constructor de la clase base? Pues muy sencillo, no siempre queremos que algún método de la clase hija se comporte exactamente igual que de la clase base. Seguramente querremos utilizar la funcionalidad del constructor padre y extenderla. Pero manteniendo la funcionalidad que aportaba el método heredado. Sobrescritura de Métodos La sobrescritura es muy común en mecaniso de herencia, puesto que los métodos que fueron creados para una clase base no necesariamente de deban implementar del mismo modo para sus subclases. Sobrescribir un método significa redefinirlo, es decir otorgarle otro comportamiento distinto al definirl o en la clase padre. Al mecanismo de añadir funcionalidad a un método heredado, y por lo tanto llamado de la misma forma en ambas clase, se llama sobrescritura. Ya que estamos sobrescribiendo el funcionamiento del mismo. Y este mecanismo no solo se puede utilizar con los constructores sino que en cualquier método heredado de una clase base. Lo más conveniente es sobrescribir métodos para completar el algoritmo del método de la clase base. Y no es recomendable sobreescribir un método y cambiar completamente su comportamiento. Ya que para eso lo mejor es crear un nuevo método en la clase hija. Y al igual que con el constructor del apartado anterior, para invocar al método de la clase padre utilizaremos la sintaxis: parent::metodo($argumentos). Ejemplo: <?php class Estudiante{ private $nombre; private $fechaNac; private $sexo; protected $idEstudiante; private $inscrito; public function inscribirse(){ $this->inscrito= true;} } class EstPregrado extends Estudiante{ public function inscribirse(){ parent:: inscribirse(); echo “Se inscribió el estudiantes de Pregrado”;} } class EstPostgrado extends Estudiante{ private $anioGraduacion; private $carreraPregrado; private $idEstudiante; public function inscribirse(){ echo “Año de Graduación: ”, $this-> anioGraduacion; echo “Carrera: “,$this-> carreraPregrado; parent:: inscribirse(); } } ?> La palabra clave parent, hace referencia a la clase de la cual se esta heredando. Al usar parent::metodo(), se llama a la función que se sobrescribio
  • 3. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Visibilidad y Herencia - Los atributos y métodos declarados como públicos podrán utilizarse desde cualquier contexto: desde la misma clase, desde una clase heredada o desde el exterior. - Los atributos y métodos declarados como privados no podrán ser accedidos desde otro sitio que no sea el interior de la clase en donde están declarados. Por lo tanto no se podrán sobrescribir características privadas en las clases heredadas. Ya que las clases hijas no tendrán acceso a esas características privadas. - Los atributos y métodos declarados como protegidos solo podrán ser accedidos desde la clase que los declara o desde una clase heredera. Pero nunca desde el exterior de una clase. Gracias a la visibilidad solo se expondrán las características que sean requeridas por un cliente (que podría ser otra clase). Y evitar que se puedan modificar libremente atributos de un objeto. Ya que solo se podrán modificar los atributos que la definición de la clase permita y mediante los métodos requeridos para ello. Por lo tanto podríamos completar un poco las clases de los ejemplos anteriores para que cualquier modificación de un atributo se haga mediante métodos de acceso. Representación UML La representación en UML es una “flecha continua” que va desde la clase “hija” hasta la clase “padre”, similar a la relación de “asociación”, pero con la diferencia que termina con una punta en forma de triángulo. Nota: entender la diferencia de las flechas: si es punteada (“no continua”) la relación es más débil que una “flecha continua”. Por lo tanto la Herencia es una relación igual de fuerte que la asociación, pero más fuerte que una relación como la “dependencia” (“línea punteada”). Un diagrama genérico sería: Ejemplo de traducción a código class Padre { public function saluda() { echo "Hola Mundo"; } } Y luego la extendemos a otra: class Hija extends Padre{ } Podríamos usar todos los métodos y propiedades de la clase padre, pues han sido «heredados» por la hija. Así, esto... $mi_hija = new Hija(); $mi_hija->saluda(); ...devolvería por pantalla "Hola Mundo", aunque la clase hija carezca de métodos y propiedades, pues los ha recibido de la clase padre. A continuación vamos a ver un ejemplo sencillo de herencia en PHP 1. Primero crearemos la clase base. Producto.php class Producto { protected $id; private $titulo; private $precio; La herencia es siempre transitiva: una clase puede heredar características de superclases que se encuentran muchos niveles más arriba en la jerarquía de herencia. Ejemplo: si la clase Perro es una subclase de la clase Mamífero, y la clase Mamífero es una subclase de la clase Animal, entonces el Perro heredará atributos tanto de Mamífero como de Animal.
  • 4. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba private $nombreAutor; private $apellidosAutor; function __construct($id, $titulo, $precio,$nombreAutor,$apellidosAutor){ $this->id = $id; $this->titulo= $titulo; $this->nombreAutor = $nombreAutor; $this->apellidosAutor = $apellidosAutor; $this->precio = $precio; } public function getAutor() { return $this->nombreAutor . " ". $this->apellidosAutor;} public function getTitulo(){ return $this->precio; } public function getPrecio(){ return $this->precio; } } 2. Clase que heredará de la clase base. <?php require_once 'Producto.php'; class Libro extends Producto { public function getResumen() { $resumen = "Titulo: " . $this->getTitulo() . ", Precio: " . $this->getPrecio(); $resumen .= ", Autor: " .$this->getAutor() . ", Núm. páginas: " .$this- >getNumPaginas(); return $resumen; } } Como no hemos definido ninguno constructor específico en esta clase, se heredará el de la clase base. Por lo tanto cuando creamos un objeto instanciado de la clase Libro deberemos de añadir los parámetros que necesitaba el constructor de la clase base. $libro1 = new Libro(1,"título",20,"Autor", "Apellido1 Apellido2"); echo $libro1->getResumen(); class Operacion{ protected $numero1; protected $numero2; public function __construct($numero1, $numero2) { $this->numero1 = $numero1; $this->numero2 = $numero2; } public function operacion() { return $this->numero1 + $this->numero2; } } Así, por ejemplo, esto devolvería 12: $mi_suma = new operacion(8, 4); echo $mi_suma->operacion(); Pero reescribiendo la clase, podemos conseguir que reste en vez de sumar. Fijaos en que no es necesario declarar el método constructor en la clase hija, pues lo hereda de la clase padre. No hacer abuso de la visibilidad protegida, solo en casos excepcionales donde se justifique. En los casos habituales todos los atributos deben ser privados y en casos excepcionales a través de algunos métodos getter/setter.
  • 5. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba class Resta extends Operacion{ public function operacion() { return $this->numero1 - $this->numero2;} // fin del método operación higiene }// fin dela clase Y este objeto ahora daría 4: $mi_resta = new resta(8, 4); echo $mi_resta->operacion(); Tipo de Herencia Herencia Simple: Hace referencia que una clase solo puede heredar comportamiento y características de una única superclase (clase base/padre) Herencia Múltiple: Hace referencia en que una clase puede heredar comportamiento y características de mas de una superclase En PHP no es posible extender de múltiples clases, PHP no soporta la Herencia Múltiple
  • 6. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Sobrescritura De Método
  • 7. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Clases y Métodos Finales
  • 8. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Actividad a Realizar Realizar la siguiente practica en tu computador Escribir el siguiente código de una clase llamada vehiculo cuyo archivo se llama vehiculo.php
  • 9. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Ahora implementemos herencias a través de dos clase hijas quienes heredan de la clase padre vehiculo. Código de la clase Auto que hereda de la clase Vehiculo.Archivo auto.php Código de la clase Moto que hereda de la clase Vehiculo.Archivo moto.php Como vemos ambas clases tienen menos código.Ahora vamos a lo importante que permite la herencia: La herencia permite que clase como Auto y Moto hereden de una clase madre,en nuestro caso la clase Vehiculo. ¿Y que es lo que heredan? Las clases hijs heredan de las clase madres todos las propiedades y métodos , lo que permite ahorrar líneas de códigos innecesarias . Vamos a repasar los puntos: 1.- dentro de la clases hijas deben incluirse con require_once el archivo .php, donde se encuentra la clase madre. 2.- cuando definimos la clase hija debemos utilizar la palabra reservada extends mas el nombre de la clase madre: class ClaseHija extends ClasePadre. Por ejemplo en la clase Vehiculo tenemos un constructor como este: public function __construct($nro_puertas,$nro_ruedas,$marca){ $this->cantidad_puertas=$nro_puertas; $this->cantidad_ruedas=$nro_ruedas; $this->marca=$marca; }
  • 10. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Pero en la clase Moto lo que hacemos es sobreescribr el metodo de la clase madre: public function __construct($nro_puertas,$nro_ruedas,$marca){ parent::__construct(0,$nro_ruedas,$marca); toma el valor 0 en la propiedad , ya que una moto no tiene puertas. Ademas para llamar a métodos de una clase hija a una clase madre no lo hacemos con $thismetodo(). Si no co parent::metodo. En el caso de las propiedades se llaman con $this propiedad. Y por ultimo fíjate que en la case madre no usamos private para las propiedades sino que usamos la palabra reservada proteted. (consultar modificadores de accesos). Por ultimo les dejo el código de construir los objetos. Creando el Objeto auto. Archivo index.php Creando el objeto Moto Código completo
  • 11. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Te invito a pasar la práctica a Modelo Vista Controlador Referencias Bibliográficas Un sitio clave para quienes programamos en PHP orientado a objetos es PHPClasses: http://www.phpclasses.org