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 read • Q2BSTUDIO Team

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.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.

Live Chat