SlideShare una empresa de Scribd logo
1 de 7
Descargar para leer sin conexión
U N I V E R S I D A D T E C N O L Ó G I C A D E L E S T A D O D E Z A C A T E C A S
U N I D A D A C A D E M I C A D E P I N O S
T E C N O L O G Í A S D E L A I N F O R M A C I Ó N Y C O M U N I C A C I Ó N
TEMA:
POLIMORFISMO
UNIDAD:
UNIDAD II. “CONCEPTOS AVANZADOS DE LA POO”
MATERIA:
PROGRAMACIÓN DE APLICACIONES
PROFESOR:
ISC. OMAR EMMANUEL LARA JUÁREZ
ALUMNO:
DANIEL TORRES SALAS
CARRERA:
INGENIERIA EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN
GRADO Y GRUPO
9° CUATRIMESTRE “A”
PINOS, ZACATECAS. JULIO DEL 2015
Polimorfismo
El polimorfismo es una relajación del sistema de tipos, de tal manera que una
referencia a una clase (atributo, parámetro o declaración local o elemento de un
vector) acepta direcciones de objetos de dicha clase y de sus clases derivadas
(hijas, nietas).
Herencia y las clasificaciones en Programación Orientada a Objetos
Vemos que el polimorfismo y la herencia son dos conceptos estrechamente ligados.
Conseguimos implementar polimorfismo en jerarquías de clasificación que se dan a
través de la herencia.
Ejemplo:
Por qué el sistema de Tipos es Importante en Polimorfismo
Para entender la importancia del tipado de datos, conveniente entender cómo es
un lenguaje fuertemente tipado, como es el caso de Java o C. En estos lenguajes,
cuando defino una variable, siempre tengo que decir el tipo de datos que va a
contener esta variable.
Por ejemplo:
int miNumero;
Así le indicamos que la variable declarada "miNumero" va a contener siempre un
entero. Podrás asignarle diversos valores, pero siempre deben de ser números
enteros. De lo contrario el compilador te lanzará un mensaje de error y no te
permitirá compilar el programa que has realizado.
Largometraje miLargo = new Largometraje("Lo que el viento se
llevó");
Esa variable "miLargo", por declaración tendrá una referencia a un objeto de la clase
"Largometraje". Pues bien, durante toda su vida, deberá tener siempre una
referencia a cualquier objeto de la misma clase. O sea, mañana no podremos
guardar un entero en la variable, ni una cadena u otro objeto de otra clase.
Volviendo al ejemplo de los vehículos, si defino una variable que apunta a un objeto
de clase "Coche", durante toda la vida de esa variable tendrá que contener un objeto
de la clase Coche, no pudiendo más adelante apuntar a un objeto de la clase Moto
o de la clase Bus.
Esta rigidez, como decimos, no existe en los lenguajes débilmente tipados como es
el caso de Javascript o PHP, sin embargo es una característica habitual de
lenguajes como Java, que son fuertemente tipados.
Coche miCoche = new Coche("Ford Focus 2.0");
//la variable miCoche apunta a un objeto de la clase coche
//si lo deseo, mañana podrá apuntar a otro objeto diferente, pero siempre tendrá que
ser de la clase Coche
miCoche = new Coche("Renault Megane 1.6");
Lo que nunca podré hacer es guardar en esa variable, declarada como tipo Coche,
otra cosa que no sea un objeto de la clase Coche.
//si miCoche fue declarada como tipo Coche, no puedo guardar un objeto de la clase
Moto
miCoche = new Moto("Yamaha YBR");
//la línea anterior nos daría un error en tiempo de compilación
Fíjate que en este punto no te estoy hablando todavía de polimorfismo, sino de algo
de la programación en general como es el sistema de tipos.
Nota: A veces, a los lenguajes fuertemente tipados se les llama de "tipado estático"
y a los débilmente tipados se les llama "tipado dinámico".
Polimorfismo en objetos
Tal como funcionan los lenguajes fuertemente tipados, una variable siempre deberá
apuntar a un objeto de la clase que se indicó en el momento de su declaración. Una
función cuyo parámetro se haya declarado de una clase, sólo te aceptará recibir
objetos de esa clase. Un array que se ha declarado que es de elementos de una
clase determinada, solo aceptará que rellenemos sus casillas con objetos de esa
clase declarada.
Vehiculo[] misVehiculos = new Vehiculo[3];
Esa variable misVehiculos es un array y en ella he declarado que el contenido de
las casillas serán objetos de la clase "Vehículo". Como se ha explicado, en
lenguajes fuertemente tipados sólo podría contener objetos de la clase Vehículo.
Pues bien, polimorfismo es el mecanismo por el cual podemos "relajar el sistema
de tipos", de modo que nos acepte también objetos de las clases hijas o derivadas.
Por tanto, la "relajación" del sistema de tipos no es total, sino que tiene que ver con
las clasificaciones de herencia que tengas en tus sistemas de clases. Si defines un
array con casillas de una determinada clase, el compilador también te aceptará que
metas en esas casillas objetos de una clase hija de la que fue declarada. Si declaras
que una función recibe como parámetros objetos de una determinada clase, el
compilador también te aceptará que le envíes en la invocación objetos de una clase
derivada de aquella que fue declarada.
En concreto, en nuestro array de vehículos, gracias al polimorfismo podrás contener
en los elementos del array no solo vehículos genéricos, sino también todos los
objetos de clases hijas o derivadas de la clase "Vehiculo", osea objetos de la clase
"Coche", "Moto", "Bus" o cualquier hija que se haya definido.
Para qué nos sirve en la práctica el polimorfismo
Volvamos a la clase "Largometraje" y ahora pensemos en la clase "Cine". En un
cine se reproducen largometrajes. Puedes, no obstante, tener varios tipos de
largometrajes, como películas o documentales, etc. Quizás las películas y
documentales tienen diferentes características, distintos horarios de audiencia,
distintos precios para los espectadores y por ello has decidido que tu clase
"Largometraje" tenga clases hijas o derivadas como "Película" y "Documental".
Imagina que en tu clase "Cine" creas un método que se llama "reproducir()". Este
método podrá recibir como parámetro aquello que quieres emitir en una sala de cine
y podrán llegarte a veces objetos de la clase "Película" y otras veces objetos de la
clase "Documental". Si has entendido el sistema de tipos, y sin entrar todavía en
polimorfismo, debido a que los métodos declaran los tipos de los parámetros que
recibes, tendrás que hacer algo como esto:
reproducir(Pelicula peliculaParaReproducir)
Pero si luego tienes que reproducir documentales, tendrás que declarar:
reproducir(Documental documentaParaReproducir)
Probablemente el código de ambos métodos sea exactamente el mismo. Poner la
película en el proyector, darle al play, crear un registro con el número de entradas
vendidas, parar la cinta cuando llega al final, etc. ¿Realmente es necesario hacer
dos métodos? De acuerdo, igual no te supone tanto problema, ¿pero si mañana te
mandan otro tipo de cinta a reproducir, como la grabación de la final del mundial de
fútbol en 3D? ¿Tendrás que crear un nuevo método reproducir() sobre la clase
"Cine" que te acepte ese tipo de emisión? ¿Es posible ahorrarnos todo ese
mantenimiento?
Aquí es donde el polimorfismo nos ayuda. Podrías crear perfectamente un método
"reproducir()" que recibe un largometraje y donde podrás recibir todo tipo de
elementos, películas, documentales y cualquier otra cosa similar que sea creada en
el futuro.
Entonces lo que te permiten hacer los lenguajes es declarar el método "reproducir()"
indicando que el parámetro que vas a recibir es un objeto de la clase padre
"Largometraje", pero donde realmente el lenguaje y compilador te aceptan cualquier
objeto de la clase hija o derivada, "Película", "Documental", etc.
reproducir(Largometraje elementoParaReproducir)
Podremos crear películas y reproducirlas, también crear documentales para luego
reproducir y lo bonito de la historia es que todos estos objetos son aceptados por el
método "reproducir()", gracias a la relajación del sistema de tipos. Incluso, si
mañana quieres reproducir otro tipo de cinta, no tendrás que tocar la clase "Cine" y
el método "reproducir()". Siempre que aquello que quieras reproducir sea de la clase
"Largometraje" o una clase hija, el método te lo aceptará.
Conclusión
El polimorfismo consiste en conseguir que un objeto de una clase se comporte como
un objeto de cualquiera de sus subclases, es posible diseñar e implementar
sistemas que puedan extenderse fácilmente así poder agregar nuevas clases con
pocas modificaciones o ninguna ya que permitirá heredar de la clase padre sus
métodos u objetos. El polimorfismo es fundamental para el lenguaje de
programación orientada a objetos, fácil de identificar y de gran facilidad a los
programadores para el ahorro de código y tiempo.
Diferencia entre los Tipos de Lenguajes Tipados y no Tipados
Lenguaje Tipado
Los lenguajes de programación suelen contar con un sublenguaje de tipos para
declarar variables. Este sublenguaje instruye al compilador respecto al tipo de
valores que puede adoptar cada variable.
Por ejemplo:
Int X;
Lenguaje no Tipado
Los lenguajes de programación no tipados o débilmente tipados no controlan los
tipos de las variables que declaran, de este modo, es posible usar variables de
cualquier tipo en un mismo escenario. Por ejemplo, una función puede recibir como
parámetro un valor entero, cadena de caracteres, flotante, etc.
Por ejemplo:
A = 2;
Cal = “calificación”;
Resultado = cal / 2;

Más contenido relacionado

La actualidad más candente (20)

Prog oo con_java
Prog oo con_javaProg oo con_java
Prog oo con_java
 
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial   6 Polimorfismo, AbstraccióN E InterfacesCurso Java Inicial   6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
Poo3 java-0910
Poo3 java-0910Poo3 java-0910
Poo3 java-0910
 
Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
4 unidad polimorfismo
4 unidad polimorfismo4 unidad polimorfismo
4 unidad polimorfismo
 
Programación de aplicaciones
Programación de aplicacionesProgramación de aplicaciones
Programación de aplicaciones
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismo_PApps
Polimorfismo_PAppsPolimorfismo_PApps
Polimorfismo_PApps
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Tarea v de programacion ii
Tarea v de programacion iiTarea v de programacion ii
Tarea v de programacion ii
 
Polimorfismo 14k
Polimorfismo 14kPolimorfismo 14k
Polimorfismo 14k
 
polimorfismo
polimorfismopolimorfismo
polimorfismo
 
09 Clases Abstractas E Interfaces
09   Clases Abstractas E Interfaces09   Clases Abstractas E Interfaces
09 Clases Abstractas E Interfaces
 
Clase
ClaseClase
Clase
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 

Destacado

Polimorfismos Geneticos
Polimorfismos GeneticosPolimorfismos Geneticos
Polimorfismos Geneticosmauroberta
 
Polimorfismo
PolimorfismoPolimorfismo
PolimorfismoCaveiras
 
Genetica polomorfismos-1
Genetica polomorfismos-1Genetica polomorfismos-1
Genetica polomorfismos-1willy5121
 
Polimorfismo variabilidad
Polimorfismo variabilidadPolimorfismo variabilidad
Polimorfismo variabilidadAlfonso
 
Polimorfismo de adn[1]
Polimorfismo de adn[1]Polimorfismo de adn[1]
Polimorfismo de adn[1]Lisseth Rivmar
 
Estructura Y Funciones Del Genoma Humano
Estructura Y Funciones Del Genoma HumanoEstructura Y Funciones Del Genoma Humano
Estructura Y Funciones Del Genoma HumanoKurai Tsukino
 
TÉCNICAS DE BIOLOGÍA MOLECULAR
TÉCNICAS DE BIOLOGÍA MOLECULAR TÉCNICAS DE BIOLOGÍA MOLECULAR
TÉCNICAS DE BIOLOGÍA MOLECULAR victor franco
 
POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoActimel
 
Mutaciones y snps
Mutaciones y snpsMutaciones y snps
Mutaciones y snpsEdith Arias
 
Diagnostico Molecular Enf 2 Qca Clin Esp Nov Pdf
Diagnostico Molecular Enf 2 Qca Clin Esp Nov PdfDiagnostico Molecular Enf 2 Qca Clin Esp Nov Pdf
Diagnostico Molecular Enf 2 Qca Clin Esp Nov PdfCESI-DESAN
 
T4 la revolucion genetica
T4 la revolucion geneticaT4 la revolucion genetica
T4 la revolucion geneticaEduardo Gómez
 

Destacado (19)

Polimorfismos Geneticos
Polimorfismos GeneticosPolimorfismos Geneticos
Polimorfismos Geneticos
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Genetica polomorfismos-1
Genetica polomorfismos-1Genetica polomorfismos-1
Genetica polomorfismos-1
 
Polimorfismo final
Polimorfismo finalPolimorfismo final
Polimorfismo final
 
Polimorfismo variabilidad
Polimorfismo variabilidadPolimorfismo variabilidad
Polimorfismo variabilidad
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
ONCOgenics
ONCOgenicsONCOgenics
ONCOgenics
 
Polimorfismo de adn[1]
Polimorfismo de adn[1]Polimorfismo de adn[1]
Polimorfismo de adn[1]
 
Polimorfismo genetico
Polimorfismo geneticoPolimorfismo genetico
Polimorfismo genetico
 
Técnicas de Diagnóstico Molecular UAP AQP
Técnicas de Diagnóstico Molecular UAP AQPTécnicas de Diagnóstico Molecular UAP AQP
Técnicas de Diagnóstico Molecular UAP AQP
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Estructura Y Funciones Del Genoma Humano
Estructura Y Funciones Del Genoma HumanoEstructura Y Funciones Del Genoma Humano
Estructura Y Funciones Del Genoma Humano
 
TÉCNICAS DE BIOLOGÍA MOLECULAR
TÉCNICAS DE BIOLOGÍA MOLECULAR TÉCNICAS DE BIOLOGÍA MOLECULAR
TÉCNICAS DE BIOLOGÍA MOLECULAR
 
POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y Polimorfismo
 
Alteraciones numericas y estructurales
Alteraciones numericas y estructuralesAlteraciones numericas y estructurales
Alteraciones numericas y estructurales
 
Mutaciones y snps
Mutaciones y snpsMutaciones y snps
Mutaciones y snps
 
Diagnostico Molecular Enf 2 Qca Clin Esp Nov Pdf
Diagnostico Molecular Enf 2 Qca Clin Esp Nov PdfDiagnostico Molecular Enf 2 Qca Clin Esp Nov Pdf
Diagnostico Molecular Enf 2 Qca Clin Esp Nov Pdf
 
T4 la revolucion genetica
T4 la revolucion geneticaT4 la revolucion genetica
T4 la revolucion genetica
 

Similar a Polimorfismo (20)

Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Resumen polimorfismo
Resumen polimorfismoResumen polimorfismo
Resumen polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismoomar
PolimorfismoomarPolimorfismoomar
Polimorfismoomar
 
Polimorfismo1
Polimorfismo1Polimorfismo1
Polimorfismo1
 
Guía polimorfismo
Guía polimorfismoGuía polimorfismo
Guía polimorfismo
 
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
 
RESUMEN DE POLIMORFISMO
RESUMEN DE POLIMORFISMORESUMEN DE POLIMORFISMO
RESUMEN DE POLIMORFISMO
 
Polimorfismo resumen
Polimorfismo resumenPolimorfismo resumen
Polimorfismo resumen
 
Madli
MadliMadli
Madli
 
Presentacion progra
Presentacion prograPresentacion progra
Presentacion progra
 
Fundamentos De Programacion
Fundamentos De ProgramacionFundamentos De Programacion
Fundamentos De Programacion
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]
 
Action script 3
Action script 3Action script 3
Action script 3
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
 
UT05-POO.pdf
UT05-POO.pdfUT05-POO.pdf
UT05-POO.pdf
 
Herencia
HerenciaHerencia
Herencia
 
JAVA- basico
JAVA- basicoJAVA- basico
JAVA- basico
 
Introduccion actionscript
Introduccion actionscriptIntroduccion actionscript
Introduccion actionscript
 

Más de Daniiel Toorres

Sistemas de comunicaciones
Sistemas de comunicacionesSistemas de comunicaciones
Sistemas de comunicacionesDaniiel Toorres
 
Normas que regulan las telecomunicaciones
Normas que regulan las telecomunicacionesNormas que regulan las telecomunicaciones
Normas que regulan las telecomunicacionesDaniiel Toorres
 
Plantilla unidad i_apple
Plantilla unidad i_applePlantilla unidad i_apple
Plantilla unidad i_appleDaniiel Toorres
 
Manual de Procedimientos y Politicas de APPLE INC.
Manual de Procedimientos y Politicas de APPLE INC.Manual de Procedimientos y Politicas de APPLE INC.
Manual de Procedimientos y Politicas de APPLE INC.Daniiel Toorres
 
Trabajo final plan de comunicacion
Trabajo final plan de comunicacionTrabajo final plan de comunicacion
Trabajo final plan de comunicacionDaniiel Toorres
 
Trabajo final plan de comunicacion
Trabajo final plan de comunicacionTrabajo final plan de comunicacion
Trabajo final plan de comunicacionDaniiel Toorres
 
Gestión de Recursos Humanos
Gestión de Recursos HumanosGestión de Recursos Humanos
Gestión de Recursos HumanosDaniiel Toorres
 
A1 u4gb aplicación móvil con acceso a datos
A1 u4gb aplicación móvil con acceso a datosA1 u4gb aplicación móvil con acceso a datos
A1 u4gb aplicación móvil con acceso a datosDaniiel Toorres
 
aplicación móvil con acceso a datos sqliti
aplicación móvil con acceso a datos sqlitiaplicación móvil con acceso a datos sqliti
aplicación móvil con acceso a datos sqlitiDaniiel Toorres
 

Más de Daniiel Toorres (20)

Tecnologias emergentes
Tecnologias emergentesTecnologias emergentes
Tecnologias emergentes
 
Bus app
Bus appBus app
Bus app
 
Informe de auditoria
Informe de auditoriaInforme de auditoria
Informe de auditoria
 
Sistemas de comunicaciones
Sistemas de comunicacionesSistemas de comunicaciones
Sistemas de comunicaciones
 
Interfaces en java
Interfaces en javaInterfaces en java
Interfaces en java
 
Abstraccion
AbstraccionAbstraccion
Abstraccion
 
Normas que regulan las telecomunicaciones
Normas que regulan las telecomunicacionesNormas que regulan las telecomunicaciones
Normas que regulan las telecomunicaciones
 
Plantilla unidad i_apple
Plantilla unidad i_applePlantilla unidad i_apple
Plantilla unidad i_apple
 
Antenas
AntenasAntenas
Antenas
 
Manual de Procedimientos y Politicas de APPLE INC.
Manual de Procedimientos y Politicas de APPLE INC.Manual de Procedimientos y Politicas de APPLE INC.
Manual de Procedimientos y Politicas de APPLE INC.
 
Consultas generadas
Consultas generadasConsultas generadas
Consultas generadas
 
Trabajo final plan de comunicacion
Trabajo final plan de comunicacionTrabajo final plan de comunicacion
Trabajo final plan de comunicacion
 
Trabajo final plan de comunicacion
Trabajo final plan de comunicacionTrabajo final plan de comunicacion
Trabajo final plan de comunicacion
 
Transacciones
TransaccionesTransacciones
Transacciones
 
Gestión de Recursos Humanos
Gestión de Recursos HumanosGestión de Recursos Humanos
Gestión de Recursos Humanos
 
Estandares y normas iso
Estandares y normas isoEstandares y normas iso
Estandares y normas iso
 
