COMPARTE ESTE ARTÍCULO

Ejercicio de Nivel Medio

Introducción

En este examen final, se evaluarán tus conocimientos sobre clases y subclases, polimorfismo, arrays de objetos, ArrayList, pilas y colas. A continuación, se presentan las instrucciones y el ejercicio a realizar.

Instrucciones

  1. El examen consta de un solo ejercicio práctico.
  2. Deberás implementar varias clases siguiendo los principios de la programación orientada a objetos.
  3. Asegúrate de usar correctamente los conceptos de herencia y polimorfismo.
  4. Implementa y utiliza estructuras de datos como arrays de objetos, ArrayList, pilas y colas.
  5. El código debe ser claro, comentado y bien estructurado.

Ejercicio

Contexto

Vamos a simular una pequeña aplicación para la gestión de un zoológico. El zoológico tiene diferentes tipos de animales y cada animal tiene características específicas. Además, se deben gestionar las visitas de los clientes, usando estructuras de datos para almacenar las colas de espera y las listas de animales en exhibición.

Requisitos

  1. Clases y Subclases:
    • Crea una clase base llamada Animal con los siguientes atributos:
      • nombre (String)
      • edad (int)
    • Incluye un método llamado hacerSonido que devuelva un String con el sonido que hace el animal.
    • Crea al menos dos subclases de Animal: Leon y Elefante, cada una con su implementación del método hacerSonido.
  2. Polimorfismo:
    • Implementa una clase Zoologico que tenga un método agregarAnimal para añadir diferentes tipos de animales a una lista.
    • Crea un método mostrarSonidos que recorra la lista de animales y llame al método hacerSonido de cada uno, demostrando polimorfismo.
  3. Arrays de Objetos:
    • En la clase Zoologico, crea un array de objetos Animal que contenga una cantidad fija de animales (por ejemplo, 5).
  4. ArrayList:
    • Usa un ArrayList en la clase Zoologico para gestionar los animales que están en exhibición.
  5. Pilas y Colas:
    • Implementa una clase Visita con los atributos nombreCliente (String) y horaLlegada (String).
    • Usa una pila (Stack) para almacenar el historial de visitas.
    • Usa una cola (Queue) para gestionar la lista de espera de los visitantes.

Ejemplo de Código

import java.util.*;

class Animal {
    protected String nombre;
    protected int edad;

    public Animal(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }

    public String hacerSonido() {
        return "Sonido genérico";
    }
}

class Leon extends Animal {
    public Leon(String nombre, int edad) {
        super(nombre, edad);
    }

    @Override
    public String hacerSonido() {
        return "Rugido";
    }
}

class Elefante extends Animal {
    public Elefante(String nombre, int edad) {
        super(nombre, edad);
    }

    @Override
    public String hacerSonido() {
        return "Barrito";
    }
}

class Zoologico {
    private Animal[] animales;
    private ArrayList<Animal> exhibicion;
    private Stack<Visita> historialVisitas;
    private Queue<Visita> listaEspera;

    public Zoologico() {
        animales = new Animal[5];
        exhibicion = new ArrayList<>();
        historialVisitas = new Stack<>();
        listaEspera = new LinkedList<>();
    }

    public void agregarAnimal(Animal animal) {
        for (int i = 0; i < animales.length; i++) {
            if (animales[i] == null) {
                animales[i] = animal;
                return;
            }
        }
        exhibicion.add(animal);
    }

    public void mostrarSonidos() {
        for (Animal animal : animales) {
            if (animal != null) {
                System.out.println(animal.hacerSonido());
            }
        }
        for (Animal animal : exhibicion) {
            System.out.println(animal.hacerSonido());
        }
    }

    public void agregarVisita(Visita visita) {
        listaEspera.add(visita);
    }

    public void registrarVisita() {
        if (!listaEspera.isEmpty()) {
            Visita visita = listaEspera.poll();
            historialVisitas.push(visita);
        }
    }
}

class Visita {
    private String nombreCliente;
    private String horaLlegada;

    public Visita(String nombreCliente, String horaLlegada) {
        this.nombreCliente = nombreCliente;
        this.horaLlegada = horaLlegada;
    }

    @Override
    public String toString() {
        return nombreCliente + " llegó a las " + horaLlegada;
    }
}

public class Main {
    public static void main(String[] args) {
        Zoologico zoo = new Zoologico();

        Animal leon = new Leon("Simba", 5);
        Animal elefante = new Elefante("Dumbo", 10);

        zoo.agregarAnimal(leon);
        zoo.agregarAnimal(elefante);

        zoo.mostrarSonidos();

        Visita visita1 = new Visita("Juan Pérez", "10:00 AM");
        Visita visita2 = new Visita("María López", "10:15 AM");

        zoo.agregarVisita(visita1);
        zoo.agregarVisita(visita2);

        zoo.registrarVisita();
        zoo.registrarVisita();
    }
}

Conclusión

Este ejercicio integra varios conceptos clave de la programación orientada a objetos y estructuras de datos. Al completarlo, habrás demostrado tu capacidad para aplicar estos conceptos en una situación práctica. ¡Buena suerte!

… … …

¡Coméntanos que te ha parecido este artículo al final de la página!

TÚ OPINIÓN IMPORTA


NUESTRAS ÚLTIMAS PUBLICACIONES

… … …

¡Coméntanos que te ha parecido este artículo al final de la página!

TÚ OPINIÓN IMPORTA


NUESTRAS ÚLTIMAS PUBLICACIONES

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO