Sistema de consola en Java 17+ para administrar un catálogo de artículos, aplicando herencia, interfaces y separación por capas.
Este proyecto es de TechLab.
- Herencia:
Articulo(abstracta) →ArticuloAlimenticio/ArticuloElectronico - Interfaces:
Identificable(contrato de ID) yCalculable(contrato de precio final) - Polimorfismo: cada subclase calcula su precio final de forma distinta
- Encapsulamiento: atributos privados, acceso por getters/setters
- Separación de responsabilidades:
model/repository/menu/utils/interfaces
Sin frameworks, sin base de datos, sin librerías externas. Solo JDK.
- CRUD completo de artículos desde consola
- Dos tipos de artículo con lógica propia:
- Alimenticio: registra
diasParaVencimiento. Si vence en < 15 días, aplica lógica especial encalcularPrecioFinal() - Electrónico: registra
garantiaMeses. Aplica IVA 21% encalcularPrecioFinal()
- Alimenticio: registra
- Categorías como
enum– Electrónica, Periféricos, Alimentos, Limpieza. Inmutables y tipadas. - ID autoincremental gestionado dentro de
Articulo(no se pide al usuario) - Menús separados que heredan de una clase base
Menu - Validaciones centralizadas para evitar entradas inválidas
- Repositorio genérico en memoria
<T extends Identificable>
com.techlab.articulo/
│
├── App.java // Punto de entrada
│
├── interfaces/
│ ├── Identificable.java // int getCodigo()
│ └── Calculable.java // double calcularPrecioFinal()
│
├── model/
│ ├── Articulo.java // abstract, implementa ambas interfaces
│ ├── ArticuloAlimenticio.java // + diasParaVencimiento
│ ├── ArticuloElectronico.java // + garantiaMeses
│ └── Categoria.java // enum con código, nombre, descripción
│
├── repository/
│ └── Repositorio.java // List<T>, CRUD general
│
├── menu/
│ ├── Menu.java // abstract, lectura segura
│ ├── MenuArticulos.java // ABM artículos
│ └── MenuCategorias.java // consulta de enum
│
└── utils/
└── Validaciones.java // texto no vacío, longitud, no negativo
codigo (auto) | nombre | precio | categoria
codigose genera conprivate static int contador- Define
toString()base
Añade diasParaVencimiento. Su calcularPrecioFinal() puede aplicar lógica de perecibles.
Añade garantiaMeses. Su calcularPrecioFinal() aplica IVA.
ELECTRONICA(1, "Electrónica", "Dispositivos electrónicos"),
PERIFERICOS(2, "Periféricos", "Accesorios de PC"),
ALIMENTOS(3, "Alimentos", "Productos alimenticios"),
CONGELADOS(4, "Congelados", "Productos alimenticios congelados");Incluye buscarPorCodigo(int) que lanza excepción si no existe.
| Tema | Consigna original | Mi implementación | Razón |
|---|---|---|---|
| Categorías | Clase + Repositorio<Categoria> + precargarCategorias() |
enum Categoria |
Son valores fijos del dominio. El enum evita errores, no necesita persistencia y da seguridad de tipos. |
| ID de Artículo | Ingresado por usuario + Secuencias |
Contador estático en Articulo |
Garantiza unicidad, simplifica el alta, elimina clase utilitaria. |
| MenuCategorias | ABM completo | Solo lectura | Al ser enum, no se puede crear/borrar en runtime. |
| Validaciones | Dispersas | Clase Validaciones final |
Reutilizable y testeable. |
Resultado:
App.javaya no instanciaRepositorio<Categoria>.
Requisitos: JDK 17+
En IntelliJ / VS Code: Marcar src como Sources Root → Run App.java
======================================================
SISTEMA DE ARTÍCULOS - (MENÚS SEPARADOS)
======================================================
1 - Menú de artículos
2 - Menú de categorías
0 - Salir
Menú Artículos:
- Agregar → elige tipo → completa datos → categoría se elige por código del enum
- Listar →
lista.forEach(System.out::println) - Buscar → muestra precio final polimórfico
- Modificar → cambia nombre, precio, categoría o campo específico
- Eliminar
- Listar por categoría
Menú Categorías:
- Solo lista las 4 constantes del enum y permite filtrar artículos.
Validaciones.java:
validarTextoNoVacio(String)– evita nombres vacíosvalidarLongitudMaxima(String, 50)– límite de UIvalidarNoNegativo(int/double)– precios, garantía y días
Todas las lecturas en Menu usan scanner.nextLine() para evitar el bug del buffer.
--- MENÚ ARTÍCULOS ---
1 - Agregar artículo
> 1
Tipo: 1-Electrónico 2-Alimenticio
Tipo: 1
Nombre: Mouse Gamer
Precio: 25000
Categorías disponibles:
1 - Electrónica
2 - Periféricos
Código categoría: 2
Garantía en meses: 24
Artículo agregado con código: 1
2 - Teclado Mecánico | $45000.00 | Cat: PERIFERICOS | Garantía: 24 meses
Precio final: $54450.00