========================================================================
PROYECTO FINAL: DISEÑO E IMPLEMENTACIÓN DE UN VISUALIZADOR DE ALGORITMOS
========================================================================
Diseño y Programación Orientados a Objetos (ELO329)
2026-1 Grupo 5 - Universidad Técnica Federico Santa María

Autores: Marco Duque, Sebastian Encina, Daniel Reyes, Victor Santos

------------------------------------------------------------------------
1. DESCRIPCIÓN PRINCIPAL DEL PROGRAMA
------------------------------------------------------------------------
Este proyecto resuelve la dificultad de comprender el funcionamiento 
interno de los algoritmos de ordenamiento mediante un visualizador 
interactivo. Desarrollado aplicando el patrón de arquitectura MVC 
(Modelo-Vista-Controlador), la aplicación de escritorio permite a 
estudiantes y docentes visualizar gráficamente la ejecución, comparar 
múltiples algoritmos de manera simultánea en tiempo real y entender el 
comportamiento de las estructuras de datos paso a paso.

El sistema simula las iteraciones e intercambios para fines didácticos,
permitiendo configurar la velocidad de la animación, avanzar o retroceder 
exactamente una iteración, y soporta algoritmos como QuickSort, BubbleSort, 
SelectionSort e InsertionSort.

------------------------------------------------------------------------
2. ARCHIVOS QUE COMPONEN EL PROYECTO
------------------------------------------------------------------------
El proyecto en su versión final se compone de los siguientes archivos:

* Modelos y Algoritmos (Lógica y datos):
  - Algorithm_adm.java   : Administrador central de los algoritmos instanciados.
  - AlgorithmType.java   : Enumerador que define los tipos de algoritmos disponibles.
  - BubbleSort.java      : Implementación lógica del algoritmo Bubble Sort.
  - InsertionSort.java   : Implementación lógica del algoritmo Insertion Sort.
  - QuickSort.java       : Implementación lógica del algoritmo Quick Sort.
  - SelectionSort.java   : Implementación lógica del algoritmo Selection Sort.
  - SimulationState.java : Mantiene el estado de la simulación y datos numéricos ingresados.
  - SortSnapshot.java    : Guarda los frames o estados de cada paso para cada algoritmo.

* Vistas y Controladores (Interfaz gráfica y lógica de control):
  - GUI_adm.java               : Administrador de las interacciones visuales (Visual Handlers).
  - Input_adm.java             : Controlador lógico para los ingresos del usuario (Logic Ctrl).
  - SimulationWindow.java      : Orquestador central de la simulación múltiple.
  - SimulationController.java  : Clase controladora de eventos de la simulación.
  - AlgorithmPanel.java        : Panel visual que contiene las barras cargadas en la grilla.
  - Proyecto Poo Interfaz.fxml : Archivo FXML con la estructura de la interfaz principal.

* Principal y Recursos:
  - Main.java            : Archivo principal que inicia la aplicación.
  - AppConfig.java       : Configuraciones y constantes generales del sistema.
  - makefile             : Script automatizado para compilar y ejecutar.
  - Archivos PNG         : Iconos para la interfaz gráfica (START, RESET, L_STEP, R_STEP, ADD2, DELETE).
  - button_sound.mp3     : Archivo de audio para efectos de interacción en la interfaz.

------------------------------------------------------------------------
3. CÓMO COMPILAR Y EJECUTAR
------------------------------------------------------------------------
MÉTODO AUTOMATIZADO:
Se incluye un archivo 'makefile' configurado para el entorno del proyecto. 
- Para compilar: Escriba 'make' en la consola.
- Para ejecutar: Escriba 'make run' en la consola.
- Para limpiar : Escriba 'make clean' en la consola.

Nota: El ingreso de datos (números) y la selección de los algoritmos a 
simular se realiza directamente a través del menú principal de la interfaz 
gráfica ("Sorting Algorithm Viewer") y no mediante un archivo de texto 
de configuración.

En el archivo makefile cambiar el JFX_PATH por su respectivo directorio de javafx

------------------------------------------------------------------------
4. DOCUMENTACIÓN ADICIONAL
------------------------------------------------------------------------
* Informe de Proyecto: Se encuentra todo lo necesario, abriendo el archivo 
  'index.html' adjunto en el proyecto.

* Javadoc: El código fuente incluye documentación en formato Javadoc para 
  las clases y métodos relevantes. Puede generarse mediante las herramientas 
  del IDE o comandos correspondientes.