Derivadas e integrales
Derivadas e integralesDerivadas e integrales
Derivadas e integrales
 
Plantilla trabajo final
Plantilla trabajo finalPlantilla trabajo final
Plantilla trabajo final
 
A1 u4gb aplicación móvil con acceso a datos
A1 u4gb aplicación móvil con acceso a datosA1 u4gb aplicación móvil con acceso a datos
A1 u4gb aplicación móvil con acceso a datos
 
aplicación móvil con acceso a datos sqliti
aplicación móvil con acceso a datos sqlitiaplicación móvil con acceso a datos sqliti
aplicación móvil con acceso a datos sqliti
 

Polimorfismo

  • 1. U N I V E R S I D A D T E C N O L Ó G I C A D E L E S T A D O D E Z A C A T E C A S U N I D A D A C A D E M I C A D E P I N O S T E C N O L O G Í A S D E L A I N F O R M A C I Ó N Y C O M U N I C A C I Ó N TEMA: POLIMORFISMO UNIDAD: UNIDAD II. “CONCEPTOS AVANZADOS DE LA POO” MATERIA: PROGRAMACIÓN DE APLICACIONES PROFESOR: ISC. OMAR EMMANUEL LARA JUÁREZ ALUMNO: DANIEL TORRES SALAS CARRERA: INGENIERIA EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN GRADO Y GRUPO 9° CUATRIMESTRE “A” PINOS, ZACATECAS. JULIO DEL 2015
  • 2. Polimorfismo El polimorfismo es una relajación del sistema de tipos, de tal manera que una referencia a una clase (atributo, parámetro o declaración local o elemento de un vector) acepta direcciones de objetos de dicha clase y de sus clases derivadas (hijas, nietas). Herencia y las clasificaciones en Programación Orientada a Objetos Vemos que el polimorfismo y la herencia son dos conceptos estrechamente ligados. Conseguimos implementar polimorfismo en jerarquías de clasificación que se dan a través de la herencia. Ejemplo:
  • 3. Por qué el sistema de Tipos es Importante en Polimorfismo Para entender la importancia del tipado de datos, conveniente entender cómo es un lenguaje fuertemente tipado, como es el caso de Java o C. En estos lenguajes, cuando defino una variable, siempre tengo que decir el tipo de datos que va a contener esta variable. Por ejemplo: int miNumero; Así le indicamos que la variable declarada "miNumero" va a contener siempre un entero. Podrás asignarle diversos valores, pero siempre deben de ser números enteros. De lo contrario el compilador te lanzará un mensaje de error y no te permitirá compilar el programa que has realizado. Largometraje miLargo = new Largometraje("Lo que el viento se llevó"); Esa variable "miLargo", por declaración tendrá una referencia a un objeto de la clase "Largometraje". Pues bien, durante toda su vida, deberá tener siempre una referencia a cualquier objeto de la misma clase. O sea, mañana no podremos guardar un entero en la variable, ni una cadena u otro objeto de otra clase. Volviendo al ejemplo de los vehículos, si defino una variable que apunta a un objeto de clase "Coche", durante toda la vida de esa variable tendrá que contener un objeto de la clase Coche, no pudiendo más adelante apuntar a un objeto de la clase Moto o de la clase Bus. Esta rigidez, como decimos, no existe en los lenguajes débilmente tipados como es el caso de Javascript o PHP, sin embargo es una característica habitual de lenguajes como Java, que son fuertemente tipados. Coche miCoche = new Coche("Ford Focus 2.0"); //la variable miCoche apunta a un objeto de la clase coche //si lo deseo, mañana podrá apuntar a otro objeto diferente, pero siempre tendrá que ser de la clase Coche miCoche = new Coche("Renault Megane 1.6"); Lo que nunca podré hacer es guardar en esa variable, declarada como tipo Coche, otra cosa que no sea un objeto de la clase Coche.
  • 4. //si miCoche fue declarada como tipo Coche, no puedo guardar un objeto de la clase Moto miCoche = new Moto("Yamaha YBR"); //la línea anterior nos daría un error en tiempo de compilación Fíjate que en este punto no te estoy hablando todavía de polimorfismo, sino de algo de la programación en general como es el sistema de tipos. Nota: A veces, a los lenguajes fuertemente tipados se les llama de "tipado estático" y a los débilmente tipados se les llama "tipado dinámico". Polimorfismo en objetos Tal como funcionan los lenguajes fuertemente tipados, una variable siempre deberá apuntar a un objeto de la clase que se indicó en el momento de su declaración. Una función cuyo parámetro se haya declarado de una clase, sólo te aceptará recibir objetos de esa clase. Un array que se ha declarado que es de elementos de una clase determinada, solo aceptará que rellenemos sus casillas con objetos de esa clase declarada. Vehiculo[] misVehiculos = new Vehiculo[3]; Esa variable misVehiculos es un array y en ella he declarado que el contenido de las casillas serán objetos de la clase "Vehículo". Como se ha explicado, en lenguajes fuertemente tipados sólo podría contener objetos de la clase Vehículo. Pues bien, polimorfismo es el mecanismo por el cual podemos "relajar el sistema de tipos", de modo que nos acepte también objetos de las clases hijas o derivadas. Por tanto, la "relajación" del sistema de tipos no es total, sino que tiene que ver con las clasificaciones de herencia que tengas en tus sistemas de clases. Si defines un array con casillas de una determinada clase, el compilador también te aceptará que metas en esas casillas objetos de una clase hija de la que fue declarada. Si declaras que una función recibe como parámetros objetos de una determinada clase, el compilador también te aceptará que le envíes en la invocación objetos de una clase derivada de aquella que fue declarada. En concreto, en nuestro array de vehículos, gracias al polimorfismo podrás contener en los elementos del array no solo vehículos genéricos, sino también todos los objetos de clases hijas o derivadas de la clase "Vehiculo", osea objetos de la clase "Coche", "Moto", "Bus" o cualquier hija que se haya definido.
  • 5. Para qué nos sirve en la práctica el polimorfismo Volvamos a la clase "Largometraje" y ahora pensemos en la clase "Cine". En un cine se reproducen largometrajes. Puedes, no obstante, tener varios tipos de largometrajes, como películas o documentales, etc. Quizás las películas y documentales tienen diferentes características, distintos horarios de audiencia, distintos precios para los espectadores y por ello has decidido que tu clase "Largometraje" tenga clases hijas o derivadas como "Película" y "Documental". Imagina que en tu clase "Cine" creas un método que se llama "reproducir()". Este método podrá recibir como parámetro aquello que quieres emitir en una sala de cine y podrán llegarte a veces objetos de la clase "Película" y otras veces objetos de la clase "Documental". Si has entendido el sistema de tipos, y sin entrar todavía en polimorfismo, debido a que los métodos declaran los tipos de los parámetros que recibes, tendrás que hacer algo como esto: reproducir(Pelicula peliculaParaReproducir) Pero si luego tienes que reproducir documentales, tendrás que declarar: reproducir(Documental documentaParaReproducir) Probablemente el código de ambos métodos sea exactamente el mismo. Poner la película en el proyector, darle al play, crear un registro con el número de entradas vendidas, parar la cinta cuando llega al final, etc. ¿Realmente es necesario hacer dos métodos? De acuerdo, igual no te supone tanto problema, ¿pero si mañana te mandan otro tipo de cinta a reproducir, como la grabación de la final del mundial de fútbol en 3D? ¿Tendrás que crear un nuevo método reproducir() sobre la clase "Cine" que te acepte ese tipo de emisión? ¿Es posible ahorrarnos todo ese mantenimiento? Aquí es donde el polimorfismo nos ayuda. Podrías crear perfectamente un método "reproducir()" que recibe un largometraje y donde podrás recibir todo tipo de elementos, películas, documentales y cualquier otra cosa similar que sea creada en el futuro. Entonces lo que te permiten hacer los lenguajes es declarar el método "reproducir()" indicando que el parámetro que vas a recibir es un objeto de la clase padre "Largometraje", pero donde realmente el lenguaje y compilador te aceptan cualquier objeto de la clase hija o derivada, "Película", "Documental", etc. reproducir(Largometraje elementoParaReproducir)
  • 6. Podremos crear películas y reproducirlas, también crear documentales para luego reproducir y lo bonito de la historia es que todos estos objetos son aceptados por el método "reproducir()", gracias a la relajación del sistema de tipos. Incluso, si mañana quieres reproducir otro tipo de cinta, no tendrás que tocar la clase "Cine" y el método "reproducir()". Siempre que aquello que quieras reproducir sea de la clase "Largometraje" o una clase hija, el método te lo aceptará.
  • 7. Conclusión El polimorfismo consiste en conseguir que un objeto de una clase se comporte como un objeto de cualquiera de sus subclases, es posible diseñar e implementar sistemas que puedan extenderse fácilmente así poder agregar nuevas clases con pocas modificaciones o ninguna ya que permitirá heredar de la clase padre sus métodos u objetos. El polimorfismo es fundamental para el lenguaje de programación orientada a objetos, fácil de identificar y de gran facilidad a los programadores para el ahorro de código y tiempo. Diferencia entre los Tipos de Lenguajes Tipados y no Tipados Lenguaje Tipado Los lenguajes de programación suelen contar con un sublenguaje de tipos para declarar variables. Este sublenguaje instruye al compilador respecto al tipo de valores que puede adoptar cada variable. Por ejemplo: Int X; Lenguaje no Tipado Los lenguajes de programación no tipados o débilmente tipados no controlan los tipos de las variables que declaran, de este modo, es posible usar variables de cualquier tipo en un mismo escenario. Por ejemplo, una función puede recibir como parámetro un valor entero, cadena de caracteres, flotante, etc. Por ejemplo: A = 2; Cal = “calificación”; Resultado = cal / 2;