Skip to content

pepvillalonga/VendingMachine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Programacion Modular en Java: Simulacion de Maquina Expendedora

Este proyecto demuestra los conceptos fundamentales de la programacion modular utilizando un enfoque estructurado/procedural en Java.

Descripcion del Proyecto

La simulacion de una maquina expendedora es un ejemplo perfecto para ilustrar la programacion modular. El proyecto esta dividido en tres modulos claramente definidos:

Modulo Responsabilidad
MaquinaExpendedora Programa principal que coordina los modulos y maneja la interaccion con el usuario
ModuloInventario Gestiona los productos, sus precios y disponibilidad
ModuloMonedero Gestiona todo lo relacionado con el dinero (insercion, pagos y cambio)

Estructura del Proyecto

.
├── MaquinaExpendedora.java  # Programa principal
├── ModuloInventario.java    # Modulo para gestion de productos
├── ModuloMonedero.java      # Modulo para gestion del dinero
└── README.md                # Este archivo

Conceptos de Programacion Modular

Que es un Modulo?

Un modulo es una unidad independiente de codigo que agrupa variables y funciones relacionadas con una tarea especifica.

Nota: Los modulos son como "librerias" especializadas, cada una con su propio ambito de responsabilidad claramente definido. En Java, utilizamos clases como contenedores de funciones y variables estaticas.


Ocultacion de Informacion (Encapsulacion)

La ocultacion de informacion es un principio que establece que los datos internos de un modulo deben estar protegidos del acceso directo desde fuera del modulo.

En nuestro ejemplo:

  • Las variables stockProductos, preciosProductos y nombresProductos en ModuloInventario son private static.
  • Las variables dineroInsertado y dineroTotal en ModuloMonedero son private static.
// ERROR: No compila, acceso denegado
ModuloInventario.stockProductos[0] = -100;
ModuloMonedero.dineroTotal = 999999;

// CORRECTO: usa las funciones publicas que validan la operacion
ModuloInventario.dispensarProducto(0);
ModuloMonedero.insertarDinero(100);

Bajo Acoplamiento

El bajo acoplamiento significa que los modulos dependen lo menos posible unos de otros.

En nuestro ejemplo:

  • ModuloInventario no sabe nada sobre como se gestiona el dinero.
  • ModuloMonedero no sabe nada sobre que productos existen ni sus precios.
  • El programa principal conoce la interfaz publica de ambos modulos pero no sus detalles internos.

Alta Cohesion

La alta cohesion significa que un modulo tiene un proposito unico y bien definido.

En nuestro ejemplo:

  • ModuloInventario solo se ocupa de la gestion de productos.
  • ModuloMonedero solo se ocupa de la gestion del dinero.

Implicaciones de Usar Metodos static

Caracteristica Descripcion
Sin instanciacion No necesitamos crear objetos con new ModuloInventario()
Datos compartidos Las variables static existen una unica vez en memoria
Simulacion de modulos Los metodos static nos permiten simular modulos independientes

Advertencia: No podemos tener multiples maquinas expendedoras independientes con estados diferentes, porque todas compartirian las mismas variables static. Para eso necesitariamos POO.


Beneficios de la Programacion Modular

Beneficio Descripcion
Mantenibilidad Es mas facil mantener codigo organizado en modulos
Reutilizacion Los modulos bien disenados pueden reutilizarse
Facilidad de prueba Es mas facil probar un modulo aisladamente
Division del trabajo Diferentes programadores pueden trabajar en diferentes modulos
Gestion de complejidad Ayuda a manejar sistemas complejos dividiendolos en partes mas pequenas

Instrucciones para Compilar y Ejecutar

Prerrequisitos

  • Java Development Kit (JDK) instalado

Compilacion

javac MaquinaExpendedora.java ModuloInventario.java ModuloMonedero.java

Ejecucion

java MaquinaExpendedora

Como Usar la Maquina Expendedora

  1. Ver productos disponibles: Muestra todos los productos, sus precios y stock
  2. Insertar dinero: Te permite agregar dinero a la maquina
  3. Comprar producto: Selecciona un producto para comprarlo
  4. Solicitar cambio: Recupera el dinero insertado
  5. Salir: Finaliza el programa

Resumen de Modulos

ModuloInventario

  • Responsabilidad: Gestion de productos
  • Variables: nombresProductos, stockProductos, preciosProductos
  • Metodos principales: mostrarProductos(), verificarStock(), dispensarProducto(), consultarPrecio()

ModuloMonedero

  • Responsabilidad: Gestion del dinero
  • Variables: dineroInsertado, dineroTotal
  • Metodos principales: insertarDinero(), procesarPago(), darCambio(), verificarDineroSuficiente()

MaquinaExpendedora (Programa Principal)

  • Responsabilidad: Coordinar los modulos y gestionar la interfaz de usuario
  • Funcionamiento: Muestra el menu, recibe las opciones del usuario y llama a los metodos adecuados de cada modulo

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages