Autor Tema: Colección de objetos tamaño variable Java Listas, pilas tipo genérico CU00664B  (Leído 1812 veces)

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Hola. Aquí van las respuestas del ejercicio de la clase Stack en el API de Java código CU00664B del curso básico de programación Java de aprenderaprogramar.

Citar
¿Cómo se llama el método para consultar el objeto en la cima de la pila?

Respuesta: Peek()

Citar
¿Cómo se llama el método para consultar si la pila está vacía?

Respuesta: empty()

Citar
¿El método pop podríamos clasificarlo como tipo procedimiento, como tipo función, o como tipo mixto (procedimiento y función)?


Respuesta: yo creo que tipo mixto ya que mueve el objeto a la cima del stack (tipo procedimiento: realiza operaciones sin devolver nada) y nos devuelve también, ese objeto como el valor de la función (tipo función: nos devuelve algo con la expresión “return”).


Ahora quiero preguntar algo, ya que este método pop(), al igual que en el peek() y push(), tienen tipo "E" que supuestamente por lo que leí es "un parámetro de tipo en pila " pero no termino de entender si es un tipo primitivo o es un tipo especial de esa clase?

Muchas gracias!
« Última modificación: 18 de Agosto 2022, 17:43 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Esa E es lo que se llama un "tipo genérico", una especie de comodín para cuando no se sabe que tipo se va a utilizar.

Es decir, cuando declaramos un método en una clase, hay que indicar que tipo de dato va a retornar: un Integer, un String, un Persona, un Alumno....

Pero, si lo que estamos creando es una clase pensada para trabajar con CUALQUIER tipo de clase existente y por existir...., ¿cómo vamos a indicar lo que sus métodos retornan si hay, literalmente, infinitas posibilidades?

Eso es lo que pasa con las clases de las Collections de Java. Las List, las Map, las Set...., son interfaces/clases pensadas para coleccionar objetos de cualquier otra clase.
Así que al escribir estas clases, para indicar los tipos de retorno se usa un "tipo genérico", que en si mismo no es nada.

El código del método pop() de la clase Stack, es este:

Citar
public synchronized E pop()
{
    if (elementCount == 0)
        throw new EmptyStackException();

    modCount++;
    E obj = elementData[--elementCount];
 
    // Set topmost element to null to assist the gc in cleanup.
    elementData[elementCount] = null;
    return obj;
}

Con lo que remarco en azul, vemos que se retorna un objeto de tipo E.
¿Qué es tipo E? Pues un genérico.
En realidad no es nada, es una forma de decir que se va a retornar "algo", pero no sabemos que será, porque depende del tipo que escoja el programador cuando declare su propio Stack.

Así, cuando yo quiera usar un Stack y lo declare así:

Código: [Seleccionar]
Stack<String> miPila = new Stack<String>();
El método pop() retornará objetos String.

Y si lo declaro así:
Código: [Seleccionar]
Stack<Integer> miPila = new Stack<Integer>();Pues ahora pop() retornará Integer.

Para eso se usan los genéricos, para hacer que una clase pueda adaptarse a trabajar con objetos de cualquier otra clase.

Por eso el tipo E no es un tipo real, no existe la clase E. Es solo para decirle a Java que ahí puede ir cualquier tipo de clase, no una en concreto.
En ese caso se usa la E, porque es la primera letra de "Element" y suele usarse en las Collections de Java.
Pero se pueden usar otras letras, de hecho, la que más verás frecuentemente es la T de "Type".

Pero da lo mismo usar una que otra, en todos los casos la utilidad es indicar que el código ha de prepararse para usar cualquier tipo de clase.

Hay unas convenciones para elegir letras que describan lo mejor posible la naturaleza de los elementos que, previsiblemente (ya que en realidad puede ser cualquier cosa), se usará en la clase que estemos desarrollando con "tipos genéricos"

Citar
E – Element (usado bastante por Java Collections Framework)
K – Key (Llave, usado en Map)
N – Number (para números)
T – Type (Representa un tipo, es decir, una clase)
V – Value (representa el valor, también se usa en mapas)
S,U, etc. – usado para representar otros tipos.
« Última modificación: 14 de Febrero 2022, 17:43 por Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".