Skip to content

egrazm/CiudadGps_refact

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proyecto: Mapa con Clases en Python

Este proyecto es una práctica para reforzar conceptos de programación estructurada y programación orientada a objetos (POO) en Python. Comienza con una versión funcional usando funciones y luego se refactoriza a clases.


📂 Estructura y responsabilidades

  • Funciones:
    La versión inicial resuelve la lógica principal con funciones sueltas:

    • generar_mapa(): genera la matriz del mapa.
    • validar_coordenadas(): comprueba que una posición esté dentro de los límites.
    • imprimir_mapa(): muestra la cuadrícula.
    • main(): organiza el flujo de ejecución.
  • Clases:
    La versión refactorizada encapsula todo dentro de clases:

    • Mapa: representa la cuadrícula, valida posiciones, gestiona inicio, salida y obstáculos.
    • Juego: controla la interacción con el usuario y usa Mapa para construir la lógica general.

🧩 ¿Cómo dividí las responsabilidades?

  • Mapa:

    • Se encarga de crear y mantener el estado del mapa.
    • Valida coordenadas.
    • Permite agregar inicio, salida y obstáculos.
    • Se ocupa de imprimir su propio contenido.
  • Juego:

    • Orquesta la interacción con el usuario.
    • Pide datos al usuario para ubicar obstáculos.
    • Llama a los métodos de Mapa según corresponda.
    • Mantiene separado el flujo de ejecución de la lógica interna del mapa.

📚 ¿Qué aprendí al refactorizar?

  • Encapsular la lógica en clases hace que el código sea más modular, legible y reutilizable.
  • El código se vuelve más fácil de mantener, porque cada clase tiene una responsabilidad clara.
  • Aprendí a convertir un programa procedural en POO, trasladando funciones a métodos y pasando de variables globales a atributos de instancia.
  • Practiqué la creación de métodos constructores __init__, el uso de self y la correcta gestión de atributos de instancia.

⚙️ Decisiones clave y razones

  • Separar en dos clases (Mapa y Juego):
    Para que la lógica del mapa y la lógica del flujo de juego estén desacopladas. Esto facilita reutilizar Mapa en otros programas o pruebas automáticas.

  • Inicializar inicio y salida como None:
    Porque no siempre se conoce su valor al crear el mapa. Se colocan después con métodos específicos.

  • Mantener validación dentro de Mapa:
    Así, se garantiza que no haya posiciones inválidas sin importar desde dónde se use la clase.

  • Mantener la interacción de usuario solo en Juego:
    Para que Mapa sea una clase pura, sin input() ni print() directos excepto el método imprimir(). Esto separa la lógica de negocio de la interacción.


✅ Estado actual

  • ✔️ Versión funcional procedural.
  • ✔️ Refactorización a POO.
  • ✔️ Flujo de ejecución organizado en una clase Juego.

About

Restructuracion del Challenge CiudadGps

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages