Estacionamientos: Diseño LLD en Acción - Parte 1

Guía de Low-Level Design LLD para Parking Lot System: conceptos, componentes clave, patrones de diseño, buenas prácticas y anti-patrones, y cómo convertir el diseño en código mantenible y escalable.

1 sept 2025 • 6 min de lectura • Equipo Q2BSTUDIO

Inteligencia-Artificial-

¿Qué es el Low-Level Design LLD?

Low-Level Design LLD es el proceso de traducir el High-Level Design HLD a una especificación concreta y detallada lista para implementar en código. Incluye definir clases, interfaces, atributos, métodos, relaciones entre objetos, modelos de datos y el uso de patrones de diseño adecuados. El objetivo es lograr una arquitectura que sea clara, extensible, robusta y alineada con los requisitos funcionales y no funcionales.

Componentes clave del LLD

Clases y objetos para modelar entidades del dominio. Interfaces y abstracciones para desacoplar comportamientos. Relaciones entre clases como asociación, composición, agregación y herencia. Modelos de datos coherentes, tipos seguros y validaciones. Patrones de diseño para resolver problemas recurrentes con elegancia.

Consideraciones esenciales para un buen LLD

Ámbito y requisitos bien definidos. Modelos de datos claros. Principios SOLID, separación de responsabilidades y bajo acoplamiento. Robustez del sistema, escalabilidad y mantenibilidad. Reutilización mediante patrones, modularidad y extensibilidad sin romper código existente.

Errores comunes a evitar

Clases dios con demasiadas responsabilidades. Modelos de datos inconsistentes. Abuso de herencia que lleva a jerarquías frágiles. Ignorar requisitos no funcionales como concurrencia, seguridad y rendimiento. Sobreingeniería con patrones innecesarios cuando una solución simple basta.

Parking Lot System

Enunciado del problema: Diseñar un sistema de gestión para un estacionamiento de varios niveles que soporte diferentes tipos de vehículos, precios dinámicos y disponibilidad en tiempo real, con una base sólida de POO y arquitectura de sistemas.

Preguntas esenciales para capturar requisitos

Qué tipos de vehículos se admiten. Cuántos pisos tendrá el estacionamiento. Qué tamaños de plazas existen y cómo se asignan. Cómo funcionará la tarificación por hora, tarifa plana o híbrida. Se requiere seguimiento de disponibilidad en tiempo real. Se gestionan reservas y cancelaciones. Métodos de pago aceptados. Qué funcionalidades administrativas se necesitan reportes, auditoría, KPI.

Señales de alerta en levantamiento de requisitos

Ir directo a código sin entender el contexto. Asumir sin preguntar. No acotar el alcance y construir demasiado o muy poco. Ignorar casos borde tempranamente entradas inválidas, pérdidas de ticket, cortes de energía, picos de tráfico.

Enfoque recomendado para el diseño

Identificar componentes nucleares y sus responsabilidades, definir contratos interfaz y flujos de datos, elegir patrones donde aporten valor, y validar con escenarios de uso y casos borde.

Estructura conceptual básica en texto

ParkingLot coordina entradas, salidas, tickets, facturación. ParkingFloor gestiona disponibilidad por piso. ParkingSpot estado libre, ocupado, reservado y vehículo asignado. Vehicle tipo, tamaño, patente. Payment monto, método, estado. ParkingTicket hora de entrada y salida, spot, importe. Observadores para eventos como disponibilidad y alertas operativas.

Esquema ASCII simplificado

+-----------------+ +-----------------+ +-----------------+ ParkingLot ParkingFloor ParkingSpot - entradas/salidas - gestor de spots - vehiculo - tickets - disponibilidad - estado+-----------------+ +-----------------+ +-----------------+ | v+-----------------+ +-----------------+ +-----------------+ Vehicle Payment ParkingTicket - tipo/tamaño - importe - entrada/salida - patente - metodo - spot+-----------------+ +-----------------+ +-----------------+

Jerarquía de clases de vehículo

Vehicle abstracta con propiedades compartidas y comportamiento común.

Vehicle hereda a Motorcycle, Car, Truck, ElectricCar

Relaciones UML

Herencia generalización: Vehicle hereda a Motorcycle, Car, Truck y ElectricCar para extender comportamientos según restricciones de tamaño y necesidades específicas por ejemplo plazas con carga para eléctricos.

Composición y agregación

Composición fuerte: ParkingLot 1 contiene muchos ParkingFloor y ParkingFloor 1 contiene muchos ParkingSpot. Implica dependencia de ciclo de vida, si se elimina el padre se eliminan los hijos.

Agregación débil: ParkingLot 1 agrega muchos ParkingObserver. Observadores pueden existir por separado y ser compartidos, promoviendo bajo acoplamiento.

Asociación simple

ParkingSpot referencia a Vehicle como vehiculoAparcado. ParkingTicket asocia a ParkingSpot y a Payment. Las asociaciones son temporales, por ejemplo un vehículo puede moverse entre plazas.

Patrones de diseño aplicados

Estrategia Strategy para el cálculo de precios mediante PricingStrategy con implementaciones como HourlyPricingStrategy y FlatRatePricingStrategy. Permite cambiar la estrategia en tiempo de ejecución y cumple con Open Closed Principle.

Observador Observer para notificaciones de cambios de estado, como disponibilidad o eventos operativos. El ParkingLot no conoce los tipos concretos, solo el contrato del observador.

Fábrica Factory para crear instancias de Vehicle centralizando la lógica de construcción sin acoplar a implementaciones concretas.

Singleton para garantizar una única instancia de ParkingLot cuando el dominio así lo exija, con un punto de acceso global controlado.

Builder para construir ParkingLot complejos paso a paso pisos, cupos y tipos de plazas con una interfaz fluida.

Relaciones clave del dominio

Vehículo y plaza Vehicle y ParkingSpot se conocen mutuamente durante el estacionamiento y validan compatibilidad de tamaño y tipo. ParkingLot como orquestador coordina asignación de plazas, emisión de tickets, cobros y eventos, con inyección de dependencias para estrategias y observadores.

Interfaces vs clases abstractas

Interfaces cuando se define un contrato de comportamiento sin estado compartido por ejemplo PricingStrategy y ParkingObserver. Clases abstractas cuando existe estado y comportamiento común por ejemplo Vehicle con patente, color y métodos abstractos de compatibilidad.

Encapsulación y visibilidad

Campos privados para estado interno de ParkingSpot, Payment y ParkingTicket protegiendo invariantes. Campos protegidos en Vehicle para facilitar herencia. Métodos públicos para servicios y consultas, exponiendo una API clara y estable.

Concurrencia y seguridad de hilos

Bloqueos por plaza para control fino al asignar o liberar un spot. Bloqueos por piso para coordinar operaciones agregadas. Bloqueos a nivel de ParkingLot para operaciones críticas como cierres masivos o recálculo de disponibilidad. Uso de colecciones thread safe como mapas concurrentes para acceso seguro en escenarios con múltiples entradas y salidas simultáneas.

Resumen de buenas prácticas

Separación de responsabilidades, bajo acoplamiento, alto nivel de cohesión. Abstracciones apropiadas con interfaces y clases base. Concurrencia gestionada desde el diseño. Patrones aplicados con criterio y solo donde aportan. Extensibilidad para sumar nuevas estrategias, tipos de vehículo o reglas sin alterar el núcleo. Manejo de errores y casos borde. Tipos seguros con enums y validaciones.

Banderas rojas a evitar

Clases dios, obsesión por primitivos en lugar de tipos ricos, falta de control de concurrencia, acoplamiento fuerte entre módulos, ausencia de manejo de errores, valores hardcodeados, falta de abstracciones y nombres poco claros.

Qué sigue

En la siguiente parte trasladaremos el LLD a código implementable, con estructuras de clases, firmas de métodos, aplicación de patrones, manejo de escalabilidad y casos borde, y buenas prácticas para escribir código mantenible y probado.

Sobre Q2BSTUDIO y cómo podemos impulsar tu proyecto

En Q2BSTUDIO somos una empresa de desarrollo de software experta en aplicaciones a medida y software a medida, con un enfoque riguroso en arquitectura, escalabilidad y experiencia de usuario. Integramos inteligencia artificial e ia para empresas mediante agentes IA y analítica avanzada, reforzamos la ciberseguridad con prácticas y pruebas de pentesting, y modernizamos infraestructuras con servicios cloud aws y azure. También potenciamos la toma de decisiones con servicios inteligencia de negocio y power bi. Si buscas un aliado para construir productos sólidos desde el LLD hasta la puesta en producción, descubre cómo abordamos proyectos de aplicaciones a medida en nuestro enfoque de desarrollo y cómo aplicamos inteligencia artificial de forma responsable y orientada a resultados en nuestros servicios de IA.

Referencias y créditos

Se emplearon herramientas de apoyo para investigación y redacción, y el contenido final fue revisado y verificado por el autor. Este artículo es la Parte 1 de Parking Lot System Design LLD in Action y sienta las bases para la implementación detallada en la siguiente entrega.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

¿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.