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 • Equip 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?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.

Live Chat