Plantillas en C++ vs Genéricos en Java

Al construir proyectos a gran escala, necesitamos que el código sea compatible con cualquier tipo de datos que se le proporcione. Ese es el lugar donde su código escrito está por encima del de los demás. Aquí lo que queremos decir es hacer que el código que escriba sea genérico para cualquier tipo de datos proporcionados al programa, independientemente de su tipo de datos. Aquí es donde Generics en Java y el similar en C++ denominado Template resultan útiles. Si bien ambos tienen funcionalidades similares, difieren en algunos lugares.

Plantilla en C++

Escribir programas genéricos en C++ se llama Plantillas.

  1. Una de las principales características de la plantilla en C++ es el uso de la metaprogramación. Deje que la firma de la plantilla del código proporcionado sea diferente, donde C++ brinda la capacidad de implementarlos.
  2. Los argumentos de plantilla pueden ser tanto clases como funciones.
  3. C++ requiere que se agreguen fuentes de plantilla en sus encabezados.
  4. Se podría lograr la especialización de plantilla, es decir, se puede implementar un tipo y método específico de plantilla.
// CPP program to illustrate Templates
#include <iostream>
#include <string.h>
  
using namespace std;
  
template <class T>
class TempClass {
  
    T value;
  
public:
    TempClass(T item)
    {
        value = item;
    }
  
    T getValue()
    {
        return value;
    }
};
  
int main()
{
    class TempClass<string>* String = 
      new TempClass<string>("Generics vs Templates");
  
    cout << "Output Values: " << String->getValue() 
         << "\n";
  
    class TempClass<int>* integer = new TempClass<int>(9);
    cout << "Output Values: " << integer->getValue();
}
Producción:

Output Values: Generics vs Templates
Output Values: 9

Genéricos en Java

  1. Una de las características principales de Java Generics es que maneja la verificación de tipos durante la creación de instancias y genera un código de bytes equivalente al código no genérico.
    El compilador de Java comprueba el tipo antes de la creación de instancias, lo que a su vez hace que la implementación de Generic sea segura. Mientras tanto, en C++, las plantillas no conocen los tipos.
  2. Si Generics se aplica en una clase, entonces se aplica a las clases y métodos dentro de las clases.
  3. Otro factor importante que conduce al uso de genéricos en Java es que le permite eliminar los downcasts.
  4. Crear instancias de una clase genérica no tiene una sobrecarga de tiempo de ejecución en comparación con el uso de una clase equivalente que se usa como objeto específico en lugar de un tipo genérico de T .
// Java program to illustrate
// Generics
public class GenericClass<T> {
private T value;
  
    public GenericClass(T value)
    {
        this.value = value;
    }
  
    public void showType()
    {
        System.out.println("Type:" + 
            value.getClass().getSimpleName());
        System.out.println("Value: " + value);
    }
  
    public static void main(String[] args)
    {
        GenericClass<String> Str = 
           new GenericClass<String>("Generics vs Templates");
  
        GenericClass<Integer> integer = 
                         new GenericClass<Integer>(9);
  
        Str.showType();
        integer.showType();
    }
}
Producción:

Type:String
Value: Generics vs Templates
Type:Integer
Value: 9

Plantillas C++ vs Genéricos en Java

Aunque ambos métodos para crear un tipo genérico son similares, varían en algunos lugares, mientras que la propiedad de implementación que poseen es la misma.

  1. Borrado de tipos: el borrado de tipos garantiza una verificación de tipos más estricta durante el tiempo de compilación. Los genéricos de Java simplemente ofrecen seguridad en tiempo de compilación y eliminan la necesidad de conversiones. Esto se implementa directamente en el front-end del compilador de Java y se asegura de que se haya borrado el tipo.
  2. En C++, cuando usa una plantilla, el compilador emitirá el código de la plantilla nuevamente después de reemplazar el parámetro genérico con el tipo que usó. Esto es más potente en varios sentidos, pero puede dar lugar a archivos ejecutables inflados .
  3. Clase contenedora: en Java, incluso si tenemos que especificar específicamente el tipo de datos dentro del cual la función llama usando cualquier objeto, no necesitamos convertirlo de manera similar a la de C++ con tipos de datos reales, sino que usamos clases contenedoras para hacer el requerido.
  4. Verificación de tipos: Java Generics maneja la verificación de tipos durante la creación de instancias y genera un código de bytes equivalente al código no genérico. C++ tiene «tipado latente» y metaprogramación de plantillas y genera una nueva clase para cada instancia.

Java fomenta la reutilización del software y agrega soporte básico para la programación genérica. Para Java, es un gran paso adelante en el área del desarrollo de software comercial.

Este artículo es una contribución de Aniketh Girish . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando write.geeksforgeeks.org o enviar su artículo por correo electrónico a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *