Este artículo lo ayudará a comprender fácilmente la diferencia entre el polimorfismo en tiempo de compilación y el polimorfismo en tiempo de ejecución.

Definición

define: polymorphism

poli + morph = muchas formas

El polimorfismo es la provisión de una interfaz única para entidades de diferentes tipos o el uso de un solo símbolo para representar múltiples tipos diferentes.

El concepto se toma prestado de un principio en biología donde un organismo o especie puede tener muchas formas o etapas diferentes.

Ciclo de vida del programa Java

Antes de entrar en las diferencias entre el polimorfismo en tiempo de compilación y en tiempo de ejecución, primero comprendamos qué es compilación y qué es tiempo de ejecución.

Como todos sabemos, Java es un lenguaje de alto nivel y escribimos programas en un formato legible/comprensible para los humanos, utilizando una sintaxis y una semántica definidas siguiendo reglas y normas definidas. Pero la máquina solo entiende 1 y 0. Entonces, ¿Cómo funciona nuestro programa? Entendámoslo.

JDK (Kit de desarrollo de Java): arquitectura aproximada

  1. Escribimos un programa java normal de alto nivel (por ejemplo, HelloWorld.java)
  2. Luego tenemos que ejecutar javac HelloWorld.javapara compilar el código legible por humanos a bytecode (HelloWorld.class)
  3. El bytecode es similar al código máquina pero no es exactamente eso. Como hay tantos sistemas operativos diferentes (Windows, Mac, Linux, etc.) es difícil generar código de máquina para cada sistema operativo. Entonces, el código de bytes que generó nuestro compilador se alimenta a una máquina virtual que es JVM (Java Virtual Machine) que reside en JRE (Java Runtime Environment).
  4. JVM finalmente interpreta el código de bytes y se lo explica al sistema operativo subyacente.

Diagrama de flujo que explica el tiempo de compilación y el tiempo de ejecución

  1. Tiempo de compilación : cuando el programa java de alto nivel se convierte a código de bytes (.java -> .class). Durante este proceso, el compilador comprueba la sintaxis, la semántica y el tipo de código.
  2. Tiempo de ejecución : cuando se ejecuta el código de máquina.

Polimorfismo en tiempo de compilación y en tiempo de ejecución

Ahora que tenemos una idea básica del ciclo de vida del programa Java y la diferencia entre compilación y tiempo de ejecución. Profundicemos en el tema del polimorfismo en tiempo de compilación y tiempo de ejecución.

Polimorfismo en tiempo de compilación

También conocido como polimorfismo estático . Este tipo de polimorfismo solo lo resuelve el compilador. Y sabemos incluso antes del tiempo de ejecución qué bloques de código se ejecutarán.

En una clase, puede haber varios métodos que comparten el mismo nombre pero difieren en

  1. Tipos de parámetros
  2. Número de parámetros
  3. Orden de los parámetros declarados en el método

Este concepto se denomina sobrecarga de métodos . En este caso, en el momento de la compilación, según el tipo de parámetro, la cantidad de parámetros o el orden de los parámetros, el compilador decide qué método tiene que llamar.

Cosa importante a tener en cuenta aquí.

Un método sobrecargado puede o no tener diferentes tipos de devolución.Pero el tipo de retorno por sí solo no es suficiente para que el compilador determine qué método se ejecutará en tiempo de ejecución.

Ejemplo

Ejemplo de polimorfismo en tiempo de compilación

En este ejemplo podemos ver los tres casos de sobrecarga de métodos.

Polimorfismo en tiempo de ejecución

También conocido como polimorfismo dinámico . Este tipo de polimorfismo se resuelve dinámicamente durante el tiempo de ejecución. Y no sabemos incluso después de la compilación qué bloques de código se ejecutarán.

Cuando una clase secundaria proporciona una definición específica del método que ya está presente en su clase principal, llamamos a este concepto como anulación del método .

Cosa importante a tener en cuenta aquí.

Debe tener el mismo nombre, mismos parámetros (tipo, longitud y orden) y mismo tipo de retorno

No puede anular un método que se declara como final o estático

No puede tener un modificador de acceso más restrictivo.

Puede tener un modificador de acceso menos restrictivo.

No debe generar una excepción comprobada nueva o más amplia.

Puede arrojar excepciones más estrechas, menos marcadas o ninguna.

El método anulado puede generar cualquier excepción no verificada, independientemente de si el método anulado declara la excepción.

Ejemplo

Ejemplo de polimorfismo en tiempo de ejecución

En este ejemplo, podemos ver que todas las clases secundarias como Bitcoin, Ethereum, etc. están extendiendo las clases Crypto y luego anulando el método getTotalMarketValue().

Si desea obtener más información al respecto, consulte estos documentos:

  1. https://www.baeldung.com/cs/runtime-vs-compile-time
  2. https://www.freecodecamp.org/news/polymorphism-in-java-tutorial-with-object-oriented-programming-example-code/
  3. https://blog.devgenius.io/beginners-guide-to-compile-time-and-runtime-polymorphism-in-java-72d197862778
Compartir:
Categorías: ProgramaciónTutoriales

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.