Programación de Máquinas - Máquina Expendedora

Guía de diseño y código de una máquina expendedora en Go: patrón de estados, inventario y pagos concurrentes, APIs administrativas para reabastecimiento y cobro.

20 ago 2025 • 5 min de lectura • Equipo Q2BSTUDIO

Inteligencia-Artificial-

Machine Coding - Vending Machine: En este artículo presento un diseño y una implementación conceptual de una máquina expendedora usando Golang, adaptado para explicar la lógica, los estados y cómo mantener consistencia en escenarios concurrentes.

Requisitos principales: La máquina debe soportar múltiples productos con distintos precios y cantidades; aceptar monedas y billetes de varias denominaciones; dispensar el producto seleccionado y devolver cambio cuando sea necesario; mantener el inventario actualizado; manejar transacciones concurrentes garantizando consistencia de datos; ofrecer interfaces para reabastecer productos y recoger efectivo; y gestionar escenarios excepcionales como fondos insuficientes o producto agotado.

Análisis y enfoque: La máquina cambia su comportamiento según su estado. Estados sugeridos: Idle sin dinero insertado, HasMoney con dinero pero sin compra confirmada, Dispensing durante la entrega del producto, ReturnChange para devolver cambio. Para evitar grandes bloques if else se recomienda el Patrón Estado donde cada estado define las acciones válidas como InsertMoney, SelectProduct, Cancel y métodos relacionados.

Ejemplo de flujo: 1) La máquina inicia en idle. 2) Usuario selecciona producto o inserta moneda. 3) Si se selecciona producto y hay inventario se pasa a estado listo para pago. 4) Si el pago cubre el precio se transita a dispensing y se realiza DispenseProduct. 5) Si hay que devolver cambio se pasa a return change y se ejecuta ReturnChange. 6) Al finalizar la transacción se vuelve a idle.

Entidades principales: Product representa nombre, precio y cantidad; Coin y Note representan denominaciones; VendingMachine es el contexto principal que contiene inventario, inventario de efectivo, balance actual, producto seleccionado y el estado actual.

Interfaz de estado ejemplo: VendingMachineState con métodos SelectProduct(product *Product) InsertCoin(coin Coin) InsertNote(note Note) DispenseProduct() ReturnChange()

Contexto VendingMachine: Estructura que mantiene inventory map[Product]cantidad, estados concretos idleState readyState dispenseState returnChangeState y currentState. Además campos de transacción como selectedProduct y totalPayment. Métodos delegados llaman a currentState para realizar la acción y facilitan la transición entre estados mediante SetState.

Inicialización y delegación: NewVendingMachine crea el contexto, instancia objetos de estado concrete como IdleState ReadyState DispenseState ReturnChangeState y establece currentState a idleState. Los métodos SelectProduct, InsertCoin, InsertNote, DispenseProduct y ReturnChange delegan la ejecución al estado actual, permitiendo que el comportamiento cambie dinámicamente según el estado.

Implementación de estados: Cada estado implementa la interfaz VendingMachineState. Por ejemplo IdleState valida disponibilidad del producto, asigna selectedProduct y transita a readyState si procede. En IdleState las acciones de insertar moneda o billete pueden sugerir primero seleccionar producto, mientras que en ReadyState las inserciones actualizan totalPayment y cuando totalPayment >= precio se transita a DispenseState. DispenseState reduce inventario, registra ingreso de efectivo y si corresponde transita a ReturnChangeState. ReturnChangeState calcula y entrega cambio, actualiza caja y retorna a IdleState.

Pseudocódigo ilustrativo de IdleState: struct IdleState vendingMachine *VendingMachine Func SelectProduct(product *Product) if vendingMachine.inventory.IsAvailable(product) vendingMachine.selectedProduct = product vendingMachine.SetState(vendingMachine.readyState) println Producto seleccionado product.name else println Producto no disponible product.name Otras acciones en IdleState devuelven mensajes que indican seleccionar producto primero.

Consistencia y concurrencia: Para manejar múltiples transacciones concurrentes se debe proteger el acceso al inventario y la caja con mecanismos de sincronización propios de Go como mutex o utilizar canales para serializar operaciones críticas. Alternativas incluyen almacenar inventario y caja en un almacén transaccional o base de datos con soporte ACID y usar bloqueos optimistas o pesimistas según el caso. Tests de carga y condiciones de carrera son esenciales.

Gestión de efectivo e inventario: Mantener una estructura de inventario que permita consultar y actualizar cantidades de forma atómica. Llevar registro de las denominaciones disponibles para poder calcular cambio óptimo. Incluir funciones administrativas para reabastecer productos, añadir o retirar billetes y monedas, y recolectar fondos, con autenticación o roles administrativos según la necesidad.

Escenarios excepcionales: Fondos insuficientes: informar al usuario y permitir más inserciones o cancelación. Producto agotado: impedir selección y sugerir alternativas o reembolso. Falta de cambio: posibilidad de cancelar o emitir crédito. Errores hardware o en comunicación deben manejarse con retries y estados de error que permitan intervención humana.

Extensiones y mejoras: Interfaces REST o gRPC para gestionar la máquina remotamente, telemetría y logging para monitorizar ventas y alertas de stock, integración con servicios cloud aws y azure para almacenamiento de datos y análisis, y paneles de Business Intelligence como Power BI para visualizar ventas y comportamiento. Uso de agentes IA e IA para empresas para optimizar precios dinámicos, predicción de demanda y rutas de reabastecimiento, y modelos de detección de fraude o anomalías para ciberseguridad.

Buenas prácticas de diseño: Separar la lógica de negocio de la persistencia y de la interfaz de usuario, diseñar pruebas unitarias para cada estado y transacción, documentar invariantes y garantizar que las transiciones de estados son deterministas y seguras frente a fallos.

Sobre Q2BSTUDIO: Q2BSTUDIO es una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida. Ofrecemos soluciones que integran inteligencia artificial, ciberseguridad y servicios cloud aws y azure. Nuestro equipo trabaja en servicios inteligencia de negocio e implementaciones con Power BI para transformar datos en decisiones. Creamos soluciones de ia para empresas y desarrollamos agentes IA personalizados que automatizan tareas y mejoran la experiencia del cliente. Si necesitas una máquina expendedora conectada, una plataforma segura o modelos de IA a medida, Q2BSTUDIO aporta arquitectura, desarrollo y despliegue, con énfasis en seguridad y escalabilidad.

Palabras clave para posicionamiento: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.

Conclusión: Implementar una máquina expendedora robusta implica modelar claramente los estados y sus transiciones, proteger recursos compartidos en escenarios concurrentes, y diseñar interfaces administrativas y de monitorización. La combinación de un patrón estado bien aplicado con buenas prácticas de concurrencia y observabilidad permite construir una solución mantenible y escalable. Si te interesa una implementación profesional, integración con servicios cloud o aplicar inteligencia artificial para optimizar operaciones, contacta a Q2BSTUDIO para desarrollar software a medida adaptado a tus necesidades.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

Inteligencia artificial

Agentes de IA, chatbots y asistentes inteligentes que automatizan tareas y atienden a tus clientes 24/7 para mejorar la eficiencia de tu negocio.

Más info

Desarrollo de software

Aplicaciones web, móviles y de escritorio, intranets, e-commerce, SaaS y plataformas de gestión diseñadas para las necesidades concretas de tu empresa.

Más info

Servicios cloud

Migración, infraestructura, hosting gestionado, alta disponibilidad y seguridad en Microsoft Azure y Amazon Web Services para que tu negocio escale sin límites.

Más info

Ciberseguridad y pentesting

Auditorías de seguridad, test de intrusión (pentesting) y protección de aplicaciones, datos e infraestructura on-premise y cloud, con hacking ético y cumplimiento normativo.

Más info

Business Intelligence

Cuadros de mando y análisis de datos con Power BI: integramos tus fuentes, diseñamos dashboards y KPIs y convertimos tus datos en decisiones.

Más info

Automatización de procesos

Automatizamos tareas repetitivas y conectamos tus aplicaciones con n8n, Power Automate, Make y RPA, eliminando trabajo manual y aumentando la productividad.

Más info

Formación para empresas

Formamos a tus equipos en tecnología con criterio: desarrollo web, bases de datos, Git, buenas prácticas y seguridad, automatización con n8n, inteligencia artificial para empresas y creación de soluciones de IA con Azure AI Foundry.

Más info

Auditoría de código

Auditamos el código que creas tú, tu equipo o una IA: te decimos qué está bien y qué mejorar, lo securizamos y lo dejamos listo para producción, web o app.

Más info

Generación de imágenes con IA

Creamos por ti las imágenes que necesita tu negocio con inteligencia artificial: producto, redes, publicidad, ilustración y avatares. Tú nos dices qué quieres y te lo entregamos listo para usar.

Más info

Generación de vídeos con IA

Creamos por ti vídeos con inteligencia artificial: promocionales, para redes, presentadores virtuales, doblaje y animaciones. Nos cuentas la idea y te lo entregamos montado y listo para publicar.

Más info

Avatares conversacionales con IA

Creamos avatares conversacionales con IA —humanos digitales con cara y voz— que atienden a tus clientes y equipos con el conocimiento de tu empresa, en tu web, monitores interactivos, WhatsApp o Teams.

Más info

Marketing Online e IA

Google Ads, Meta Ads, LinkedIn Ads y posicionamiento en motores de IA (GEO/AEO): captamos clientes y hacemos que tu marca aparezca donde te buscan, también en ChatGPT, Gemini y Perplexity.

Más info

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.

Live Chat