COMPARTE ESTE ARTÍCULO

Ejercicio de Nivel Asequible

Introducción

Este examen final está diseñado para evaluar tus conocimientos básicos sobre clases y subclases, polimorfismo, arrays de objetos, ArrayList, pilas y colas. A continuación, se presentan las instrucciones y el ejercicio a realizar, con un enfoque particular en pilas y colas.

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. Utiliza 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 sistema de pedidos en una tienda en línea. La tienda tiene diferentes tipos de productos y cada producto tiene características específicas. Además, se deben gestionar las órdenes de los clientes usando estructuras de datos para almacenar las pilas de productos en el almacén y las colas de pedidos de los clientes.

Requisitos

  1. Clases y Subclases:
    • Crea una clase base llamada Producto con los siguientes atributos:
      • nombre (String)
      • codigo (String)
    • Incluye un método llamado mostrarInfo que devuelva un String con la información del producto.
    • Crea al menos dos subclases de Producto: Electrodomestico y Ropa, cada una con su implementación del método mostrarInfo.
  2. Polimorfismo:
    • Implementa una clase Tienda que tenga un método agregarProducto para añadir diferentes tipos de productos a una lista.
    • Crea un método mostrarProductos que recorra la lista de productos y llame al método mostrarInfo de cada uno, demostrando polimorfismo.
  3. Arrays de Objetos:
    • En la clase Tienda, crea un array de objetos Producto que contenga una cantidad fija de productos (por ejemplo, 5).
  4. ArrayList:
    • Usa un ArrayList en la clase Tienda para gestionar los productos en el inventario.
  5. Pilas y Colas:
    • Implementa una clase Pedido con los atributos nombreCliente (String) y codigoProducto (String).
    • Usa una pila (Stack) para almacenar los productos en el almacén.
    • Usa una cola (Queue) para gestionar la lista de pedidos de los clientes.

Ejemplo de Código

import java.util.*;

class Producto {
    protected String nombre;
    protected String codigo;

    public Producto(String nombre, String codigo) {
        this.nombre = nombre;
        this.codigo = codigo;
    }

    public String mostrarInfo() {
        return "Producto: " + nombre + ", Código: " + codigo;
    }
}

class Electrodomestico extends Producto {
    private int potencia; // Potencia en vatios

    public Electrodomestico(String nombre, String codigo, int potencia) {
        super(nombre, codigo);
        this.potencia = potencia;
    }

    @Override
    public String mostrarInfo() {
        return "Electrodoméstico: " + nombre + ", Potencia: " + potencia + "W, Código: " + codigo;
    }
}

class Ropa extends Producto {
    private String talla; // Talla de la ropa

    public Ropa(String nombre, String codigo, String talla) {
        super(nombre, codigo);
        this.talla = talla;
    }

    @Override
    public String mostrarInfo() {
        return "Ropa: " + nombre + ", Talla: " + talla + ", Código: " + codigo;
    }
}

class Tienda {
    private Producto[] productos;
    private ArrayList<Producto> inventario;
    private Stack<Producto> almacen;
    private Queue<Pedido> pedidos;

    public Tienda() {
        productos = new Producto[5];
        inventario = new ArrayList<>();
        almacen = new Stack<>();
        pedidos = new LinkedList<>();
    }

    public void agregarProducto(Producto producto) {
        for (int i = 0; i < productos.length; i++) {
            if (productos[i] == null) {
                productos[i] = producto;
                almacen.push(producto);
                return;
            }
        }
        System.out.println("No hay espacio en la tienda para más productos.");
    }

    public void mostrarProductos() {
        for (Producto producto : productos) {
            if (producto != null) {
                System.out.println(producto.mostrarInfo());
            }
        }
    }

    public void realizarPedido(String nombreCliente, String codigoProducto) {
        pedidos.add(new Pedido(nombreCliente, codigoProducto));
    }

    public void procesarPedido() {
        if (!pedidos.isEmpty()) {
            Pedido pedido = pedidos.poll();
            for (int i = 0; i < productos.length; i++) {
                if (productos[i] != null && productos[i].codigo.equals(pedido.codigoProducto)) {
                    inventario.add(productos[i]);
                    almacen.remove(productos[i]);
                    productos[i] = null;
                    System.out.println("Pedido procesado: " + pedido);
                    return;
                }
            }
            System.out.println("Producto no disponible en el inventario.");
        }
    }
}

class Pedido {
    private String nombreCliente;
    private String codigoProducto;

    public Pedido(String nombreCliente, String codigoProducto) {
        this.nombreCliente = nombreCliente;
        this.codigoProducto = codigoProducto;
    }

    @Override
    public String toString() {
        return "Cliente: " + nombreCliente + ", Producto: " + codigoProducto;
    }
}

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

        Producto electrodomestico1 = new Electrodomestico("Microondas", "E001", 800);
        Producto ropa1 = new Ropa("Camiseta", "R001", "M");

        tienda.agregarProducto(electrodomestico1);
        tienda.agregarProducto(ropa1);

        tienda.mostrarProductos();

        tienda.realizarPedido("Ana García", "E001");
        tienda.realizarPedido("Juan Pérez", "R001");

        tienda.procesarPedido();
        tienda.procesarPedido();
    }
}

Conclusión

Este ejercicio te permitirá poner en práctica tus conocimientos sobre programación orientada a objetos y estructuras de datos, con un enfoque particular en pilas y colas. Asegúrate de seguir las instrucciones y de utilizar correctamente las técnicas mencionadas. ¡Buena suerte en tu examen!

… … …

¡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

Categories:

Tags:

Comments are closed

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